vba使用instr和left / right从字段中提取名称

时间:2016-03-30 22:28:27

标签: excel vba excel-vba

我再次大家。我试图拉各种字符串并将字符串放在一个单独的字段中。我似乎无法让我的代码工作,我希望有人可以在我有缺陷的尝试中发光。非常感谢你。

我的列“B”包含多个名称,格式如下:

       B                    C         D
   Other Team            teamOne     teamTwo
 /jdoe/smithjr/
 /someguy/testuser/
 /obiwan/luke/darth
 /vader/
 /hp/dell/lenova/mint/

我只需要取前两个名字,在一个字段中放置一个名字,在另一个字段中放一个名字。

预期结果

       B                    C         D
   Other Team            teamOne     teamTwo
 /jdoe/smithjr/            jdoe       smithjr
 /someguy/testuser/       someguy     testuser
 /obiwan/luke/darth        obiwan     luke
 /vader/                   vader
 /hp/dell/lenova/mint/     hp         dell

到目前为止,我提出的代码在下面并且不起作用。我收到的错误是没有要替换的数据。

For Q = 2 To 10
If UCase(Cells(Q, "B").Value) Like "*Other Team*" Then
  Name = Cells(Q, "B").Value
  startingPosition = InStr(Name, "/")
  Firstname = Left(Name, (startingPosition) - 1)
  secondName = Right(Name, startingPosition - 2)
  Cells(Q, "C").Value = Firstname
  Cells(Q, "D").Value = secondName
End If
Next Q

我对VBA很新(第3天)并且似乎无法弄清楚如何解析这些数据。也许有人可以解释我做错了什么并帮助我?谢谢。

2 个答案:

答案 0 :(得分:1)

由于您有一个分隔字符串,我个人使用Split函数。另请注意,您的If UCase(Cells(Q, "B").Value) Like "*Other Team*" Then测试在示例数据中的每个输入上都失败了 - 只有您跳过的列标题才会出现,假设您将测试更改为大写,就像您执行输入。如果您正在尝试确定自己是否使用了正确的工作表,则需要将其置于循环之外。

这样的事情:

If UCase$(Cells(1, "B").Value) Like "*OTHER TEAM*" Then
    Dim tokens() As String
    For Q = 2 To 10
        Name = Cells(Q, "B").Value
        tokens = Split(Name, "/")
        If UBound(tokens) > 0 Then Cells(Q, "C").Value = tokens(1)
        If UBound(tokens) > 1 Then Cells(Q, "D").Value = tokens(2)
    Next Q
End If

答案 1 :(得分:0)

只需输入一个"公式"方法

Sub main()

If UCase$(Cells(1, "B").Value) Like "*OTHER TEAM*" Then
    Range("c2:c10").FormulaR1C1 = "=MID(RC2,2,SEARCH(""/"",RC2,2)-2)"
    Range("d2:d10").FormulaR1C1 = "=IF(ISNUMBER(SEARCH(""/"",RC2,SEARCH(""/"",RC2,2)+1)),MID(RC2,SEARCH(""/"",RC2,2)+1,SEARCH(""/"",RC2,SEARCH(""/"",RC2,2)+1)-SEARCH(""/"",RC2,2)-1),"""")"
End If

更多" clear"格式可以是

Dim str1 As String, str2 As String, formula1 As String, formula2 As String

str1 = "SEARCH(""/"",RC2,2)"
str2 = "SEARCH(""/"",RC2," & str1 & "+1)"
formula1 = "=MID(RC2,2," & str1 & "-2)"
formula2 = "=IF(ISNUMBER(" & str2 & "),MID(RC2," & str1 & "+1," & str2 & "-" & str1 & "-1),"""")"

If UCase$(Cells(1, "B").Value) Like "*OTHER TEAM*" Then
    Range("c2:c10").FormulaR1C1 = formula1
    Range("d2:d10").FormulaR1C1 = formula2
End If