删除 VBA 中列中第一个'-'之前的所有数据



我的电子表格目前有一个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

您想要找到第一个&quot-"

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

最新更新