我使用逗号作为小数分隔符,但有时我会收到值低于设定限制的文件,然后文件使用点作为“< 2.5”。有时小数分隔符前面有一个数字,有时有两位数。
我需要能够以单元格中的逗号替换点,并以“小于”符号开头,但保留实际数字,以便将“< 2.5”替换为“< 2,5”并且“< 10.0”被替换为“< 10,0”。这需要在Excel VBA中完成。
我不能一般搜索“。”并用“,”替换,因为有些地方我需要保持原点。
任何人都知道如何实现这个目标?
答案 0 :(得分:1)
通过Replace
功能
您可以将数据读入数据字段数组,替换上面提到的“<”数据通过Replace
函数,并通过以下代码将它们写回一个语句中。 - 当然也可以使用 RegEx ,如上面评论中所述。
备注强>
a)我假设您正在使用A列中的数据:A来自Set rng = ws.Range("A1:A" & n)
;这很容易改变到任何其他范围。
b)为变量数据字段数组赋值会自动创建一个基于2的dim数组,只有一列才能解决这个问题,例如:通过v(1,1)
,v(2,1)
,v(3,1)
等到v(n,1)
。
示例代码
Option Explicit
Sub replaceLowerThan()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("MySheet") ' << Change to your sheet name
Dim n As Long, i As Long
Dim rng As Range
Dim v
' get last row number and define data range
n = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
Set rng = ws.Range("A1:A" & n)
' write data to 1-based 2-dim datafield array
v = rng.Value2
' replace "<..." values
For i = 1 To n
If Not IsError(v(i, 1)) Then ' omit cells with errors like #DIV/0!
If v(i, 1) Like "<*" Then v(i, 1) = Replace(v(i, 1), ".", ",")
End If
Next i
' write values back
rng.Value2 = v
End Sub
答案 1 :(得分:1)
这有效:
Dim strPattern As String: strPattern = "(<[0-9]+)[\.]"
Dim strReplace As String: strReplace = "$1,"
Dim myreplace As Long
Dim strInput As String
Dim Myrange As Range
Set RegEx = CreateObject("VBScript.RegExp")
Set Myrange = ActiveSheet.UsedRange
For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value
With RegEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If RegEx.Test(strInput) Then
cell.Value = (RegEx.Replace(strInput, strReplace))
End If
End If
Next