我恳请您用此Excel技巧来支持我。
我有一列包含公式的“字符串”,即"=+I11+I192+I245+I280"
我需要用单元格自身包含的内容(字符串)替换单元格(I11,I192,I245,I280)ID。
示例:
Cell X --> "=+I11+I192+I245+I280"
Cell I11 = 'A'
Cell I192 = 'B'
Cell I245 = 'C'
Cell I280 = 'D'
公式应生成-> "=+A+B+C+D"
答案 0 :(得分:3)
这吗?
="=+" & I11 &"+" & I192 &"+" & I245 & "+" & I280
答案 1 :(得分:1)
好吧:
=I11 & I192 & I245 & I280
或者您可以包含空格
=I11 & " " & I192
但是直接引号-我的电话很有趣...
答案 2 :(得分:1)
答案 3 :(得分:1)
不知道您要对空单元格做什么,所以这里是草稿
Public Sub test()
[I11] = "A": [I192] = "B": [I245] = "C": [I280] = "D"
Debug.Print ConvertedString("=+I11+I192+I245+I280")
End Sub
Public Function ConvertedString(ByVal inputString As String) As Variant
Dim arr() As String, i As Long
On Error GoTo errHand
If Not InStr(inputString, Chr$(43)) > 0 Then
ConvertedString = CVErr(xlErrNA)
Exit Function
End If
arr = Split(inputString, Chr$(43))
For i = 1 To UBound(arr)
arr(i) = Range(arr(i))
Next i
ConvertedString = Join(arr, Chr$(43))
Exit Function
errHand:
ConvertedString = CVErr(xlErrNA)
End Function
答案 4 :(得分:0)
我认为您的意思是
=INDIRECT(I11,TRUE)+INDIRECT(I192,TRUE)+INDIRECT(I245,TRUE)+INDIRECT(I280,TRUE)
但是请注意,Indirect
是一个易失函数,如果广泛使用它会减慢计算速度。
答案 5 :(得分:0)
使用VBA(仅具有单个定界符):
Function ReplaceAddr(sInput As String, Optional sDelimiter As String = "+") As String
Dim sArr
Dim i As Long
sArr = Split(sInput, sDelimiter)
For i = 1 To UBound(sArr)
sArr = Range(sArr(i))
Next i
ReplaceAddr = Join(sArr, sDelimiter)
End Function
根据OP的评论:
问题在于公式会更改,所以我不能只手动更改。我给你的那只是一个例子,但是所有数学运算符都有很多不同的例子。
您可以尝试使用正则表达式查找单元格地址并替换为单元格的值:
Function ReplaceAddr2(sInput As String) As String
Dim oRegEx As Object
Dim oMatches As Object
Dim i As Long, lStart As Long, lLength As Long
Set oRegEx = CreateObject("vbscript.regexp")
oRegEx.Pattern = "[A-Za-z]{1,3}\d{1,7}"
oRegEx.Global = True
oRegEx.MultiLine = True
Set oMatches = oRegEx.Execute(sInput)
lStart = 0
For i = 0 To oMatches.Count - 1
lLength = oMatches(i).FirstIndex - lStart
ReplaceAddr2 = ReplaceAddr2 & Mid$(sInput, lStart + 1, lLength) & Range(oMatches(i).Value)
lStart = lStart + lLength + oMatches(i).length
Next
ReplaceAddr2 = ReplaceAddr2 & Mid(sInput, lStart + 1, Len(sInput) - lStart)
End Function
模式是1-3个字母,后跟1-7个数字。
这两个函数都不是不稳定的-仅在输入字符串更改时才会重新计算,而在此寻址的单元格更改时不会重新计算。添加此行:
Application.Volatile True
将使它在每次更改时重新计算,但可能会影响性能。