0

Excelにリストがあり、その行のセル2の値に基づいて行をフォーマットする必要があります。これはデータがどのように見えるかです

No. | Name | Other data | Other data 2 | Date | Date 2 |

たとえば、、if Name=John Tery => color row as Redなどif Name=Mary Jane => color row as Pink

条件付き書式を使用してみましたが、これを機能させる方法がわかりませんでした。私はExcelでそのようなタスクを行った経験がほとんどありません。

誰か助けてもらえますか?

PS。すべての名前は2語の名前です

4

2 に答える 2

3

処理する名前が少ない場合、各条件付き書式の数式は次のようになります。

=$B2="John Tery"
  • 影響を受ける行を一番上の行から下に選択する必要があります(したがって、現在アクティブなセルは最後の行ではなく2番目の行にあります)
  • 列への絶対参照$Bは、異なる列のすべてのセルについて、列Bがテストされることを意味します
  • 行への相対参照2は、異なる行のセルについて、それ自体の行がテストされることを意味します(たとえば、セルA42の場合、数式は$ B42の値をテストします)
  • 等式演算子=はTRUEまたはFALSE(または引数のいずれかがエラーの場合はエラー)を返し、内部IF条件と同じように使用されます。
于 2012-04-07T11:27:23.840 に答える
2

編集質問を読み直すと、名前だけでなく行全体に色が付けられることがわかりました。また、認識された名前が認識されていない名前に置き換えられた場合、その色を行から削除する必要があると判断しました。これらの問題に対処するために、元のコードが置き換えられました。

以下の解決策は、私が特定できるどのシーンでも最も簡単に思えるため、質問への回答は気にしないことにしました。

最初に、"John Tery" を赤く、"Mary Jane" をピンク色にすることを識別する方法が必要です。最も簡単な方法は、NameColour必要に応じて名前を色付けしたワークシートを用意することだと判断しました。したがって、ルーチンは、このリストで「John Tery」が赤であることを認識しています。あなたのリストにさらにいくつかの名前を追加しました。ルーチンは、名前に含まれる単語の数を気にしません。

色付きの名前を示すワークシート NameColor

以下のコードはThisWorkbook. このルーチンは、セルが変更されるたびにトリガーされます。変数MonitorColNumMonitorSheetNameは、監視するシートと列をルーチンに指示します。その他のセルの変更は無視されます。一致が見つかった場合は、名前の標準形式を NameColour からコピーし (必要でない場合は、このステートメントをコードから削除します)、必要に応じてセルに色を付けます。一致するものが見つからない場合は、名前を NameColour に追加して、後でその色を指定します。

お役に立てれば。

Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Changed As Range)

  Dim CellCrnt As Variant
  Dim ColLast As Long
  Dim Found As Boolean
  Dim MonitorColNum As Long
  Dim MonitorSheetName As String
  Dim RowNCCrnt As Long

  MonitorSheetName = "Sheet2"
  MonitorColNum = 2

  ' So changes to monitored cells do not trigger this routine
  Application.EnableEvents = False

  If Sh.Name = MonitorSheetName Then
    ' Use last value in heading row to determine range to colour
    ColLast = Sh.Cells(1, Columns.Count).End(xlToLeft).Column
    For Each CellCrnt In Changed
      If CellCrnt.Column = MonitorColNum Then
        With Worksheets("NameColour")
          RowNCCrnt = 1
          Found = False
          Do While .Cells(RowNCCrnt, 1).Value <> ""
            If LCase(.Cells(RowNCCrnt, 1).Value) = LCase(CellCrnt.Value) Then
              ' Ensure standard case
              CellCrnt.Value = .Cells(RowNCCrnt, 1).Value
              ' Set required colour to name
              'CellCrnt.Interior.Color = .Cells(RowNCCrnt, 1).Interior.Color
              ' Set required colour to row
              Sh.Range(Sh.Cells(CellCrnt.Row, 1), _
                       Sh.Cells(CellCrnt.Row, ColLast)).Interior.Color = _
                                         .Cells(RowNCCrnt, 1).Interior.Color
              Found = True
              Exit Do
            End If
            RowNCCrnt = RowNCCrnt + 1
          Loop
          If Not Found Then
            ' Name not found.  Add to list so its colour can be specified later
            .Cells(RowNCCrnt, 1).Value = CellCrnt.Value
            ' Clear any existing colour
            Sh.Range(Sh.Cells(CellCrnt.Row, 1), _
                 Sh.Cells(CellCrnt.Row, ColLast)).Interior.ColorIndex = xlNone
          End If
        End With
      End If
    Next
  End If

  Application.EnableEvents = True

End Sub
于 2012-04-07T11:09:17.490 に答える