Сравните 2 листа и добавьте результат вычитания в комментарий

#excel #vba

#excel #vba

Вопрос:

Мне нужен код, который сравнивает 2 листа и записывает результат вычитания в комментарии.

У меня есть код для сравнения 2 столбцов, но я не знаю, как переделать этот код для работы с целыми листами.

Текущий код:

 Sub D_ValueToComment()
    ActiveSheet.Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Dim rCell As Range
    For Each rCell In Selection
        With rCell
            If .HasFormula Then
                .Comment.Delete
                Else: .AddComment
                .Comment.Text Text:=CStr("Wynik: " amp; rCell.Value - (rCell.Offset(0, 1).Value))
            End If
        End With
    Next
    Set rCell = Nothing 
End Sub
  

Фотография существующего кода

Листы, для которых мне нужны макросы

Ответ №1:

Вы можете создать функцию следования с помощью 2 циклов:

  1. «ro» — это номер строки
  2. «co» — это номер столбца

ro находится между 3 и 12, а co — между 3 и 14: вы можете изменить это в соответствии с вашим листом

 Sub comments()
'On Error Resume Next
For ro = 3 To 12
For co = 3 To 14
    s1 = Sheets(2).Cells(ro, co)
    s2 = Sheets(3).Cells(ro, co)
    Set Rng = Sheets(2).Cells(ro, co)
    Rng.ClearComments
    Rng.AddComment
    Rng.Comment.Text Text:="Wynik: " amp; s2 - s1
Next
Next
End Sub
  

Комментарии:

1. Это приведет к ошибке, если Sheets(2) это не активный лист. Также укажите Cells с Sheets(2) (или bwtter, используйте блок with). И в любом случае Set Rng = Sheets(2).Range(Cells(ro, co), Cells(ro, co)) лучше записать как Set Rng = Sheets(2).Cells(ro, co)

2. Изменено на Set Rng = Sheets(2). Ячейки (ro, co), спасибо!

3. Спасибо большое, ваш answear почти полностью решил мою проблему. У меня есть еще 1 проблема с этим. Я использую листы с разным количеством проектов в столбце B. Итак, возможно ли автоматическое масштабирование количества строк? Я использовал этот код: Range(Selection, Selection.End(xlDown)).Select Возможно, обозначьте количество строк, выбрав активную ячейку как B3 и отсканировав вниз на .End(xlDown)) и выбрав смещение на 1 вправо. Мне просто нужно, чтобы это было полностью автоматическим и совместимым с несколькими проектами.

4. Вы можете использовать вместо цикла «for» цикл «while» и проверить, не пуста ли ячейка