2016-03-25 2 views
3

Я применяя формулу: enter image description hereКак динамически изменять диапазон внутри формулы?

текстовое представление формулы:

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

для всех ячеек в диапазоне А2: А10, пишущий результат в диапазоне 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 
+0

Да, вы правы. Большое спасибо! – Ale

Смежные вопросы