首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除字符串列表后右边的所有内容。

删除字符串列表后右边的所有内容。
EN

Stack Overflow用户
提问于 2015-07-08 16:48:27
回答 2查看 36关注 0票数 2

我试图在列的特定字符串列表之后将所有内容移除到右边。

代码语言:javascript
复制
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

代码语言:javascript
复制
VITA COCO TROP 16.9OZ
ARGO CAROLINA HNY 13.5OZ GLS
ARGO GRN TEA GNGR 13.5OZ GLS
ARGO HIBISC SNGRIA 13.5OZ GLS
ARGO MOJI TEA 13.5OZ GLS

看起来应该是:

代码语言:javascript
复制
VITA COCO TROP
ARGO CAROLINA HNY
ARGO GRN TEA GNGR
ARGO HIBISC SNGRIA
ARGO MOJI TEA

我是一个新的VBA程序员,我会感谢您的反馈。

错误:(类型不匹配):

代码语言:javascript
复制
Rng.Value = Left(xValue, InStr(xValue, xChar) - 1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-08 16:56:29

如果你想在数字出现之前得到短信,这对你有用吗?

您需要添加对Microsoft VBScript Reglar表达式5.5的引用。

代码语言:javascript
复制
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

另一种更麻烦的方法,但由于作者已经开始工作,这可能适合上下文。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2015-07-08 22:32:53

尝试这样做,对于它循环0到9的每个单元格,使用Split命令将字符串拆分成一个数组,我们希望所有东西都放在左边,所以我们接受第一个元素(索引0),然后修剪掉空间。

代码语言:javascript
复制
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

编辑:刚刚看到关于小数点的注释,下面是更新的代码:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31298829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档