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

标签 vba excel

我正在应用一个公式: enter image description here

公式的文字表示:

=(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)。

我做错了什么?

最佳答案

通过将公式中的行更改为 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

关于vba - 如何动态更改公式内的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36218733/

相关文章:

c# - 将图表导出到 Excel 文件

vba - 在 Excel VBA 中,根据列数据创建新行

excel - 如果被调用的子调用 `Exit Sub`,则退出主子

vba - VBA 中的循环和索引

VBA FormulaArray - 无法设置 Range 类的 FormulaArray 属性

excel - 如何使用 Nodejs 创建 Excel 文件?

vba - Outlook 2010 创建文件夹和子文件夹

ms-access - 在 VBA 中查找发音相似的文本

excel - 过滤另一个日期后的 future 2 周展望

vba - DoEvents 不执行事件...为什么?