Изменение ссылки на ячейку для макроса Excel - PullRequest
0 голосов
/ 07 января 2020

Я работал с некоторыми сотрудниками на сайте пару месяцев go, чтобы усовершенствовать следующий код, однако попытка пересмотреть мои шаги в отношении ссылок на ячейки оказывается сложной. Чтобы уточнить - все, что изменилось, это следующие ссылки на ячейки ниже:

По существу:

  1. Столбец C теперь изменился на столбец J
  2. Столбец R теперь имеет изменен на столбец O
  3. Столбец S теперь изменен на столбец P
  4. Столбец T теперь изменен на столбец Q

Но для жизни я могу ' Выясните, где эти ссылки на ячейки вступают в силу в коде.

Sub Display()

Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Sheets("DISPLAY")
Set ws2 = ThisWorkbook.Sheets("REPORT_DOWNLOAD")

Dim arr_1 As Variant, arr_2 As Variant, arr_result As Variant
arr_1 = ws1.Range("C2:C" & ws2.Range("L" & ws2.Rows.Count).End(xlUp).Row).Value2
arr_2 = ws2.Range("E2:L" & ws2.Range("E" & ws2.Rows.Count).End(xlUp).Row).Value2

ReDim arr_result(LBound(arr_2) To UBound(arr_2), 1 To 3)

Dim i As Long, j As Long

For i = LBound(arr_1, 1) To UBound(arr_1, 1)
    For j = LBound(arr_2, 1) To UBound(arr_2, 1)

        If arr_1(i, 1) = arr_2(j, 1) Then
            'use this if you're handling numbers
            arr_result(i, 1) = arr_result(i, 1) + arr_2(j, 5)
            arr_result(i, 2) = arr_result(i, 2) + arr_2(j, 4)
            arr_result(i, 3) = arr_result(i, 3) + arr_2(j, 8)
        End If

    Next j
Next i

ws1.Cells(2, 18).Resize(UBound(arr_result, 1), 3).Value2 = arr_result

End Sub

1 Ответ

1 голос
/ 07 января 2020

То есть, в основном, вы хотите адаптировать макрос к измененному макету вашего столбца по столбцам?

В вашем вопросе отсутствует некоторая информация:

  • какой лист изменилось? (изменить только соответствующие ссылки)

  • изменился ли порядок столбцов? (ваши массивы определенно полагаются на фиксированный порядок столбцов)

У вас есть два места, где вы взаимодействуете со столбцами Excel (показано ниже). Здесь вам необходимо внести изменения.

  1. При назначении значений для ваших массивов:

Столбцы C - L :

(предположительно, для этого необходимо изменить C -> J, поэтому "C2: C" => "J2: J" )

    arr_1 = ws1.Range("C2:C" & ws2.Range("L" & ws2.Rows.Count).End(xlUp).Row).Value2

Столбцы E - L :

    arr_2 = ws2.Range("E2:L" & ws2.Range("E" & ws2.Rows.Count).End(xlUp).Row).Value2
При выводе значений в ws1 ( Столбцы от R до T - это столбцы 18 и 2 дополнительных столбца после изменения размера, если я считаю правильно):

( Предположительно, это требует изменений R-> O, S-> P, T-> Q, поэтому 18 => 15 )

    ws1.Cells(2, 18).Resize(UBound(arr_result, 1), 3).Value2 = arr_result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...