11

このようなExcelスプレッドシートがあります

ID | IDのデータ
   | | id のその他のデータ
ID | IDのデータ
ID | IDのデータ
   | | id のその他のデータ
   | | id のさらに多くのデータ
ID | IDのデータ
   | | id のその他のデータ
ID | IDのデータ
ID | IDのデータ
   | | id のその他のデータ

行の背景色を交互に変えて、1 つの ID のデータをグループ化したい

var color = 白
行ごとに
    最初のセルが空ではなく、色が白の場合
        色を緑に設定
    最初のセルが空ではなく、色が緑色の場合
        色を白に設定
    行の背景を色に設定

マクロや VBA コードを教えてください。

ありがとう

4

8 に答える 8

39

この式を使用して、条件付き書式の入力を取得します。

=IF(B2=B1,E1,1-E1))    [content of cell E2]

列 B にはグループ化する必要がある項目が含まれ、E は補助列です。上部のセル (この場合は B1) が現在のセル (B2) と同じであるたびに、列 E から上部の行の内容が返されます。それ以外の場合は、1 からその内容を引いた値が返されます (つまり、上部のセルの値に応じて、出力は 0 または 1 になります)。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

于 2011-07-20T20:44:51.057 に答える
4

これはあなたが探しているものだと思います。列 A のセルの値が変わると、色が反転します。列 B に値がなくなるまで実行します。

Public Sub HighLightRows()
    Dim i As Integer
    i = 1
    Dim c As Integer
    c = 3       'red

    Do While (Cells(i, 2) <> "")
        If (Cells(i, 1) <> "") Then    'check for new ID
            If c = 3 Then
                c = 4   'green
            Else
                c = 3   'red
            End If
        End If

        Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
        i = i + 1
    Loop
End Sub
于 2008-08-26T00:03:06.243 に答える
2

私のテストでは(少なくともExcel 2010では)間違っているように思われるJason Zの回答に基づいて、たまたまうまくいくコードを次に示します。

Public Sub HighLightRows()
    Dim i As Integer
    i = 2 'start at 2, cause there's nothing to compare the first row with
    Dim c As Integer
    c = 2       'Color 1. Check http://dmcritchie.mvps.org/excel/colors.htm for color indexes

    Do While (Cells(i, 1) <> "")
        If (Cells(i, 1) <> Cells(i - 1, 1)) Then 'check for different value in cell A (index=1)
            If c = 2 Then
                c = 34   'color 2
            Else
                c = 2   'color 1
            End If
        End If

        Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.ColorIndex = c
        i = i + 1
    Loop
End Sub
于 2013-06-06T12:15:17.150 に答える
1

コードを使用する必要がありますか? テーブルが静的な場合、自動フォーマット機能を使用しないのはなぜですか?

ここに画像の説明を入力

同じデータの「セルを結合」する場合にも役立ちます。したがって、「データ、さらに多くのデータ、さらに多くのデータ」のセルを 1 つのセルに結合すると、古典的な「各行は行」のケースをより簡単に処理できるようになります。

于 2008-08-25T22:53:58.593 に答える
0

RGB値を使用して、構成可能な列に基づいてライトグレー/ホワイトのBartdudeの回答を作り直しました。値が変更されるとブール変数が反転され、これは True と False の整数値を介して色の配列にインデックスを付けるために使用されます。2010年に私のために働きます。シート番号でサブを呼び出します。

Public Sub HighLightRows(intSheet As Integer)
    Dim intRow As Integer: intRow = 2 ' start at 2, cause there's nothing to compare the first row with
    Dim intCol As Integer: intCol = 1 ' define the column with changing values
    Dim Colr1 As Boolean: Colr1 = True ' Will flip True/False; adding 2 gives 1 or 2
    Dim lngColors(2 + True To 2 + False) As Long   ' Indexes : 1 and 2
          ' True = -1, array index 1.    False = 0, array index 2.
    lngColors(2 + False) = RGB(235, 235, 235) ' lngColors(2) = light grey
    lngColors(2 + True) = RGB(255, 255, 255) '  lngColors(1) = white

    Do While (Sheets(intSheet).Cells(intRow, 1) <> "")
        'check for different value in intCol, flip the boolean if it's different
        If (Sheets(intSheet).Cells(intRow, intCol) <> Sheets(intSheet).Cells(intRow - 1, intCol)) Then Colr1 = Not Colr1
        Sheets(intSheet).Rows(intRow).Interior.Color = lngColors(2 + Colr1) ' one colour or the other
        ' Optional : retain borders (these no longer show through when interior colour is changed) by specifically setting them
        With Sheets(intSheet).Rows(intRow).Borders
            .LineStyle = xlContinuous
            .Weight = xlThin
            .Color = RGB(220, 220, 220)
        End With
        intRow = intRow + 1
    Loop
End Sub

オプションのボーナス: SQL データの場合、SSMS で使用されているのと同じ黄色で NULL 値を色付けします

Public Sub HighLightNULLs(intSheet As Integer)
    Dim intRow As Integer: intRow = 2 ' start at 2 to avoid the headings
    Dim intCol As Integer
    Dim lngColor As Long: lngColor = RGB(255, 255, 225) ' pale yellow

    For intRow = intRow To Sheets(intSheet).UsedRange.Rows.Count
        For intCol = 1 To Sheets(intSheet).UsedRange.Columns.Count
            If Sheets(intSheet).Cells(intRow, intCol) = "NULL" Then Sheets(intSheet).Cells(intRow, intCol).Interior.Color = lngColor
        Next intCol
    Next intRow
End Sub
于 2015-06-17T15:21:35.760 に答える
0

[書式] メニュー項目で [条件付き書式] メニュー オプションを選択すると、そのセルに適用するロジックを作成できるダイアログが表示されます。

あなたのロジックは上記のコードと同じではないかもしれません。

セルの値は | | に等しい | | と | ホワイト ....次に、色を選択します。

追加ボタンを選択して、条件を必要なだけ大きくすることができます。

于 2008-08-25T22:26:43.027 に答える
-1

Excel でこのルールを使用して、交互の行をフォーマットします。

  1. 代替スタイルを適用する行を強調表示します。
  2. 「条件付き書式」を押します->新しいルール
  3. 「数式を使用して、書式設定するセルを決定する」を選択します (最後のエントリ)
  4. ルールを次の形式で入力してください:=MOD(ROW(),2)=0
  5. 「フォーマット」を押して、交互の行に必要なフォーマットを設定します。塗りつぶし -> 色。
  6. [OK] を押します。[OK] を押します。

代わりに交互の列をフォーマットする場合は、使用します=MOD(COLUMN(),2)=0

出来上がり!

于 2015-12-07T00:15:25.117 に答える