使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码

合集下载

分别提取出汉字、字母、数字的正则表达式VBA

分别提取出汉字、字母、数字的正则表达式VBA

需要建立宏‎,把下面的‎内容完全复‎制粘贴,覆‎盖原有的宏‎就可以,然‎后点运行。

‎有需要的同‎事可以保存‎下来。

‎一、去掉字‎母、数字,‎符号等,在‎另一行提取‎出汉字‎S ub 查‎找和替换(‎)Dim‎regE‎x As ‎O bjec‎tDim‎i As‎Doub‎l eS‎e t re‎g Ex =‎Crea‎t eObj‎e ct("‎V BSCR‎I PT.R‎E GEXP‎")re‎g Ex.P‎a tter‎n = "‎[^\u4‎e00-\‎u9fa5‎]"re‎g Ex.I‎g nore‎C ase ‎= Tru‎ereg‎E x.Gl‎o bal ‎= Tru‎eFor‎i = ‎1 To ‎A ctiv‎e Shee‎e‎d Rang‎e.Row‎s.Cou‎n t‎‎ Cel‎l s(i,‎2).V‎a lue ‎= reg‎E x.Re‎p lace‎(Cell‎s(i, ‎1), "‎")Ne‎x t i‎S et r‎e gEx ‎= Not‎h ing‎E nd S‎u b二‎、去掉汉字‎,字母,符‎号等,在另‎一行提取出‎数字Su‎b查找和‎替换()‎D im r‎e gEx ‎A s Ob‎j ect‎D im i‎As I‎n tege‎rSe‎t reg‎E x = ‎C reat‎e Obje‎c t("V‎B SCRI‎P T.RE‎G EXP"‎)reg‎E x.Pa‎t tern‎= "\‎D+"r‎e gEx.‎I gnor‎e Case‎= Tr‎u ere‎g Ex.G‎l obal‎= Tr‎u eFo‎r i =‎1 To‎Acti‎v eShe‎e ‎e dRan‎g e.Ro‎w s.Co‎u nt‎‎ Ce‎l ls(i‎, 2).‎V alue‎= re‎g Ex.R‎e plac‎e(Cel‎l s(i,‎1), ‎"")N‎e xt i‎Set ‎r egEx‎= No‎t hing‎End ‎S ub‎三、去掉汉‎字,数字,‎符号等,在‎另一行提取‎出字母‎S ub 查‎找和替换(‎)Dim‎regE‎x As ‎O bjec‎tDim‎i As‎Doub‎l eS‎e t re‎g Ex =‎Crea‎t eObj‎e ct("‎V BSCR‎I PT.R‎E GEXP‎")re‎g Ex.P‎a tter‎n = "‎[^a-z‎A-Z]"‎regE‎x.Ign‎o reCa‎s e = ‎T rue‎r egEx‎.Glob‎a l = ‎T rue‎F or i‎= 1 ‎T o Ac‎t iveS‎h eet.‎U sedR‎a nge.‎R ows.‎C ount‎‎‎C ells‎(i, 2‎).Val‎u e = ‎r egEx‎.Repl‎a ce(C‎e lls(‎i, 1)‎, "")‎Next‎iSe‎t reg‎E x = ‎N othi‎n gEn‎d Sub‎‎。

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码Function IsLike(strText As String, pattern As String) As BooleanIsLike = strText Like patternEnd FunctionFunction IsChinese(strText As String) As BooleanDim i%, h$h = Hex(Asc(strText))If Asc(Left(h, 1)) >= 66 And Asc(Left(h, 1)) <= 70 ThenIsChinese = TrueEnd IfEnd FunctionFunction StringType(strText As String, Optional outPutType AsInteger = 1, Optional sumVar AsBoolean = False) As VariantDim strtemp As String, blnArray(1 To 5) As String, strPreType As Integer Dim intNum As Integer, startPos As Integer, intlen As Integer Dim strArray As Variant, strCompare1 As String, strCompare2 As String, dblSum As Double If sumVar = True And Not (outPutType <> 2 Or outPutType <> 4) Then sumVar = False For i = 1 To Len(strText)strtemp = Mid(strText, i, 1)If i > 1 Then strCompare1 = WorksheetFunction.Asc(Mid(strText, i - 1, 3))strCompare2 = WorksheetFunction.Asc(Mid(strText, i, 2))If WorksheetFunction.Dbcs(strtemp) = strtemp Thenstrtemp = WorksheetFunction.Asc(strtemp)If IsLike(strtemp, "[0-9]") Or IsLike(strCompare1, "[0-9].[0-9]") Or IsLike(strCompare2, "-[0-9]") ThenIf strPreType = 4 ThenblnArray(4) = Left(blnArray(4), Len(blnArray(4)) - 1) & intNumElseintNum = 1blnArray(4) = blnArray(4) & "- " & i & "/" & intNumEnd IfstrPreType = 4intNum = intNum + 1ElseIf IsLike(strtemp, "[a-zA-Z]") ThenIf strPreType = 5 ThenblnArray(5) = Left(blnArray(5), Len(blnArray(5)) - 1) & intNumElseintNum = 1blnArray(5) = blnArray(5) & "- " & i & "/" & intNumEnd IfstrPreType = 5intNum = intNum + 1ElseIf IsChinese(strtemp) ThenIf strPreType = 1 ThenblnArray(1) = Left(blnArray(1), Len(blnArray(1)) - 1) & intNumElseintNum = 1blnArray(1) = blnArray(1) & "- " & i & "/" & intNumEnd IfstrPreType = 1intNum = intNum + 1ElsestrPreType = 0End IfElseIf IsLike(strtemp, "[0-9]") Or IsLike(strCompare1, "[0-9].[0-9]") Or IsLike(strCompare2, "-[0-9]") ThenIf strPreType = 2 ThenblnArray(2) = Left(blnArray(2), Len(blnArray(2)) - 1) & intNumElseintNum = 1blnArray(2) = blnArray(2) & "- " & i & "/" & intNumEnd IfstrPreType = 2intNum = intNum + 1ElseIf IsLike(strtemp, "[a-zA-Z]") ThenIf strPreType = 3 ThenblnArray(3) = Left(blnArray(3), Len(blnArray(3)) - 1) & intNumElseintNum = 1blnArray(3) = blnArray(3) & "- " & i & "/" & intNumEnd IfstrPreType = 3intNum = intNum + 1ElsestrPreType = 0End IfEnd IfNextstrtemp = ""strArray = Split(blnArray(outPutType), "-")For i = 1 To UBound(strArray)intNum = InStr(1, strArray(i), "/")startPos = Mid(strArray(i), 1, intNum - 1)intlen = Mid(strArray(i), intNum + 1)If sumVar ThendblSum = dblSum + WorksheetFunction.Asc(Mid(strText, startPos, intlen))Elsestrtemp = strtemp & Mid(strText, startPos, intlen) & " "End IfNextIf sumVar ThenStringType = dblSum ElseIf Len(strtemp) ThenStringType = Left(strtemp, Len(strtemp) - 1)ElseStringType = ""End IfEnd IfEnd Function大连软件园1号楼及周边改造地块项目3#楼炉渣回填施工技术交底编制人: 马广军审核人: 邹旭2014年 11月 26 日大连软件园1号楼及周边改造地块项目技术交底记录工程名称大连软件园1号楼及周边改造地块项目施工单位大连亿达建设工程有限公司分项工程名称炉渣回填施工2014.11.26 交底日期交底提要回填,炉渣交底主要内容:一、主要材料3炉渣:宜采用烟煤炉渣,表观密度应为800kg/m以内;炉渣内不应含有机杂质和未燃尽的煤块,粒径不应大于40mm,且不可大于垫层厚度的1/2;炉渣粒径在5mm以下者,不得超过炉渣总体积的40%。

Excel中VBA代码段汇集,附中文解说

Excel中VBA代码段汇集,附中文解说

Excel中VBA代码段汇集,附中文解说vba语句(1) Option Explicit '强制对模块内所有变量进行声明(2) Option Base 1 '指定数组的第一个下标为1(3) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息(4) On Error GoT o 100 '当错误发生时跳转到过程中的某个位置(5) On Error GoT o 0 '恢复正常的错误提示(6) Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示(7) Application.DisplayAlerts=True '在程序执行过程中(8) Application.ScreenUpdating=False '关闭屏幕刷新(9) Application.ScreenUpdating = True '打开屏幕刷新(10) Workbooks.Add() '创建一个新的工作簿(11) Workbooks(“book1.xls”).Activate '激活名为book1的工作簿(12) ThisWorkbook.Save '保存工作簿(13) ThisWorkbook.close '关闭当前工作簿(14) ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表数(15) '返回活动工作薄的名称(16) ‘返回当前工作簿名称(17) ThisWorkbook.FullName ‘返回当前工作簿路径和名(18) (18) edRange.Rows.Count ‘当前工作表中已使用的行数(19) Rows.Count ‘获取工作表的行数(注:考虑兼容性)(20) Sheets(Sheet1).Name= “Sum” '将Sheet1命名为Sum(21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) '添加一个新工作表在第一工作表前(22) ActiveSheet.Move After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) '将当前工作表移至工作表的最后(23) Worksheets(Array(“sheet1”,”sheet2”)).Select '同时选择工作表1和工作表2(24) Sheets(“sheet1”).Delete或Sheets(1).Delete '删除工作表1(25) edRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式(26) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接(27) ActiveCell.CurrentRegion.Select选择当前活动单元格所包含的范围,上下左右无空行(28) Cells.Select ‘选定当前工作表的所有单元格(29) Range(“A1”).ClearContents '清除活动工作表上单元格A1中的Selection.ClearContents '清除选定区域内容Range(“A1:D4”).Clear '彻底清除A1至D4单元格区域的内容,包括格式(30) Cells.Clear '清除工作表中所有单元格的内容(31) ActiveCell.Offset(1,0).Select '活动单元格下移一行,同理,可下移一列(32) Range(“A1”).Copy Range(“B1”) '复制单元格A1,粘贴到单元格B1中(33) Range(“A1:D8”).Copy Range(“F1”) '将单元格区域复制到单元格F1开始的区域中(34) Range(“A1:D8”).Cut Range(“F1”) '剪切单元格区域A1至D8,复制到单元格F1开始的区域中(35) Range(“A1”).CurrentRegion.Copy Sheets(“Sheet2”).Range(“A1”) '复制包含A1的单元格区域到工作表2中以A1起始的单元格区域中注:CurrentRegion属性等价于定位命令,由一个矩形单元格块组成,周围是一个或多个空行或列(36) ActiveWindow.RangeSelection.Count '活动窗口中选择的单元格数(37) Selection.Count '当前选中区域的单元格数(38) Range(“A1”).Interior.ColorIndex ‘获取单元格A1背景色(39) cells.count ‘返回当前工作表的单元格数(40) Range(“B3”).Resize(11, 3)(41) Union(Range(“A1:A9”),Range(“D1:D9”)) 区域连接(42) Intersect(Range(“A1:B9”),Range(“A1:D9”))) ‘返回的交叉区域(43) Selection.Columns.Count ‘当前选中的单元格区域中的列数(44) Selection.Rows.Count ‘当前选中的单元格区域中的行数(45) edRange.Row ‘获取单元格区域中使用的第一行的行号(46) Application.WorksheetFunction.IsNumber(“A1”) '使用工作表函数检查A1单元格中的数据是否为数字(47)Range(“A:A”).Find(Application.WorksheetFunction.Max(Range(“A:A”))).Activate'激活单元格区域A列中最大值的单元格(48) MsgBox “Hello!” '消息框中显示消息Hello(49) Ans=MsgBox(“Continue?”,vbYesNo) '在消息框中点击“是”按钮,则Ans值为vbYes;点击“否”按钮,则Ans值为vbNo。

使用VBA进行数据验证

使用VBA进行数据验证

使用VBA进行数据验证在Excel中,VBA(Visual Basic for Applications)是一种强大的编程语言,能够帮助用户自定义功能和自动化任务。

其中一个常见的应用就是数据验证。

通过使用VBA进行数据验证,用户可以确保数据的准确性和完整性,避免输入错误和不一致的数据。

在这篇文章中,我们将介绍如何利用VBA来进行数据验证,并展示具体的代码示例。

数据验证是一种重要的技术,可以有效避免用户在输入数据时出现错误。

通过设定规则和条件,可以限制用户输入的范围,确保数据的有效性。

在Excel中,我们可以通过数据验证功能实现这一目的,而借助VBA,用户可以更灵活地定制验证规则,实现更复杂的验证逻辑。

首先,我们需要打开Excel,并按下Alt + F11键打开VBA编辑器。

在VBA编辑器中,我们可以开始编写代码。

假设我们有一个需要进行数据验证的单元格范围,比如A1:A10。

我们可以编写以下代码来限制该单元格范围只能输入数字:```vbaPrivate Sub Worksheet_Change(ByVal Target As Range)Dim cell As RangeFor Each cell In TargetIf Not Intersect(cell, Me.Range("A1:A10")) Is Nothing ThenIf Not IsNumeric(cell.Value) ThenMsgBox "只能输入数字!", vbExclamationApplication.EnableEvents = Falsecell.Value = ""Application.EnableEvents = TrueEnd IfEnd IfNext cellEnd Sub```在上面的代码中,我们通过Worksheet_Change事件来触发数据验证。

Excel-VBA自定义函数分离字符串中的数值英文和汉字

Excel-VBA自定义函数分离字符串中的数值英文和汉字

Excel-VBA自定义函数分离字符串中的数值英文和汉字应用场景返回单元格字符中的数值、字母、汉字知识要点1:CreateObject('VBSCRIPT.REGEXP')正则表达式:又称规则表达式,计算机科学的一个概念。

正则表通常被用来检索、替换那些符合某个模式(规则)的文本声明自定义函数取值,第一个参数是单元格或者字符串,第二参数用于指定取值的类型,包括-hz\ hz\-zm\ zm\-sz\ sz 6个选项rng 表示单元格引用,types参数用于控制英文、数字和汉字,如果忽略第二参数,表示取数值Function 取值(Rng, Optional Types As String = ' sz') As String With CreateObject('VBSCRIPT.REGEXP') '引用正则表达式.Global = True '全局变量'指定搜索条件,如是第二参数左边有“-”,那么取反(即去除指定的对象),否则提取指定的对象'如果第二参数包括hz,那么计算对象的范围是,代表所有汉字,如果是sz,对象范围0-9代表所有数组,否则计算对象为字母,范围a-zA-Z.Pattern = '[' & IIf(Left(Types, 1) = '-', '', '^') & IIf(Right(Types, 2) = 'hz', '一-隝]', IIf(Right(Types, 2) = 'sz', '0-9]', 'a-zA-Z]'))取值 = .Replace(Rng, '') '替换掉不需要的字符End WithEnd Function。

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂代码Function IsLike(strText As String, pattern As String) As BooleanIsLike = strText Like patternEnd FunctionFunction IsChinese(strText As String) As BooleanDim i%, h$h = Hex(Asc(strText))If Asc(Left(h, 1)) >= 66 And Asc(Left(h, 1)) <= 70 ThenIsChinese = TrueEnd IfEnd FunctionFunction StringType(strText As String, Optional outPutType AsInteger = 1, Optional sumVar AsBoolean = False) As VariantDim strtemp As String, blnArray(1 To 5) As String, strPreType As Integer Dim intNum As Integer, startPos As Integer, intlen As Integer Dim strArray As Variant, strCompare1 As String, strCompare2 As String, dblSum As Double If sumVar = True And Not (outPutType <> 2 Or outPutType <> 4) Then sumVar = False For i = 1 To Len(strText)strtemp = Mid(strText, i, 1)If i > 1 Then strCompare1 = WorksheetFunction.Asc(Mid(strText, i - 1, 3))strCompare2 = WorksheetFunction.Asc(Mid(strText, i, 2))If WorksheetFunction.Dbcs(strtemp) = strtemp Thenstrtemp = WorksheetFunction.Asc(strtemp)If IsLike(strtemp, "[0-9]") Or IsLike(strCompare1, "[0-9].[0-9]") Or IsLike(strCompare2, "-[0-9]") ThenIf strPreType = 4 ThenblnArray(4) = Left(blnArray(4), Len(blnArray(4)) - 1) & intNumElseintNum = 1blnArray(4) = blnArray(4) & "- " & i & "/" & intNumEnd IfstrPreType = 4intNum = intNum + 1ElseIf IsLike(strtemp, "[a-zA-Z]") ThenIf strPreType = 5 ThenblnArray(5) = Left(blnArray(5), Len(blnArray(5)) - 1) & intNumElseintNum = 1blnArray(5) = blnArray(5) & "- " & i & "/" & intNumEnd IfstrPreType = 5intNum = intNum + 1ElseIf IsChinese(strtemp) ThenIf strPreType = 1 ThenblnArray(1) = Left(blnArray(1), Len(blnArray(1)) - 1) & intNumElseintNum = 1blnArray(1) = blnArray(1) & "- " & i & "/" & intNumEnd IfstrPreType = 1intNum = intNum + 1ElsestrPreType = 0End IfElseIf IsLike(strtemp, "[0-9]") Or IsLike(strCompare1, "[0-9].[0-9]") Or IsLike(strCompare2, "-[0-9]") ThenIf strPreType = 2 ThenblnArray(2) = Left(blnArray(2), Len(blnArray(2)) - 1) & intNumElseintNum = 1blnArray(2) = blnArray(2) & "- " & i & "/" & intNumEnd IfstrPreType = 2intNum = intNum + 1ElseIf IsLike(strtemp, "[a-zA-Z]") ThenIf strPreType = 3 ThenblnArray(3) = Left(blnArray(3), Len(blnArray(3)) - 1) & intNumElseintNum = 1blnArray(3) = blnArray(3) & "- " & i & "/" & intNumEnd IfstrPreType = 3intNum = intNum + 1ElsestrPreType = 0End IfEnd IfNextstrtemp = ""strArray = Split(blnArray(outPutType), "-")For i = 1 To UBound(strArray)intNum = InStr(1, strArray(i), "/")startPos = Mid(strArray(i), 1, intNum - 1)intlen = Mid(strArray(i), intNum + 1)If sumVar ThendblSum = dblSum + WorksheetFunction.Asc(Mid(strText, startPos, intlen))Elsestrtemp = strtemp & Mid(strText, startPos, intlen) & " "End IfNextIf sumVar ThenStringType = dblSum ElseIf Len(strtemp) ThenStringType = Left(strtemp, Len(strtemp) - 1)ElseStringType = ""End IfEnd IfEnd Function大连软件园1号楼及周边改造地块项目3#楼炉渣回填施工技术交底编制人: 马广军审核人: 邹旭2014年 11月 26 日大连软件园1号楼及周边改造地块项目技术交底记录工程名称大连软件园1号楼及周边改造地块项目施工单位大连亿达建设工程有限公司分项工程名称炉渣回填施工2014.11.26 交底日期交底提要回填,炉渣交底主要内容:一、主要材料3炉渣:宜采用烟煤炉渣,表观密度应为800kg/m以内;炉渣内不应含有机杂质和未燃尽的煤块,粒径不应大于40mm,且不可大于垫层厚度的1/2;炉渣粒径在5mm以下者,不得超过炉渣总体积的40%。

word检查标点符号错误vba

word检查标点符号错误vba

word检查标点符号错误vba可以使用VBA编程来自动检查和修复Word文档中的标点符号错误。

以下是一个简单的VBA 代码示例,用于检查和修复常见的标点符号错误:```vbaSub 检查修复标点符号错误()Dim rng As RangeDim i As LongDim punctuation As VariantDim correctPunctuation As Variant' 定义需要检查的标点符号和对应的正确标点符号punctuation = Array(",", "。

", "!", "?", ";", ":")correctPunctuation = Array(",", ".", "!", "?", ";", ":")' 循环遍历每一个段落For Each rng In ActiveDocument.Range.Paragraphs' 检查该段落中的每一个字符For i = 1 To rng.Range.Characters.Count' 判断字符是否为需要修复的标点符号If UCase(rng.Range.Characters(i).Text) Like "[!A-Z0-9]" ThenFor j = LBound(punctuation) To UBound(punctuation)' 修复标点符号If rng.Range.Characters(i).Text = punctuation(j) Thenrng.Range.Characters(i).Text = correctPunctuation(j)Exit ForEnd IfNext jEnd IfNext iNext rngEnd Sub```请注意,在运行此VBA代码之前,请务必先备份您的Word文档,以防止不可预料的错误。

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂解读

使用VBA判断单元格各字符是否为中文、英文、数字、符号的复杂解读

Function IsLike(strText As String, pattern As String As BooleanIsLike = strText Like patternEnd FunctionFunction IsChinese(strText As String As BooleanDim i%, h$h = Hex(Asc(strTextIf Asc(Left(h, 1 >= 66 And Asc(Left(h, 1 <= 70 ThenIsChinese = TrueEnd IfEnd FunctionFunction StringType(strText As String, Optional outPutType As Integer = 1, Optional sumVar As Boolean = False As VariantDim strtemp As String, blnArray(1 To 5 As String, strPreType As IntegerDim intNum As Integer, startPos As Integer, intlen As IntegerDim strArray As Variant, strCompare1 As String, strCompare2 As String, dblSum As DoubleIf sumVar = True And Not (outPutType <> 2 Or outPutType <> 4 Then sumVar = FalseFor i = 1 To Len(strTextstrtemp = Mid(strText, i, 1If i > 1 Then strCompare1 = WorksheetFunction.Asc(Mid(strText, i - 1, 3strCompare2 = WorksheetFunction.Asc(Mid(strText, i, 2If WorksheetFunction.Dbcs(strtemp = strtemp Thenstrtemp = WorksheetFunction.Asc(strtempIf IsLike(strtemp, "[0-9]" Or IsLike(strCompare1, "[0-9].[0-9]" Or IsLike(strCompare2, "-[0-9]" ThenIf strPreType = 4 ThenblnArray(4 = Left(blnArray(4, Len(blnArray(4 - 1 & intNumElseintNum = 1blnArray(4 = blnArray(4 & "- " & i & "/" & intNumEnd IfstrPreType = 4intNum = intNum + 1ElseIf IsLike(strtemp, "[a-zA-Z]" ThenIf strPreType = 5 ThenblnArray(5 = Left(blnArray(5, Len(blnArray(5 - 1 & intNumElseintNum = 1blnArray(5 = blnArray(5 & "- " & i & "/" & intNumEnd IfstrPreType = 5intNum = intNum + 1ElseIf IsChinese(strtemp ThenIf strPreType = 1 ThenblnArray(1 = Left(blnArray(1, Len(blnArray(1 - 1 & intNumElseintNum = 1blnArray(1 = blnArray(1 & "- " & i & "/" & intNumEnd IfstrPreType = 1intNum = intNum + 1ElsestrPreType = 0End IfElseIf IsLike(strtemp, "[0-9]" Or IsLike(strCompare1, "[0-9].[0-9]" Or IsLike(strCompare2, "-[0-9]" ThenIf strPreType = 2 ThenblnArray(2 = Left(blnArray(2, Len(blnArray(2 - 1 & intNum ElseintNum = 1blnArray(2 = blnArray(2 & "- " & i & "/" & intNumEnd IfstrPreType = 2intNum = intNum + 1ElseIf IsLike(strtemp, "[a-zA-Z]" ThenIf strPreType = 3 ThenblnArray(3 = Left(blnArray(3, Len(blnArray(3 - 1 & intNum ElseintNum = 1blnArray(3 = blnArray(3 & "- " & i & "/" & intNumEnd IfstrPreType = 3intNum = intNum + 1ElsestrPreType = 0End IfEnd IfNextstrtemp = ""strArray = Split(blnArray(outPutType, "-"For i = 1 To UBound(strArrayintNum = InStr(1, strArray(i, "/"startPos = Mid(strArray(i, 1, intNum - 1intlen = Mid(strArray(i, intNum + 1If sumVar ThendblSum = dblSum + WorksheetFunction.Asc(Mid(strText, startPos, intlen Else strtemp = strtemp & Mid(strText, startPos, intlen & " "End IfNextIf sumVar ThenStringType = dblSumElseIf Len(strtemp ThenStringType = Left(strtemp, Len(strtemp - 1 ElseStringType = "" End IfEnd IfEnd Function。

Excel怎么判断某一列的值是否为汉字

Excel怎么判断某一列的值是否为汉字

Excel怎么判断某⼀列的值是否为汉字判断A1单元格是否有汉字:1. Sub test2()2. Dim reg, strA$3. strA = [A1]4. Set reg = CreateObject("vbscript.regexp")5. reg.Pattern = "[^\u4e00-\u9fa5]"6. reg.Global = True7. If reg.Replace(strA, "") <> "" Then MsgBox "有汉字"8. End Sub9.如果要对A列进⾏判断,就把A列所有的值串成个字符串,然后对其进⾏正则判断Sub test2()Dim reg, arr, d, n, marr = Range("a1:a" & Range("a65535").End(xlUp).Row) '把A:A列放⼊数组Set d = CreateObject("Scripting.Dictionary") '申明字典For n = 1 To UBound(arr)d(1) = d(1) & arr(n, 1) '把所有A列数据合并,并放⼊字典d(1)的item中NextSet reg = CreateObject("vbscript.regexp") '申明正则m = d.Item(1)reg.Pattern = "[^\u4e00-\u9fa5]" '正则汉字判断公式reg.Global = TrueIf reg.Replace(m, "") <> "" Then MsgBox "有汉字" '判断并返回结果End Sub。

VBA中的表格数据校验与验证技巧

VBA中的表格数据校验与验证技巧

VBA中的表格数据校验与验证技巧在VBA中,表格数据校验与验证是非常重要的,它可以确保我们的数据是准确合法的,并且能够有效地管理和处理数据。

本文将介绍一些VBA中常用的表格数据校验与验证技巧,帮助读者更好地利用VBA处理表格数据。

一、数据格式验证数据格式验证是确保数据符合特定格式要求的一种校验手段。

在VBA中,我们可以使用内置的数据验证功能来进行数据格式验证。

以下是一些常用的数据格式验证技巧:1. 数值范围限制:在表格中,我们可能需要限制某一列的数值在特定的范围内。

可以通过以下方式实现:```vbaWith Range("A1:A10").Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _Formula1:=1, Formula2:=100.IgnoreBlank = TrueEnd With```上述代码将限制A1:A10范围内的数值为整数,并且只能在1到100之间。

2. 文本长度限制:除了数值范围外,我们还可以限制某一列的文本长度。

可以通过以下方式实现:```vbaWith Range("B1:B10").Validation.Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _Formula1:=1, Formula2:=10.IgnoreBlank = TrueEnd With```上述代码将限制B1:B10范围内的文本长度在1到10个字符之间。

3. 列表限制:有时我们需要限制某一列的值必须在一组预定的列表中。

可以通过以下方式实现:```vbaWith Range("C1:C10").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _Formula1:="Option1,Option2,Option3".IgnoreBlank = TrueEnd With```上述代码将限制C1:C10范围内的值必须在"Option1,Option2,Option3"这个列表中。

Excel VBA编程 查找数据

Excel VBA编程  查找数据

Excel VBA编程查找数据利用VBA的Find方法可以查找工作表中特定信息,如可以查找文本、数字、日期,还可以对公式、批注等内容进行查找。

语法:表达式.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)其中,表达式是一个代表查找对象的变量。

下面介绍Find方法中其他参数的功能,如表16-1所示。

表16-1 Find方法参数功能表注意After必须是区域中的单个单元格。

搜索是从该单元格之后开始的;如果不指定该参数,搜索将从区域的左上角的单元格之后开始。

例如,打开“鲜奶配送用户清单”工作簿,进入VBE窗口,在新建的模块中,输入如下的代码,运行该代码,即可查找到用户为“张阳阳”的用户。

Sub 查找数据()Cells.Find(What:="张阳阳", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _, MatchByte:=False, SearchFormat:=False).ActivateEnd Sub在使用Find方法的过程中,用户需注意以下几点内容:●如果未发现匹配项,则返回Nothing。

Find方法不影响选定区域或当前活动的单元格。

●每次使用此方法后,参数LookIn、LookAt、SearchOrder 和MatchByte 的设置都将被保存。

如果下次调用此方法时不指定这些参数的值,就使用保存的值。

为避免出现这一问题,每次使用此方法时请明确设置这些参数。

●当搜索到指定查找区域的末尾时,此方法将返回到区域的开始位置继续搜索。

值得收藏的ExcelVBA在混合数据单元格中快速提取英文、数字、中文

值得收藏的ExcelVBA在混合数据单元格中快速提取英文、数字、中文

值得收藏的ExcelVBA在混合数据单元格中快速提取英文、数
字、中文
混合数据预览
先看看混乱的数据吧!也许你的数据比这更乱,不过也没关系,我们可以轻松提取我们想要的中文或英文或数据。

开始提取
❶首先是【开发工具】-【代码】-【Visual Basic】;
❷在弹出的界面中点击【插入】-【模块】;
❸将下列代码复制到模块中。

Function MyGet(Srg As String, Optional n As Integer = False)
Dim i As Integer
Dim s, MyString As String
Dim Bol As Boolean
For i = 1 To Len(Srg)
s = Mid(Srg, i, 1)
If n = 1 Then
Bol = Asc(s) <>
ElseIf n = 2 Then
Bol = s Like '[a-z,A-Z]'
ElseIf n = 0 Then
Bol = s Like '#'
End If
If Bol Then MyString = MyString & s
Next
MyGet = IIf(n = 1 Or n = 2, MyString, Val(MyString)) End Function
❹返回Excel界面,然后在需要提取单元格中录入:【=myget(A2,1)】是提取所有中文
【=myget(A2,2)】是提取所有英文
【=myget(A2)】是提取所有的数据。

[ExcelVBA]提取字符串中数字、中文、英文字符的自定义函数(修正版)

[ExcelVBA]提取字符串中数字、中文、英文字符的自定义函数(修正版)

[ExcelVBA]提取字符串中数字、中文、英文字符的自定义函数(修正版)展开全文本文链接:/blog/static/1230394712009631319 59304/分类:Excel VBA 编程请根据具体要求编辑宏代码应用。

修正版:Sub Sample()' by oicu# 2009/7/31' 数据在第一列(A列),结果放在第二列(B列)之后' 提取数字时设置不带小数点的数值格式防止出现1.21314E+12这种科学记数法' 设置列宽自动适应数据长度' 修正全字母时提取得到数字0' 英文标点不会提取出来的Dim i As IntegerFor i = 1 To WorksheetFunction.CountA(Columns(1))' 默认为提取数字Cells(i, 2).NumberFormatLocal = "0_ "Cells(i, 2).Value = GetNum(Cells(i, 1).Value)' Cells(i, 2).Value = GetNum(Cells(i, 1).Value, 0)' 提取中文及中文标点Cells(i, 3).Value = GetNum(Cells(i, 1).Value, 1)' 提取字母Cells(i, 4).Value = GetNum(Cells(i, 1).Value, 2)Next iColumns("B:B").EntireColumn.AutoFitColumns("C:C").EntireColumn.AutoFitColumns("D:D").EntireColumn.AutoFitEnd SubFunction GetNum(Srg As String, Optional n As Integer = False)Dim i As IntegerDim s, MyString As StringDim Bol As BooleanFor i = 1 To Len(Srg)s = Mid(Srg, i, 1)Select Case nCase 0Bol = s Like "#"' Bol = s Like "[0-9]"Case 1Bol = Asc(s) < 0' 中文为负数,不要用AscB或者AscWCase 2Bol = s Like "[a-zA-Z]"' zA之间不要带半角逗号Case ElseExit FunctionEnd SelectIf Bol Then MyString = MyString & sNext iIf MyString <> "" Then _GetNum = IIf(n = 1 Or n = 2, MyString, Val(MyString))End FunctionExcel中用函数提取字符串中的数字的方法请看另一篇日志:/blog/static/1230394712009852 119363/。

vba 查找并选中字体的方法

vba 查找并选中字体的方法

vba 查找并选中字体的方法VBA(Visual Basic for Applications)是一种编程语言,可用于在Microsoft Office应用程序中自动化任务和操作。

通过VBA,我们可以实现对字体的查找和选中操作。

下面是一个示例代码,演示了如何使用VBA查找并选中指定字体:```vbaSub FindAndSelectFont()Dim searchText As StringDim fontName As StringDim rng As Range' 在此处设置要查找的文本searchText = "示例文本"' 在此处设置要查找的字体名称fontName = "宋体"' 在整个工作表中查找文本Set rng = Cells.Find(What:=searchText,LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)' 如果找到了匹配的文本,则选中该单元格If Not rng Is Nothing Then = fontNamerng.SelectElseMsgBox "未找到匹配的文本。

"End IfEnd Sub```以上代码首先定义了要查找的文本和字体名称,然后使用`Cells.Find`方法在整个工作表中查找匹配的文本。

如果找到了匹配的文本,就将其字体名称修改为指定的字体,并选中该单元格。

如果未找到匹配的文本,则会显示一个消息框提示。

你可以根据自己的需求来修改代码中的搜索文本和字体名称。

通过以上示例代码,我们可以轻松地使用VBA实现对字体的查找和选中操作,提高工作效率。

VBA是一门强大的编程语言,它不仅可以用于处理办公自动化任务,还可以进行复杂的数据处理和分析。

Excel-VBA分离字符串中的字母、数字和汉字

Excel-VBA分离字符串中的字母、数字和汉字

Excel-VBA分离字符串中的字母、数字和汉字应用场景批量一键分离字符串中的数字、字母、汉字知识要点1:Asc 函数返回一个 Integer,代表字符串中首字母的字符代码。

如果ASCII值小于0,那么它是汉字或者标题2:Like 运算符用来比较两个字符串。

Like '[a-z,A-Z]' 是字母3:Like '#' 是数字4:WorksheetFunction.Trim 方法删除文本中的所有空格(除了单词之间的单个空格外)。

Sub 调用分离字符过程()If TypeName(Selection) = 'Range' ThenIf Selection.Columns.Count > 1 Then MsgBox '只能选择一列', 64, '提示': Exit SubIf Selection.Row = 1 Then MsgBox '不要选择第一行', 64, '提示': Exit SubSelection(1).Offset(-1, 1).Resize(1, 3) = Array('汉字', '数字', '字母') '写入标题Call 分离字符(Selection) '调用分离字符对过程选区进行字符分离End IfEnd SubSub 分离字符(Rng As Range)Dim Cell As Range, i As Integer, Str As String, hz As String, sz As String, zm As StringFor Each Cell In Rng '遍历参数代表区域中的每一个单元格If Len(Cell) > 0 Then '如果是非空单元格For i = 1 To Len(Cell.Text) '遍历单元格字符中的每一个字符Str = Mid(Cell.Text, i, 1) '逐个提示字符If Asc(Str) < 0 Then hz = hz & Str '如果ASCII码小于0,串联起来赋值给hz变量If Str Like '[a-z,A-Z]' Then zm = zm & StrIf Str Like '#' Or Str = '.' Then sz = sz & StrNext iEnd IfCell.Offset(0, 1) = hz '在选区后面的三个单元格分别写入汉字、数字、和字母'数字部分需要处理前置、后置小数点及多个小数点同时出现的问题,方法为将小数点转换成空格,在用trim去除多余的空格,最后将空格替换成小数点Cell.Offset(0, 2) = Replace(WorksheetFunction.Trim(Replace(sz, '.', ' ')), ' ', '.') Cell.Offset(0, 3) = zmhz = '': zm = '': sz = ''Next CellEnd Sub。

vba提取数字和运算符号的方法

vba提取数字和运算符号的方法

VBA(Visual Basic for Applications)是一种在Microsoft Office应用程序中使用的编程语言,可用于自动化任务和处理数据。

在VBA中,提取数字和运算符号是常见的需求,可以通过一些方法来实现。

1. 使用函数提取数字和运算符号在VBA中,可以使用内置的函数来提取字符串中的数字和运算符号。

使用Mid函数可以从指定位置开始提取字符串中的字符,而使用IsNumeric函数可以判断一个字符是否为数字。

通过结合这些函数,可以编写一个VBA函数来提取字符串中的数字和运算符号。

2. 使用正则表达式提取数字和运算符号正则表达式是一种强大的文本匹配工具,可以用来识别字符串中的模式。

在VBA中,可以使用Microsoft VBScript Regular Expressions 库来支持正则表达式操作。

通过编写正则表达式模式,可以轻松地提取字符串中的数字和运算符号。

3. 使用循环遍历字符串提取数字和运算符号如果没有内置函数或正则表达式库的支持,也可以通过循环遍历字符串的方式来提取数字和运算符号。

通过判断每个字符是否为数字或运算符号,可以逐个提取出来并组合成新的字符串。

总结回顾:在VBA中,提取数字和运算符号可以通过多种方法实现,包括使用内置函数、正则表达式和循环遍历字符串。

每种方法都有其适用的场景和优缺点,可以根据具体需求来选择合适的方法。

个人观点:我认为在实际开发中,应该根据具体情况选择最合适的方法来提取数字和运算符号。

对于简单的需求,可以使用内置函数;对于复杂的需求,可以考虑使用正则表达式或循环遍历字符串。

熟练掌握这些方法,可以让VBA开发变得更加高效和灵活。

希望这篇文章能够帮助您更深入地了解在VBA中提取数字和运算符号的方法。

如果还有其他问题,欢迎随时向我提问。

VBA(Visual Basic for Applications)是一种在Microsoft Office应用程序中使用的编程语言,它可以让用户自动化任务和处理数据,从而提高工作效率。

vba isnumeric用法

vba isnumeric用法

vba isnumeric用法
VBA的IsNumeric函数可以用于判断一个值是否为数字。

它的使用方法如下:
IsNumeric(值)
其中,值可以是任何VBA中的数据类型,包括数字、文本、日期等。

函数的返回值为布尔值(True或False),如果值为数字,则返回True;如果值为非数字,则返回False。

下面是一些使用IsNumeric函数的示例:
示例1:
```
Dim myValue As Variant
myValue = 123
If IsNumeric(myValue) Then
MsgBox "值为数字!"
Else
MsgBox "值不是数字!"
End If
```
示例2:
```
Dim myValue As Variant
myValue = "ABC"
If IsNumeric(myValue) Then
MsgBox "值为数字!"
Else
MsgBox "值不是数字!"
End If
```
在示例1中,myValue被赋值为数字123,因此IsNumeric(myValue)返回True,显示"值为数字!";
在示例2中,myValue被赋值为文本"ABC",因此IsNumeric(myValue)返回False,显示"值不是数字!"。

VBA代码集锦-Find方法(4)-查找特定格式的单元格

VBA代码集锦-Find方法(4)-查找特定格式的单元格

VBA代码集锦-Find方法(4)-查找特定格式的单元格一、代码示例Sub FindWithFormat2()With Application.FindFormat.Font.Name = "黑体".ColorIndex = 3.Size = 12End WithCells.Find(what:="*", searchformat:=True).ActivateSelection.Interior.ColorIndex = 5MRG = Selection.AddressDoCells.Find(what:="*", After:=ActiveCell, searchformat:=True).Activateaaa = Selection.AddressSelection.Interior.ColorIndex = 5Loop Until MRG = aaaEnd Sub二、代码解析Sub FindWithFormat2()'本示例在当前工作表单元格中查找字体为”黑体”且字体颜色为红色,字号为12的非空单元格。

'其中,Application.FindFormat对象允许指定所需要查找的格式,此时Find方法的参数SearchFormat应设置为True。

With Application.FindFormat.Font.Name = "黑体" '字体.ColorIndex = 3 '字体颜色.Size = 12 '字号End WithCells.Find(what:="*", searchformat:=True).Activate'激活符合条件的单元格Selection.Interior.ColorIndex = 5 '单元格底色填充为蓝色MRG = Selection.Address '记录单元格地址'开始循环查找DoCells.Find(what:="*", After:=ActiveCell, searchformat:=True).Activate'激活符合条件的单元格aaa = Selection.Address '记录单元格地址Selection.Interior.ColorIndex = 5 '单元格底色填充为蓝色'其他处理方式Loop Until MRG = aaa '查找到与第一个符合条件的单元格地址相同时停止End Sub----------------------------------------。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Function IsLike(strText As String, pattern As String) As Boolean
IsLike = strText Like pattern
End Function
Function IsChinese(strText As String) As Boolean
Dim i%, h$
h = Hex(Asc(strText))
If Asc(Left(h, 1)) >= 66 And Asc(Left(h, 1)) <= 70 Then
IsChinese = True
End If
End Function
Function StringType(strText As String, Optional outPutType As Integer = 1, Optional sumVar As Boolean = False) As Variant
Dim strtemp As String, blnArray(1 To 5) As String, strPreType As Integer
Dim intNum As Integer, startPos As Integer, intlen As Integer
Dim strArray As Variant, strCompare1 As String, strCompare2 As String, dblSum As Double
If sumVar = True And Not (outPutType <> 2 Or outPutType <> 4) Then sumVar = False
For i = 1 To Len(strText)
strtemp = Mid(strText, i, 1)
If i > 1 Then strCompare1 = WorksheetFunction.Asc(Mid(strText, i - 1, 3))
strCompare2 = WorksheetFunction.Asc(Mid(strText, i, 2))
If WorksheetFunction.Dbcs(strtemp) = strtemp Then
strtemp = WorksheetFunction.Asc(strtemp)
If IsLike(strtemp, "[0-9]") Or IsLike(strCompare1, "[0-9].[0-9]") Or IsLike(strCompare2, "-[0-9]") Then
If strPreType = 4 Then
blnArray(4) = Left(blnArray(4), Len(blnArray(4)) - 1) & intNum
Else
intNum = 1
blnArray(4) = blnArray(4) & "- " & i & "/" & intNum
End If
strPreType = 4
intNum = intNum + 1
ElseIf IsLike(strtemp, "[a-zA-Z]") Then
If strPreType = 5 Then
blnArray(5) = Left(blnArray(5), Len(blnArray(5)) - 1) & intNum
Else
intNum = 1
blnArray(5) = blnArray(5) & "- " & i & "/" & intNum
End If
strPreType = 5
intNum = intNum + 1
ElseIf IsChinese(strtemp) Then
If strPreType = 1 Then
blnArray(1) = Left(blnArray(1), Len(blnArray(1)) - 1) & intNum
Else
intNum = 1
blnArray(1) = blnArray(1) & "- " & i & "/" & intNum
End If
strPreType = 1
intNum = intNum + 1
Else
strPreType = 0
End If
Else
If IsLike(strtemp, "[0-9]") Or IsLike(strCompare1, "[0-9].[0-9]") Or IsLike(strCompare2, "-[0-9]") Then
If strPreType = 2 Then
blnArray(2) = Left(blnArray(2), Len(blnArray(2)) - 1) & intNum
Else
intNum = 1
blnArray(2) = blnArray(2) & "- " & i & "/" & intNum
End If
strPreType = 2
intNum = intNum + 1
ElseIf IsLike(strtemp, "[a-zA-Z]") Then
If strPreType = 3 Then
blnArray(3) = Left(blnArray(3), Len(blnArray(3)) - 1) & intNum
Else
intNum = 1
blnArray(3) = blnArray(3) & "- " & i & "/" & intNum
End If
strPreType = 3
intNum = intNum + 1
Else
strPreType = 0
End If
End If
Next
strtemp = ""
strArray = Split(blnArray(outPutType), "-")
For i = 1 To UBound(strArray)
intNum = InStr(1, strArray(i), "/")
startPos = Mid(strArray(i), 1, intNum - 1)
intlen = Mid(strArray(i), intNum + 1)
If sumVar Then
dblSum = dblSum + WorksheetFunction.Asc(Mid(strText, startPos, intlen)) Else
strtemp = strtemp & Mid(strText, startPos, intlen) & " "
End If
Next
If sumVar Then
StringType = dblSum
Else
If Len(strtemp) Then
StringType = Left(strtemp, Len(strtemp) - 1) Else
StringType = ""
End If
End If
End Function。

相关文档
最新文档