如果多行Excel单元格中的某行中的字符串不是以某个字符串开头,请删除该行中的字符串
我有一列Excel单元格采用这种格式(随机字符串的顺序不是固定的)。需要删除不以特定字符串开头的字符串如果多行Excel单元格中的某行中的字符串不是以某个字符串开头,请删除该行中的字符串,excel,vba,excel-formula,line-breaks,string-matching,Excel,Vba,Excel Formula,Line Breaks,String Matching,我有一列Excel单元格采用这种格式(随机字符串的顺序不是固定的)。需要删除不以特定字符串开头的字符串 randomstringA text_that_needs_to_be_kept1 text_that_needs_to_be_removed1 randomstringB text_that_needs_to_be_kept2 randomstringA text_that_needs_to_be_kept3 text_that_needs_to_be_removed2 我希望单元格的输出
randomstringA text_that_needs_to_be_kept1
text_that_needs_to_be_removed1
randomstringB text_that_needs_to_be_kept2
randomstringA text_that_needs_to_be_kept3
text_that_needs_to_be_removed2
我希望单元格的输出如下(必须保留换行符):
而不是这个(换行符被删除):
在B1中,将此公式
=IF(LEFT(A1;1)=“r”;MID(A1;FIND(“'A1;1)+1;500”)
放置在B列的其他单元格中,然后复制并粘贴到B列的其他单元格中。以下代码将从第1行开始进入A列,并从数组arrToKeep
中删除任何不以值开头的行,保留换行符
Option Explicit
Sub RemoveStrings()
Dim rngData As Range
Dim arrData As Variant
Dim arrLines As Variant
Dim arrToKeep As Variant
Dim idx1 As Long
Dim idx2 As Long
Dim idxRow As Long
Dim boolKeep As Boolean
arrToKeep = Array("randomstringA", "randomstringB")
Set rngData = Range("A1", Range("A" & Rows.Count).End(xlUp))
arrData = rngData.Value
For idxRow = LBound(arrData, 1) To UBound(arrData, 1)
arrLines = Split(arrData(idxRow, 1), vbLf)
For idx1 = LBound(arrLines) To UBound(arrLines)
boolKeep = False
For idx2 = LBound(arrToKeep) To UBound(arrToKeep)
If arrLines(idx1) Like arrToKeep(idx2) & "*" Then
boolKeep = True
Exit For
End If
Next idx2
If Not boolKeep Then
arrLines(idx1) = ""
End If
Next idx1
arrData(idxRow, 1) = Join(arrLines, vbLf)
Next idxRow
rngData.Value = arrData
End Sub
那么,在实施此功能时,您遇到的具体问题是什么?你尝试了什么?发生了什么?一种方法可能是使用
vbLf
上的Split()
获取一个行数组,然后在数组上循环,将不希望的行设置为空字符串,然后Join()
数组以获得结果。
text_that_needs_to_be_kept1
text_that_needs_to_be_kept2
text_that_needs_to_be_kept3
Option Explicit
Sub RemoveStrings()
Dim rngData As Range
Dim arrData As Variant
Dim arrLines As Variant
Dim arrToKeep As Variant
Dim idx1 As Long
Dim idx2 As Long
Dim idxRow As Long
Dim boolKeep As Boolean
arrToKeep = Array("randomstringA", "randomstringB")
Set rngData = Range("A1", Range("A" & Rows.Count).End(xlUp))
arrData = rngData.Value
For idxRow = LBound(arrData, 1) To UBound(arrData, 1)
arrLines = Split(arrData(idxRow, 1), vbLf)
For idx1 = LBound(arrLines) To UBound(arrLines)
boolKeep = False
For idx2 = LBound(arrToKeep) To UBound(arrToKeep)
If arrLines(idx1) Like arrToKeep(idx2) & "*" Then
boolKeep = True
Exit For
End If
Next idx2
If Not boolKeep Then
arrLines(idx1) = ""
End If
Next idx1
arrData(idxRow, 1) = Join(arrLines, vbLf)
Next idxRow
rngData.Value = arrData
End Sub