Справочник по условным динамическим таблицам Excel VBA - PullRequest
0 голосов
/ 27 ноября 2018

Я довольно новичок в VBA и работаю над кодом, чтобы вставить переменное число новых строк с формулами, используя множество операторов "if".Вставка строк работает нормально, но я борюсь со вставкой формул.В настоящее время я вставляю строки с кодом, подобным приведенному ниже:

Sub InsertRow()

'Establish variable for search range
Dim i As Range
Dim cell As Range
Set i = Range("B:B")
For Each cell In i.Cells

'Manual input for conductor count search and insert amount below
If cell.Value = "4-1/C" Then
cell.Offset(1).EntireRow.Resize(3).Insert
End If

Next

End Sub

Моя проблема: значение в столбце A напрямую ссылается на имя вкладки, где я хочу сослаться на ячейку (A1 будет "Sheet2")например).Я хочу вставить формулу в столбец R на Sheet1, чтобы получить значения из ячейки A22 на Sheet2.Для остальных вставленных столбцов я хочу вставить A23 из Sheet2, A24 из Sheet2 и т. Д. Вот изображение того, что я пытаюсь сделать.Я спрятал столбцы, которые не применимы.https://i.stack.imgur.com/pqiUy.jpg

Я пытался использовать смещения и функции R [0] C [-2], но по общему признанию я очень потерян.Используя косвенные функции Excel (не VBA), я смог получить эти значения с помощью = INDIRECT ("'" & $ A $ 1 & "'! A22"), но я не могу осуществить это в VBA.

Заранее спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Я понял это.Я пытался использовать .Formula вместо .Value. Я также не знал о макрос записи.Спасибо Брюсу за то, что он указал мне правильное направление.Результирующий код просто должен быть зациклен для всех моих операторов вставки строки «IF»:

Sub test()
    Dim x As Long
    Dim firstRow As Long
    firstRow = 1
    Dim lastRow As Long
    With ActiveSheet
        lastRow = .Range("B2").End(xlDown).Row
        For x = lastRow To firstRow Step -1
            If .Range("B" & x).Value = "4-1/C" Then
                .Range("B" & x).Offset(0, 15).Value = "=INDIRECT(""'""&RC[-16]&""'!A22"")"
                .Range("B" & x).Offset(1, 15).Value = "=INDIRECT(""'""&R[-1]C[-16]&""'!A23"")"
                .Range("B" & x).Offset(2, 15).Value = "=INDIRECT(""'""&R[-2]C[-16]&""'!A24"")"
                .Range("B" & x).Offset(3, 15).Value = "=INDIRECT(""'""&R[-3]C[-16]&""'!A25"")"
                .Range("B" & x).Offset(0, 16).Value = "=INDIRECT(""'""&RC[-17]&""'!J22"")"
                .Range("B" & x).Offset(1, 16).Value = "=INDIRECT(""'""&R[-1]C[-17]&""'!J23"")"
                .Range("B" & x).Offset(2, 16).Value = "=INDIRECT(""'""&R[-2]C[-17]&""'!J24"")"
                .Range("B" & x).Offset(3, 16).Value = "=INDIRECT(""'""&R[-3]C[-17]&""'!J25"")"    
            End If
        Next
    End With
End Sub
0 голосов
/ 28 ноября 2018

Предполагая ссылки согласно вашему скриншоту и жесткому кодированию:

Range("R1").Formula = "=INDIRECT(""'""&A1&""'!A22"")"
Range("R1:R8").FillDown
...