英文:
How can I find word in Excel and delete the digit Before?
问题
我想要拆分这个单词。如果我找到了"ACC",则在VBA代码中删除"ACC"之前的单词。
我找到了这段代码,但它会删除找到的文本之后的单词:
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="blue", _
Forward:=True
If myRange.Find.Found = True Then
myRange.SetRange (myRange.End + 1), ActiveDocument.Content.End
myRange.Delete
如果可能的话,可以使用公式函数吗?请给予建议。
英文:
I would like to split the word. If i found ACC, The word before ACC is delete in vba code
I found this code but it will delete the word after the found text
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="blue", _
Forward:=True
If myRange.Find.Found = True Then
myRange.SetRange (myRange.End + 1), ActiveDocument.Content.End
myRange.Delete
If it possible can use formula function ? Please suggest
答案1
得分: 1
你可以使用这个公式(而不是VBA):
=MID(A1,FIND("ACC",A1),LEN(A1))
顺便说一下,你发布的代码是用于Word-VBA,而不是Excel-VBA。
英文:
You can use this formula (instead of VBA):
=MID(A1,FIND("ACC",A1),LEN(A1))
Btw: the code you posted is for Word-VBA - not for Excel-VBA
答案2
得分: 1
如果你想用公式来实现,可以使用以下公式:
=IFERROR(RIGHT(A1,LEN(A1)-FIND("ACC",A1)+1),"")
如果你想使用VBA代码:
Sub test()
Dim ws As Worksheet, rng As Range, arr, lRow As Long
Dim srchStr As String
srchStr = "ACC"
Set ws = ThisWorkbook.Worksheets("Sheet1")
lRow = ws.Range("D" & Rows.Count).End(xlUp).Row
Set rng = ws.Range("D1:D" & lRow)
arr = rng.Value
Dim i As Long
For i = 1 To UBound(arr, 1)
If InStr(arr(i, 1), srchStr) Then
arr(i, 1) = Mid(arr(i, 1), InStr(arr(i, 1), srchStr))
Else
arr(i, 1) = ""
End If
Next i
rng.Offset(, 1).Value = arr
End Sub
这样应该可以实现你的需求。
英文:
If you'd want to do it with a formula, you can use
=IFERROR(RIGHT(A1,LEN(A1)-FIND("ACC",A1)+1),"")
(though Mid is less typing and more used nowadays because of it, just giving you options :p)
and if you'd want to use VBA:
Sub test()
Dim ws As Worksheet, rng As Range, arr, lRow As Long
Dim srchStr As String
srchStr = "ACC"
Set ws = ThisWorkbook.Worksheets("Sheet1")
lRow = ws.Range("D" & Rows.Count).End(xlUp).Row
Set rng = ws.Range("D1:D" & lRow)
arr = rng.Value
Dim i As Long
For i = 1 To UBound(arr, 1)
If InStr(arr(i, 1), srchStr) Then
arr(i, 1) = Mid(arr(i, 1), InStr(arr(i, 1), srchStr))
Else
arr(i, 1) = ""
End If
Next i
rng.Offset(, 1).Value = arr
End Sub
That should do it as well.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论