Настройка словаря сценариев для VB в Excel - PullRequest
0 голосов
/ 10 июля 2020

ищет помощи по этому поводу. не очень знаком со словарями, но я слышал, что это будет намного быстрее, чем то, что я сделал. У меня есть несколько столбцов (73 столбца) с данными в одном, а в следующем столбце есть текст, который я хочу использовать для пометки данных цветом. Вот то, что у меня есть сейчас, но, как я уже сказал, я думаю, что словарь будет быстрее.

Текст нормальный, отчетный, ненормальный, критический

For Each v In Sheets(1).Range("M2:M" & lastRow)

   If v.Value = "Reportable" Then

      Range("m" & v.Row).Interior.ColorIndex = 37 ' blue

   ElseIf v.Value = "Abnormal" Then

      Range("m" & v.Row).Interior.ColorIndex = 36 ' yellow

   ElseIf v.Value = "Critical" Then

      Range("m" & v.Row).Interior.ColorIndex = 38 ' red

   ElseIf v.Value = "Normal" Then

   End If

Next v

Ищу кого-нибудь, чтобы помочь мне с это?

Спасибо J

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Не уверен, что словарь поможет. Думаю, скорость увеличится, если окраску салона делать сразу, а не по ячейкам. Поэтому попробуйте этот код, пожалуйста:

Sub colorInterior()
 Dim sh As Worksheet, rngB As Range, rngY As Range, rngR As Range
 Dim LastRow As Long, lastColumn As Long, i As Long, j As Long
 
  Set sh = Sheets(1)
  LastRow = sh.Range("A" & Rows.count).End(xlUp).row
  lastCol = sh.Cells(1, Columns.count).End(xlToLeft).Column
  For i = 2 To LastRow
    For j = 1 To lastCol
       If sh.Cells(i, j).Value = "Reportable" Then
            If rngB Is nothint Then
                Set rngB = sh.Cells(i, j)
            Else
                Set rngB = Union(rngB, sh.Cells(i, j))
            End If
       ElseIf sh.Cells(i, j).Value = "Abnormal" Then
            If rngY Is nothint Then
                Set rngY = sh.Cells(i, j) '.Interior.ColorIndex = 36 ' yellow
            Else
                Set rngY = Union(rngY, sh.Cells(i, j))
            End If
       ElseIf sh.Cells(i, j).Value = "Critical" Then
            If rngR Is nothint Then
                Set rngR = sh.Cells(i, j) '.Interior.ColorIndex = 38 ' red
            Else
                Set rngR = Union(rngR, sh.Cells(i, j))
            End If
       ElseIf v.Value = "Normal" Then
            'here you maybe need to set interior like none
       End If
   Next j
 Next i
 rngB.Interior.ColorIndex = 37 ' blue
 rngY.Interior.ColorIndex = 36 ' yellow
 rngR.Interior.ColorIndex = 38 ' red
End Sub
0 голосов
/ 10 июля 2020

Здесь нет большого преимущества в использовании словаря - Select Case подойдет

Dim ci

For Each v In Sheets(1).Range("N2:N" & lastRow)
    Select Case v.Value
       Case "Reportable": ci = 37 'blue
       Case "Abnormal": ci = 36 'yellow
       Case "Critical": ci = 38 'red
       Case Else: ci = xlNone
    End Select
    v.Offset(0, -1).Interior.ColorIndex = ci 'same cell as v ?
Next v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...