如何dynamic改变公式内的范围?

我正在申请一个公式: 在这里输入图像说明

公式的文字表示:

=(SUBSTITUTE((LEFT(A2;(FIND("htt";A2;1))-3));";";";"))&RIGHT(A2;(LEN(A2)-(FIND("htt";A2;1))+3)) 

到范围A2:A10中的所有单元格,分别将结果写入范围B2:B10。

为此,我使用下面的macros:

 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),macros程序通过A2; A4; A6等(每行增加一行数)。

我究竟做错了什么?

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