我有一堆像这样的字符串的单元格: WFM 1601
这个: WFM 2231,WFM 2402
这也是: 运动1680,2402,2784
我使用下面的代码将单个单元格中的字符串拆分为多列(最多3列)。
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
lRow = Range("U" & Rows.Count).End(xlUp).Row
Set MyRows = Range("U19:U" & lRow)
For Each cell In MyRows
splitVals = Split(cell.Value, ",")
totalVals = UBound(splitVals)
Range(Cells(cell.Row, ActiveCell.Column + 1), Cells(cell.Row, ActiveCell.Column + 1 + totalVals)).Value = splitVals
Next
现在,我试图想办法摆脱所有非数字字符,只留下数字。然后,连接这些数字,这些数字是我使用的SharePoint网站中的进程的所有ID,因此我想在每个数字的位置放置一个静态字符串的末尾,并在刚刚拆分为的数字旁边单独的列。
这是一个截屏。
我有列U,我想生成第V列到第AA列。
我只能使用以下功能提取数字。
Function GetNums(target As Range)
Dim MyStr As String, i As Integer
MyStr = ""
If Len(target.Value) = 0 Then GoTo GoExit
If target.Value = "None" Then GoTo GoNone
For i = 1 To Len(target.Value)
If IsNumeric(Mid(target, i, 1)) Then MyStr = MyStr & Mid(target, i, 1)
Next i
GoTo GoExit
GoNone:
GetNums = "None"
Exit Function
GoExit:
GetNums = MyStr
End Function
但是,这不符合要求,因为它会检查单元格中的所有字符,然后将其转为:WFM 2231,WFM 2402。 。 。 进入:22312402 我真的需要一些方法来区分这两个ID:2231 2402
答案 0 :(得分:2)
我可以帮助第1部分,检查值是否为数字。
你做了分裂。现在,您可以检查您获得的变量是否为数字。示例:
我们想检查A1中的值是否为数字:
isnum = isNumeric(range("A1"))
如果A1中的值是数字,则isnum为true,否则为false。
答案 1 :(得分:2)
我会使用正则表达式来提取数字组。如果事实证明,对于有效数字序列的构成还有其他标准,通过更改正则表达式可以更容易实现。
以下是活动工作表A列中原始数据的示例。
Option Explicit
Sub CreateURL()
Dim RE As Object, MC As Object, M As Object
Const sPat As String = "\b\d+\b" 'whole words that are all digits
Const sBaseURL As String = "htpps://collaborate.process...&ID="
Dim I As Long, J As Long
Dim rSrc As Range, C As Range
'This will be on active sheet
'Suggest you specify actual worksheet
Set rSrc = Range(Cells(1, 1), Cells(Rows.Count, "A").End(xlUp))
Set RE = CreateObject("vbscript.regexp")
With RE
.Pattern = sPat
.Global = True
End With
For Each C In rSrc
If RE.test(C.Text) = True Then
Set MC = RE.Execute(C.Text)
J = -1
For Each M In MC
J = J + 2
C.Offset(0, J) = M
C.Offset(0, J + 1) = sBaseURL & M
Next M
End If
Next C
End Sub
这是针对A列中的数据运行此宏的结果:
以下是正则表达式的正式解释,其中包含更多细节的链接,希望这些细节仍有效:
\b\d+\b
选项:不区分大小写; ^ $匹配在换行
\b
\d+
\b