如何动态更改公式内的范围?

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

【讨论】:

以上是关于如何动态更改公式内的范围?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据excel电子表格中的指向值在公式中制作动态单元格

在VB中,如何生成某个范围内的随机整数?

Excel 2010:如何以公式方式计算包含合并单元格的范围内的单元格总数?

范围公式内的单元格引用计算

使用数组公式同时测试(引用)同一范围内的多个单元格

如何使用 Google Apps 脚本将公式添加到 Google 表格?