使用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可以使用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判断单元格各字符是否为中文、英文、数字、符号的复杂解读

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怎么判断某⼀列的值是否为汉字判断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中,我们可以使用内置的数据验证功能来进行数据格式验证。

以下是一些常用的数据格式验证技巧: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"这个列表中。

  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。

相关文档
最新文档