#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 циклов:
- «ro» — это номер строки
- «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» и проверить, не пуста ли ячейка