在JAVA或C ++中,我们可以在myString.insert(position, word)
的行中做一些事情。有没有办法在Excel VBA的字符串中执行相同的操作?在我的工作表中,我有一个如下所示的字符串:01 / 01 / 995
,我想在年份中插入一个1,因此请将其设为01 / 01 / 1995
。
Dim test_date As String
test_date = "01 / 25 / 995"
test_date = Mid(test_date, 1, 10) & "1" & Mid(test_date, 11, 4)
还有其他更简单/更优雅的方式吗?
答案 0 :(得分:12)
我不认为有一种更简洁的方法,所以你可以把它包装在一个函数中。另一种方法是使用replace
,但它不是更清洁。
Function Insert(source As String, str As String, i As Integer) As String
Insert = Replace(source, tmp, str & Right(source, Len(source)-i))
End Function
或只是修改你拥有的东西
Function Insert(source As String, str As String, i As Integer) As String
Insert = Mid(source, 1, i) & str & Mid(source, i+1, Len(source)-i)
End Function
答案 1 :(得分:2)
这是已接受答案的一个版本,带有更多的测试并按照我期望的方式工作:
Function Insert(original As String, added As String, pos As Long) As String
If pos < 1 Then pos = 1
If Len(original) < pos Then pos = Len(original) + 1
Insert = Mid(original, 1, pos - 1) _
& added _
& Mid(original, pos, Len(original) - pos + 1)
End Function
测试通过:
Public Sub TestMe()
Debug.Print Insert("abcd", "ff", 0) = "ffabcd"
Debug.Print Insert("abcd", "ff", 1) = "ffabcd"
Debug.Print Insert("abcd", "ff", 2) = "affbcd"
Debug.Print Insert("abcd", "ff", 3) = "abffcd"
Debug.Print Insert("abcd", "ff", 4) = "abcffd"
Debug.Print Insert("abcd", "ff", 100) = "abcdff"
End Sub
答案 2 :(得分:1)
这是我回答这个问题的 50 美分。
首先,我需要感谢来自 wmfexel 的 WONG, Ming Fung,我在那里发现了这个技巧。
与要求替换字符串的 VBA Replace
函数不同,Replace
工作表函数只要求在原始字符串中的位置和要覆盖的字符数。
通过“滥用”这个覆盖参数,将它设置为 0 允许我们通过替换它的 0 个字符来在 Orignin 字符串的特定位置添加给定的字符串。
这是它的工作原理:
Dim test_date As String
test_date = "01 / 25 / 995"
test_date = Worksheetfunction.Replace(test_date, 11, 0, "1")
'Now test_date = "01 / 25 / 1995" as we added "1" at the 11th position in it
如您所见,它非常方便且可读。 对于那些挑剔并认为名称 Replace 只是令人困惑的人来说,将它包装在一个 Insert 函数中,你就大功告成了;)