У меня проблемы с объединением функции смещения VBA в цикле. По сути, я пытаюсь извлечь несколько наборов значений из столбца данных на основе поискового запроса (survey
значение). Я могу заставить это работать для одного термина, но я надеялся создать макрос, который извлек бы все значения для всех терминов одновременно.
Набор данных представляет собой столбец (c6: c50) необработанных данных (indicators
), а затем 13 столбцов (j6: j50, m6: m50 и т. Д.) (output
), где извлеченные значения должны появляются. столбцы K и L (и так далее между начальными 13 столбцами) содержат формулы, основанные на значениях столбца J. поисковый термин для каждого из 13 столбцов находится в ячейке непосредственно над диапазоном (J5, M5 и т. д.).
Код ниже, куда я попал. Целью было создать цикл, который извлекает значения из столбца C в столбец J (цикл на основе i), а затем второй цикл (цикл на основе j), который смещается по столбцам.
Что происходит при запуске, заполняется значение первой ячейки в ячейке J6, за которым следует правильное значение в J7. Затем все последующие извлеченные значения перезаписывают то, что было в J7. Как только цикл для первого термина завершен, он смещается на 3 столбца, извлекает то же значение из J6 в M6 (предположительно, потому что поисковый термин «опрос» не смещается?), Но затем возвращается к перезаписи ячейки J7.
Любая помощь будет принята с благодарностью.
Sub indicator_charts()
Dim indicators As Range
Dim survey As String
Dim surveyrng As Range
Dim output As Range
Dim survey2 As String
Dim firstcell As Range
Set indicators = Worksheets("Indicator Summary").Range("C6:C50")
Set output = Worksheets("Indicator Summary").Range("j5:j50")
Set surveyrng = Worksheets("Indicator Summary").Range("J5")
Set firstcell = Worksheets("Indicator Summary").Range("J6")
survey = surveyrng.Value
For j = 0 To 36 Step 3
output.Offset(0, j) = output
surveyrng.Offset(0, j) = surveyrng
firstcell.Offset(0, j) = firstcell
For i = 1 To 46
If InStr(1, indicators.Cells(i, 1).Value, survey) Then
survey2 = indicators.Cells(i, 1).Value
If IsEmpty(firstcell) Then
firstcell.Value = survey2
Else
output.End(xlDown).Offset(1, 0).Value = survey2
End If
End If
Next i
Next j
End Sub