是否可以使用VBA捕获并使用文本字符串中的第一个数字,如果没有数字,则仅使用1?
我当前使用的代码是查看AC列并查找特定文本,然后使用该文本的前两个字母和最右边的数字并替换N列中的相应行。
我现在想做的是考虑文本中没有数字(应为= 1),还是有数字,但它在中间但位置移动了(因此,中间语句不起作用) 。如果可能的话,将不胜感激任何建议或朝正确方向发展。
Dim wsl As Worksheet
Dim LR As Long, i As Long
mydate = Format(Date, "YYMMDD")
Set wsl = LagoDLFile.Sheets("cid_SeventhAvenue_" & mydate & "")
LR = wsl.Range("AC" & wsl.Rows.Count).End(xlUp).Row
For i = 2 To LR
If wsl.Range("AC" & i) Like "*EOC*" Then
wsl.Range("N" & i) = "EOC"
ElseIf wsl.Range("N" & i) Like "700" Then
wsl.Range("N" & i) = "CHK"
ElseIf wsl.Range("AC" & i) Like "*CTOB*" Then
wsl.Range("N" & i) = "COF"
ElseIf wsl.Range("AC" & i) Like "EXOBC*" Then
wsl.Range("N" & i) = "WR" & Right(wsl.Range("AC" & i), 1)
ElseIf Left(wsl.Range("AC" & i), 3) = "OBC" Then
wsl.Range("N" & i) = "OB" & Right(wsl.Range("AC" & i), 1)
ElseIf Left(wsl.Range("AC" & i), 3) = "IFC" Then
wsl.Range("N" & i) = "IF" & Right(wsl.Range("AC" & i), 1)
ElseIf Left(wsl.Range("AC" & i), 3) = "IBC" Then
wsl.Range("N" & i) = "IB" & Right(wsl.Range("AC" & i), 1)
End If
Next i
End Sub
答案 0 :(得分:6)
这是一个使用正则表达式执行所需功能的函数。它使用此正则表达式:
^\D*(\d)
^
字符串的开头\D*
不是数字的任何字符(大写D),其*
量词表示 0次或更多次 (...)
捕获组-它将捕获您要保留的文本并作为 submatch \d
任意数值(0-9)。注意:如果您希望它捕获的位数不止第一位(例如
string123
-您想返回123
,则可以更改(\d)
(\d+)
的正则表达式中的内容。+
是一个量词,表示\d
中的一个或多个。
在Regex101上查看此正则表达式。绿色突出显示的部分是下面的函数返回的内容。
Public Function getFirstDigit(testString As String) As String ' or As long
With CreateObject("VBScript.RegExp")
.Pattern = "^\D*(\d)"
.Global = False
If .test(testString) Then
getFirstDigit = .Execute(testString)(0).SubMatches(0)
Else
getFirstDigit = "1"
End If
End With
End Function
您既可以在VBA中使用此功能,也可以将其用作工作表功能。
在VBA中使用:
Msgbox getFirstDigit("Test String 123")
在工作表中使用
=getFirstDigit($A$1)
答案 1 :(得分:1)
没有export class StockMovementComponent implements OnInit{
disableButton: boolean = true;
draggableOptions : SortablejsOptions = {
animation: 150,
onUpdate: () => this.dragDropDataSuccess(),
scroll: true,
scrollSensitivity: 100
};
constructor(){}
ngOnInit() {}
dragDropDataSuccess(){
this.disableButton = false;
}
}
RegExp
测试