Excel / VBA Добавьте значение смежной ячейки к вашему итогу и сделайте это для каждого листа - PullRequest
0 голосов
/ 13 марта 2020

У меня есть рабочая тетрадь с 13 листами. 12 - месяцы года, а 13 - все мои расчеты. Каждый месяц выглядит примерно так:

Fruit     Box 1     Box 2     Box 3
Apple     5         2         1
Orange    2         2         3

Код, который я написал, должен смотреть на первый тип фруктов на 13-м листе, затем go на каждом листе месяца, искать тот же фрукт и если он существует, добавьте значение той же строки в столбце Box 2. После того, как прошло все 12 месяцев, поместите итоговое значение в тот же ряд, следующий столбец с типом фруктов на 13-й странице. Мой код зависает, когда доходит до отправки значения в ячейку.

Sub FY_Appearance()

Dim lcalc As Long
With Application
    lcalc = .Calculation
    .DisplayAlerts = False
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    .EnableEvents = False
End With

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Dim ArrayOne As Variant
ArrayOne = Array("Oct", "Nov", "Dec", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept")

'
'
'Fruit Count
'
'
For Each Cel In Worksheets("Fruit Appearance").Range("A2:A" & LastRow)

    x = 0
    For Each Mnth In ThisWorkbook.Sheets(ArrayOne)

        LR2 = Mnth.Cells(Rows.Count, 1).End(xlUp).Row
        For Each Cel2 In Mnth.Range("A2:A" & LR2)

            If Cel = Cel2 Then x = x + Cel2.Offset(0, 2).Value2

        Next Cel2

    Next Mnth
    Worksheets("Fruit Appearance").Cells(Cel.Columns + 1).Value = x

Next Cel

End Sub

Я пытался вводить .Value в разные строки, но у меня это не получалось, по крайней мере не в любой комбинации, которую я ожидал бы иметь смысл. Если у вас есть более эффективный способ сделать это, я весь слух. Спасибо за внимание!

1 Ответ

0 голосов
/ 14 марта 2020

Я наконец понял это. Спасибо за высказанные соображения. Я понял, что моя переменная Cel уже была определена расположением листа, поэтому моя была дубликатом. Я изменил строку, которая зависала:

Cel.Offset(0, 1).Value = x

Кроме дубликата, я, вероятно, неправильно использовал столбцы.

...