我是VBA菜鸟,并且已经在excel宏上工作了大约2周。到目前为止进展顺利。
今天,我完成了删除所需字符串前面的所有数据的代码,在该字符串的前面添加了一些文本(带有空格),并将其存储回该单元格中。
但是,每次我运行宏(例如,检查所做的更改是否在起作用)时,在单词之间都会添加一个新的空格。
这是删除名称前的所有内容并添加所需字符串的代码。我已经调用了InStr
函数,并将该值存储在整数pos中。请注意,这是在特定范围内的循环。
If pos > 0 Then
'Removes anything before the channel name
cellValue.Offset(0, 2) = Right(cell, Len(cell) - InStr(cell, pos) - 2)
'Add "DA" to the front of the channel name
cellValue.Offset(0, 0) = "DA " & Right(cell, Len(cell) - InStr(cell, pos) - 2)
'Aligns the text to the right
cellValue.Offset(0, 2).HorizontalAlignment = xlRight
End If
没有添加其他“ DA”,并且我没有进行任何其他功能来在任何地方添加空格。如果将添加的“ DA”更改为“ DA”,则不会添加多余的空间。
我不希望在其他地方添加其他功能/子/内容来搜索并删除任何多余的空格。有任何想法吗?
编辑以添加:字符串是什么以及字符串前面的是未知的。它可以是数字,字符,空格,也可以是我想要的。例如,它可以是“ Q-Quincey”,“ BA Bob”,“ DA White”等。我认为在单元格中搜索我想要的字符串(Quincey,Bob,White)并根据需要更改单元格将是最好的方法。
你们所有人都帮助我提出的解决方案: 如果pos> 0然后 modString =右(单元格,Len(单元格)-InStr(单元格,位置)-2) '删除频道名称之前的所有内容,并将其放在最后一列中 cellValue.Offset(0,2)= modString
'Aligns the last column text to the right
cellValue.Offset(0, 2).HorizontalAlignment = xlRight
cellValue.Offset(0, 2).Font.Size = 8
'Add "DA" to the front of the channel name in the rightmost column
If StartsWith(cell, "DA ") = True Then
cellValue.Replace cell, "DA" & modString
Else
cellValue.Replace cell, "DA " & modString
End If
如果结束
我不认为使用我的“ StartsWith”功能。我希望避免添加更多代码(因为我是新手,我认为我的代码很笨拙,并且试图简化它),但这仅是另外两行,因此解决方案有效!非常感谢大家。
答案 0 :(得分:0)
也许这是您可以使用的东西:
样本数据:
示例代码:
Sub Test()
With Sheet1.Range("A1:A4")
.Replace "*quincey", "AD Quincey"
End With
End Sub
结果:
答案 1 :(得分:0)
如果要通过循环进行操作,应删除代码中的一些冗余。例如,引用cell.offset(0,0)没有任何意义。
我将目标单元格设置为一个范围,然后简单地编辑该单元格,而无需将不需要的字符串放在另一个单元格中。
**编辑:
我会尝试类似的东西。**
nameiwant = "Quincy"
Set cell = Range("A1")
If InStr(cell, nameiwant) > 0 And Left(cell, 3) <> "DA " Then
cell.Value = "DA " & nameiwant
End If
答案 2 :(得分:0)
在您的示例中,您似乎想用其他内容替换字符串中的第一个“单词”。如果总是这样,则以下使用正则表达式的函数可以做到这一点:
Option Explicit
Function replaceStart(str As String, replWith As String) As String
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = False
.MultiLine = True
.Pattern = "^\S+\W(?=\w)"
replaceStart = .Replace(str, replWith)
End With
End Function
Sub test()
Debug.Print replaceStart("Q-Quincy", "DA ")
Debug.Print replaceStart("BA Bob", "DA ")
Debug.Print replaceStart("DA White", "DA ")
End Sub
debug.print将->
DA Quincy
DA Bob
DA White
正则表达式匹配所有内容,但不包括紧随非单词字符的第一个“单词”字符。这应该是字符串中的第二个单词。
“单词”字符是[A-Za-z0-9_]
集中的任何字符
似乎可以处理您提供的示例。