Arrays 删除字符串列表右侧的所有内容

Arrays 删除字符串列表右侧的所有内容,arrays,vba,for-loop,Arrays,Vba,For Loop,我试图删除列的特定字符串列表后面的所有内容 Sub KeepItem() Dim itemDescr As Range Dim Rng As Range Dim xChar As Variant Set itemDescr = Range("$D:$D") xChar = Array(" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " .") For Each Rng In itemDescr xValue = Rng.V

我试图删除列的特定字符串列表后面的所有内容

Sub KeepItem()

Dim itemDescr As Range
Dim Rng As Range
Dim xChar As Variant

Set itemDescr = Range("$D:$D")
xChar = Array(" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " .")

For Each Rng In itemDescr
    xValue = Rng.Value
    Rng.Value = Left(xValue, InStr(xValue, xChar) - 1)
Next

End Sub
这个

应该是这样的:

VITA COCO TROP
ARGO CAROLINA HNY
ARGO GRN TEA GNGR
ARGO HIBISC SNGRIA
ARGO MOJI TEA
我是VBA程序员的新手,非常感谢您的反馈

错误:类型不匹配:

Rng.Value = Left(xValue, InStr(xValue, xChar) - 1)

如果你想在数字出现之前获得文本,这对你有用吗

您需要添加对Microsoft VBScript正则表达式5.5的引用

Debug.print GetLeftPart ("TA COCO TROP 16.9OZ")

Function GetLeftPart (stringToCheck As String) as string
   Dim regex As New RegExp
   Dim regmatch As MatchCollection
   regex.Pattern = "\s\d"
   Set regmatch = regex.Execute(stringToCheck)
   GetLeftPart = Left(stringToCheck , regmatch.Item(0).FirstIndex)
End function
另一种更麻烦的方式,但由于作者已经开始工作,这可能适合上下文

Sub KeepItem()

Dim itemDescr As Range
Dim Rng As Range
Dim xChar As Variant
Dim ele As Variant
Dim iFoundAt As Integer
Dim xValue As String

Set itemDescr = Range("$D:$D")
xChar = Array(" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " .")

For Each Rng In itemDescr
    iFoundAt = 0
    xValue = Rng.Value
    'find if this is a line we are interested in
    If xValue = "" Then GoTo continue 'Question - do you want to continue or stop. if stop replace continue with exit for
    For Each ele In xChar
        iFoundAt = InStr(xValue, ele)
        If iFoundAt > 0 Then Exit For
    Next
    If iFoundAt > 0 Then Rng.Value = Left(xValue, iFoundAt - 1)
continue:

Next

End Sub

尝试这样做,对于循环0到9范围内的每个单元格,使用Split命令将字符串拆分为一个数组,我们希望所有内容都向左,因此我们取第一个元素索引0,然后修剪空间

Sub RemoveNumOnwards()
Dim X As Long, Y As Long
For X = 1 To Range("D" & Rows.Count).End(xlUp).Row
    For Y = 0 To 9
        Range("D" & X).Formula = Trim(Split(Range("D" & X).text, Y)(0))
    Next
Next
End Sub
编辑:刚刚看到您关于小数点的注释,以下是更新的代码:

Sub RemoveNumOnwards()
Dim X As Long, Y As Long, xChar As Variant
xChar = Array(" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " .")
For X = 1 To Range("D" & Rows.Count).End(xlUp).Row
    For Y = LBound(xChar) To UBound(xChar)
        Range("D" & X).Formula = Trim(Split(Range("D" & X).text, xChar(Y))(0))
    Next
Next
End Sub

是否要在第一次出现数字后删除任何内容?当前代码是否有错误?您是否有与当前代码相关的特定问题?@Chrismas007感谢您指出这一点。我编辑了question@Krishna我想删除第一次出现空格后跟数字或小数点后的所有内容OK,更新了下面的regexp。这对我有用,我不知道该怎么做。我把这个插在哪里?我提供的代码是否需要调整?您提供的代码的问题是,对于每个字符串,您都需要检查数组中是否出现了项。这将是麻烦和低效的。但如果这是唯一的办法,那么请看我的编辑。我强烈认为你应该改成正则表达式。你能修好它吗?是的,它能工作。谢谢你的解释。我还是不懂你的正则表达式,但我只是一个VBA初学者!
Sub RemoveNumOnwards()
Dim X As Long, Y As Long, xChar As Variant
xChar = Array(" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", " .")
For X = 1 To Range("D" & Rows.Count).End(xlUp).Row
    For Y = LBound(xChar) To UBound(xChar)
        Range("D" & X).Formula = Trim(Split(Range("D" & X).text, xChar(Y))(0))
    Next
Next
End Sub