我的电子表格目前有一个C列,其中有以下结构的数据行:
123 - abc - xyz
我希望我的VBA代码删除第一个(包括(之前的所有数据,以便列C看起来像这样:
abc - xyz
我当前的代码正在删除两个"-">
Sub TrimCell()
Dim i As String
Dim k As String
i = "-"
k = ""
Columns("C").Replace what:=i, replacement:=k, lookat:=xlPart,
MatchCase:=False
End Sub
我的Excel函数是=REPLACE(C1,1,FIND("-",C1),"")
。这是可行的,但我想要VBA中的一些东西。
这将在列C:上工作
Sub my_sub()
Dim c As Range
For Each c In Intersect(ActiveSheet.UsedRange, ActiveSheet.Range("C:C"))
c = Trim(Mid(c, InStr(c, "-") + 1))
Next
End Sub
您想要找到第一个"-";
location = instr(1, cells(iRow,3), "-", vbTextCompare)
利用instr只返回第一个条目的事实。。。然后使用该位置将单元格向右修剪
if location > 0 then
'Found a "-" within this cell
cells(iRow,3) = right(cells(iRow,3), len(cells(iRow,3)-location)
end if
iRows显然只是我在数据行上的迭代器。用你想要的任何方式定义它。
您可以使用Evaluate一次性点出它。
With Range("C1", Range("C" & Rows.Count).End(xlUp))
.Value = Evaluate("MID(" & .Address & ", FIND(""-"", " & .Address & ")+1, LEN(" & .Address & "))")
End With
请尝试下一个功能:
Function replaceFirstGroup(x As String) As String
Dim arr
arr = Split(x, " - ")
arr(0) = "###$"
replaceFirstGroup = Join(Filter(arr, "###$", False), " - ")
End Function
它可以通过以下方式调用/测试:
Sub testReplaceFirstGroup()
Dim x As String
x = "123 - abc - xyz"
MsgBox replaceFirstGroup(x)
End Sub
为了处理C:C列,使用上面的函数,请使用下面的代码。使用数组、在内存中工作并立即丢弃处理结果应该非常快:
Sub ProcessCCColumn()
Dim sh As Worksheet, lastR As Long, arr, i As Long
Set sh = ActiveSheet
lastR = sh.Range("C" & sh.rows.count).End(xlUp).row
arr = sh.Range("C2:C" & lastR).value
For i = 1 To UBound(arr)
arr(i, 1) = replaceFirstGroup(CStr(arr(i, 1)))
Next i
sh.Range("C2").Resize(UBound(arr), 1).value = arr
End Sub