如何动态更改公式内的范围?
Posted
技术标签:
【中文标题】如何动态更改公式内的范围?【英文标题】:How to dynamically change range inside formula? 【发布时间】:2016-03-25 11:04:57 【问题描述】:我正在应用一个公式:
公式的文字表示:
=(SUBSTITUTE((LEFT(A2;(FIND("htt";A2;1))-3));";";";"))&RIGHT(A2;(LEN(A2)-(FIND("htt";A2;1))+3))
对范围A2:A10中的所有单元格,分别将结果写入范围B2:B10。
为此,我使用以下宏:
Sub ColumnsFormat()
Dim s As String
Dim i As Integer, j As Integer
'Set wb = Workbooks("CSV_File.xlsm")
Application.ScreenUpdating = False
j = 1
For i = 2 To 10
s = "=(SUBSTITUTE((LEFT(R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],(FIND(""htt"",R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],1))-3)),"","","";""))&RIGHT(R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],(LEN(R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "])-(FIND(""htt"",R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],1))+3))"
Sheets("Sheet1").Cells(i, 2).Value = s
Next i
End Sub
问题在于,由于某种原因,For
循环内公式中的行号是错误的。而不是拿A2; A3; A4 … A10 单元格,(每次改变行号 1),宏贯穿 A2; A4; A6等(每行加2)。
我做错了什么?
【问题讨论】:
【参考方案1】:通过将公式中的行更改为 0,代码可以正常工作。我想问题在于,在您的公式中,该行是相对于后来应用该公式的特定单元格计算的。因此,B2 中的公式着眼于 A(2+2),B3 中的公式着眼于 A(3+3),依此类推。
Sub ColumnsFormat()
Dim s As String
Dim i As Integer, j As Integer
'Set wb = Workbooks("CSV_File.xlsm")
Application.ScreenUpdating = False
j = 1
For i = 2 To 10
s = "=(SUBSTITUTE((LEFT(R[" & 0 & "]C[" & j - 2 & "],(FIND(""htt"",R[" & 0 & "]C[" & Trim(Str(j - 2)) & "],1))-3)),"","","";""))&RIGHT(R[" & 0 & "]C[" & Trim(Str(j - 2)) & "],(LEN(R[" & 0 & "]C[" & Trim(Str(j - 2)) & "])-(FIND(""htt"",R[" & 0 & "]C[" & Trim(Str(j - 2)) & "],1))+3))"
Sheets("Sheet1").Cells(i, 2).Value = s
Next i
End Sub
【讨论】:
以上是关于如何动态更改公式内的范围?的主要内容,如果未能解决你的问题,请参考以下文章