String VBA从字符串/单元格的开头删除数字
我希望你能帮忙 我有一段代码,目前正在删除G列单元格中的所有文本。我需要的是,该代码不是删除文本,而是删除数字,我只希望它删除字符串/单元格开头的数字我希望其余数据保持不变 我已经附上了一张图片。1博彩了解 图1 下面是我目前拥有的代码,我希望可以修改。一如既往,非常感谢您的帮助 代码String VBA从字符串/单元格的开头删除数字,string,vba,excel,numbers,String,Vba,Excel,Numbers,我希望你能帮忙 我有一段代码,目前正在删除G列单元格中的所有文本。我需要的是,该代码不是删除文本,而是删除数字,我只希望它删除字符串/单元格开头的数字我希望其余数据保持不变 我已经附上了一张图片。1博彩了解 图1 下面是我目前拥有的代码,我希望可以修改。一如既往,非常感谢您的帮助 代码 我认为一个简单的改变如下: For X = StartRow To LastRow Cells(X, DataColumn).Formular1c1 = Application.Trim(Replace
我认为一个简单的改变如下:
For X = StartRow To LastRow
Cells(X, DataColumn).Formular1c1 = Application.Trim(Replace(Cells(X, DataColumn).Text, Val(Cells(X, DataColumn).Text), ""))
Next X
将解决您的问题…此函数将从字符串中删除前导数字和空格
Function RemoveLeadingDigits(str As String) As String
Dim i As Long
Dim chr As String
' Loop through string
For i = 1 To Len(str)
' Get character i
chr = Mid(str, i, 1)
' Keep looping until character is not a number or space
If Not IsNumeric(chr) And Not chr = " " Then
' If it is a number or space, strip checked characters
' from str (because they'll be numeric or space)
str = Right(str, Len(str) - i + 1)
' Stop looping as non-numeric characters encountered
Exit For
End If
Next i
' Return the value of str
RemoveLeadingDigits = str
End Function
您可以通过以下方式从代码中调用它:
Sub RemoveNonDigits()
Dim X As Long, LastRow As Long, CellVal As String
Const StartRow As Long = 1
Const DataColumn As String = "G"
Application.ScreenUpdating = False
LastRow = Cells(Rows.Count, DataColumn).End(xlUp).Row
For X = StartRow To LastRow
CellVal = Cells(X, DataColumn).Value
' ----------------------------------------
CellVal = RemoveLeadingDigits(CellVal)
' ----------------------------------------
Next
Application.ScreenUpdating = True
End Sub
关于代码的说明如下:
你真的应该让你的细胞完全合格。例如,使用此工作簿.Sheets(“YourSheet”)将整个循环部分包装在
中,然后使用.cells(row,col)
访问单元格,而不仅仅是单元格(row,col)
请参见下面修改的代码:
Sub RemoveNonDigits()
Dim X As Long, Z As Long, LastRow As Long, CellVal As String
Const StartRow As Long = 1
Const DataColumn As String = "G"
Application.ScreenUpdating = False
LastRow = Cells(Rows.Count, DataColumn).End(xlUp).Row
For X = StartRow To LastRow
CellVal = Cells(X, DataColumn)
While IsNumeric(Left(CellVal, 1)) ' Here
CellVal = Mid(CellVal, 2) ' all digits at the start
Wend ' are removed
Cells(X, DataColumn) = Trim(CellVal)
Next
Application.ScreenUpdating = True
End Sub
也就是说,虽然CellVal
中的起始字符是一个数字,但获取以第二个字符开始的子字符串,然后继续,直到没有匹配为止
CellVal = LTrimDigits(Cells(X, DataColumn))
这样做相当有效:
Public Function LTrimDigits(value As String) As String
Dim i As Long
For i = 1 To Len(value) '//loop each char
Select Case Mid$(value, i, 1) '//examine current char
Case "0" To "9" '//permitted chars
Case Else: Exit For '// i is the cut off point
End Select
Next
LTrimDigits = Mid$(value, i) '//strip lead
End Function
一个稍短的备选方案(假设所有值都以整数开头)
看起来,要删除的数字与其他数字之间用空格隔开。这能保证吗?因为在这种情况下,解决方案会简单得多。因此,您当前的代码会删除除数字以外的所有代码,而您想要的正好相反,对吗?如果Mid(CellVal,Z,1)像“[0-9]”,那么Mid(CellVal,Z,1)=“”否则退出执行
a do,直到可能的更整洁的方法。大家好,感谢您花时间回复@ASH作为数字后的空格。很遗憾,数字不确定。地址:Wiktor Stibizew。我需要的是删除开始时的数字,只有单元格内容的其余部分可以保持不变。AT:Nathan_Sav很遗憾,我无法遵循代码逻辑。非常感谢大家的帮助。不,这也会删除字符串末尾的数字,这与字符串开头的数字相同!好主意是的,我试过那段代码。不按预期工作:-)呜呜!!真棒的工作Wiktor。非常感谢您抽出时间。这很好用。都柏林非常尊敬:-)祝您度过愉快的一天,再次感谢您:-)高效的实现,没有无用的字符串拷贝。我喜欢它。
Public Function LTrimDigits(value As String) As String
Dim i As Long
For i = 1 To Len(value) '//loop each char
Select Case Mid$(value, i, 1) '//examine current char
Case "0" To "9" '//permitted chars
Case Else: Exit For '// i is the cut off point
End Select
Next
LTrimDigits = Mid$(value, i) '//strip lead
End Function
For Each cell in Range([G7], [G7].End(xlDown))
cell.Value2 = Trim(Mid(cell, Len(Str(Val(cell)))))
Next