|
试一下下面代码,运行“提取内容”代码即可:
Public Function GFNC(ByVal s As String) As Integer
'定义在字符串中找到第一个数字字符位置的函数GFNC(GetPositionOfFirstNumericCharacter),网上有
For i = 1 To Len(s)
Dim currentCharacter As String
currentCharacter = Mid(s, i, 1)
If IsNumeric(currentCharacter) = True Then
GFNC = i
Exit Function
End If
Next i
End Function
Sub 提取内容()
Dim i As Integer
For i = 1 To 5
Range("c" & i) = Left(Range("a" & i), GFNC(Range("a" & i)) - 1)
Range("d" & i) = Right(Split(Range("a" & i), "202")(0), VBA.Len(Split(Range("a" & i), "202")(0)) - GFNC(Range("a" & i)) + 1)
Range("f" & i) = Right(Range("a" & i), 1)
Range("e" & i) = Split(Replace(Left(Range("a" & i), VBA.Len(Range("a" & i)) - 1), "202", "*202"), "*")(1)
Next
End Sub
说明、解释:
数据虽少,但比较复杂。
目标是取"企业名称"、"内容"、“日期"、"责任人"。
找目标规律:
"企业名称"在字符串最左,后面是数字
"内容"是第1个数字与202之间字符串
“日期"日期开头都有202字符串并为右第二位起
"责任人"都是最后1位
找到规律,逐行给B、C、D、E单元格赋值了。
完成任务,仅用函数解决不了,要写代码。
还要定义在字符串中找到第一个数字字符位置的函数GFNC(GetPositionOfFirstNumericCharacter)。
如果数据增加,修改“For i = 1 To 5”中的5即,有多少行,填写多少。
几个代码的含义:
Range("a11") = Character(Range("a1")) '第一个数字位数
Range("a8") = VBA.Len(Range("a1")) '第一行总数
Range("a10") = Left(Range("a1"), VBA.Len(Range("a1")) - 1) '取除最后一位
Range("a12") = VBA.Len(Range("a1"), "202", "*202")
Range("b14") = Replace(Range("a1"), "202", "*202") '用*将202后面数字隔开,直接取后面数字
Range("a16") = Split(Range("a1"), "202")(0) '取202前各位
'从2020或2021数字前取字符串,取“2020或2021数字前符串”减去第位数字加上1的字符串
Range("a18") = Right(Split(Range("a1"), "202")(0), VBA.Len(Split(Range("a1"), "202")(0)) - GFNC(Range("a1")) + 1)
提取单元格内容-含代码.rar
(18.61 KB, 下载次数: 97)
|
|