#excel #vba
#excel #vba
Вопрос:
Я написал код, чтобы выделить конкретную длину строки, т.Е. Sheet7.Range("C12:G12")
с Sheet7.Range("C" amp; Rows.Count).End(xlUp).Row
помощью .
Где Sheet2.Range(«A20») amp; Sheet2.Range(«A21») amp; Sheet2.Range(«A22») совпадают с Листом7.Диапазон («C: C»)
но мой код не работает. Мы будем признательны за вашу помощь в решении проблемы.
Sub Formatting()
Dim rg As Range
endrow = Range("C" amp; Rows.Count).End(xlUp).Row
For Each cell In Range("C12:C" amp; endrow)
If cell.Value = Sheet2.Range("A20") amp; Sheet2.Range("A21") amp; Sheet2.Range("A22") Then
cell.Sheet7.Range("C12:G12").Interior.Color = RGB(192, 192, 192)
End If
Next
End Sub
этот код просто выделяет Sheet7.Range("C12:G12")
только эту строку. Он должен идти дальше.
Sub Local_BACKGROUND()
endrow = Range("C" amp; Rows.Count).End(xlUp).Row
For Each cell In Range("C12:C" amp; endrow)
If Not IsError(Application.Match(cell.Value, Sheet2.Range("A20:A23"), 0)) Then
Sheet7.Range("C12:G12").Interior.Color = RGB(192, 192, 192)
End If
Next
End Sub
Комментарии:
1.
Sheet2.Range("A20") amp; Sheet2.Range("A21") amp; Sheet2.Range("A22")
эквивалентно"AlphaBetaDelta"
2. Да, @BigBen, вы правы.
3.^^
cell.value = Sheet2.range("A20") OR ....
4.
If Not Iserror(Applicatioin.Match(cell.Value, Sheet2.Range("A20:A23"),0)) Then
5. @Mento Я только что попробовал запустить ваш код в образце рабочей книги, и у меня это сработало. Одна вещь , которую я заметил , — это то , что у вас есть опечатка в слове
Application
. (Вы написали это по буквам Applicatioin). Было ли это просто опечаткой на этом сайте, или ваш код тоже неверен?
Ответ №1:
Форматирование диапазонов строк
Быстрое исправление
Option Explicit
Sub formatRowRangesQF()
Dim EndRow As Long
EndRow = Sheet7.Range("C" amp; Sheet7.Rows.Count).End(xlUp).Row
Dim dCell As Range
For Each dCell In Sheet7.Range("C12:C" amp; EndRow)
If IsNumeric(Application.Match(dCell.Value, _
Sheet2.Range("A20:A22"), 0)) Then
dCell.Resize(, 5).Interior.Color = RGB(192, 192, 192)
End If
Next
End Sub
Более серьезное решение
Sub formatRowRanges()
' Source
Dim srg As Range: Set srg = Sheet2.Range("A20:A22")
' Destination
Dim drg As Range
With Sheet7.Range("C12:G12")
Dim LastRow As Long
With .Cells(1)
LastRow = .Offset(.Worksheet.Rows.Count - .Row).End(xlUp).Row
If LastRow < .Row Then Exit Sub
End With
Set drg = .Resize(LastRow - .Row 1)
End With
' Combine
Dim trg As Range
Dim rrg As Range
Dim cValue As Variant
For Each rrg In drg.Rows
cValue = rrg.Cells(1).Value
If Not IsError(cValue) Then
If Len(cValue) > 0 Then
If IsNumeric(Application.Match(cValue, srg, 0)) Then
If trg Is Nothing Then
Set trg = rrg
Else
Set trg = Union(trg, rrg)
End If
End If
End If
End If
Next
' Color
If Not trg Is Nothing Then
drg.Interior.Color = xlNone
trg.Interior.Color = RGB(192, 192, 192)
End If
End Sub
Комментарии:
1. Большое вам спасибо, код работает отлично.
2. Еще раз большое вам спасибо
Ответ №2:
Ваш код не работает из-за того, как вы настроили условие тестирования. Он оценит все справа от =
первого, а затем сравнит его со значением ячейки. Это приведет к (например) "alpah" = "alphabetagammadelta"
.
Попробуйте вместо этого что-то вроде:
if not(iserror(Application.Match(cell.value, Sheet2.Range("A20:A23"), 0))
Комментарии:
1. Я обновил модифицированный код @basodre, но все еще не работает.