【ABAP】ALV –セルに色をつける方法（サンプルあり）

<!-- wp:paragraph -->一定金額以上のセルに色をつけてほしい、など特定のセルを目立たせるというのはたまにある話です。決まったやり方があるのですが、ALV表示の汎用モジュールを見てても答えに行き着かないと思いますので、今回取り扱うことにします。

サンプルコードは下記投稿をベースに更新していきます。

[【ABAP】ALV –リフレッシュ時に行列の位置を保持する方法（サンプルあり）](https://qiita.com/sapmemo/items/c324f9449f71abdf6ad2)

それでは見ていきます。

## 表示用の構造に色情報の項目追加

最初が一番のポイントになります。

これまで、ユーザコマンド処理の追加、行選択ボタン、ステータスアイコンの表示など、ALVで使える手法を紹介してきましたが、それらはいずれもALV出力の汎用モジュールに定義されたパラメータを渡すことで対応できました。

しかし、色情報については汎用モジュールのパラメータには持っていません。表示データ側でコントロールします。

表示データの構造に色情報項目を追加していきます。

```
TYPES:
  BEGIN OF t_main.
    INCLUDE TYPE sbook.
  TYPES:
    box     TYPE checkbox,
   <span class="bold-blue"> coltab  TYPE lvc_t_scol,
  END   OF t_main.
```

「LVC_T_SCOL」型を参照した項目を追加します。項目名はここでは「COLTAB」としました。

実体はテーブルデータ型です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2712997/7b2679c7-185a-7527-4be8-7a8b19e0a8d8.png)
項目が3つありますが、「COLOR」については更に構造「LVC_S_COLO」型になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2712997/4cf92d34-64d2-4fa1-59ef-a20f446d3936.png)
項目「COLOR」の中に更に3項目あります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2712997/961c3a58-c7e0-58d5-dd89-3aaa37058f77.png)
これで項目追加は終わりです。続けてプログラムの実装方法を見ていきます。

## 実装方法（サンプルコード）

```
  wa_layout-coltab_fieldname  = 'COLTAB'.</span>

  DATA: lw_coltab TYPE lvc_s_scol.
  LOOP AT it_main ASSIGNING FIELD-SYMBOL(<fs_main>).
    lw_coltab-fname       = 'FORCURAM'.   色を設定する項目ID
    lw_coltab-color-col   = '7'.          色の種類
    APPEND lw_coltab TO <fs_main>-coltab.
  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat              = it_fcat
      is_layout                = wa_layout
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SET_GUI_STATUS'
      i_callback_user_command  = 'USER_COMMAND'
      it_excluding             = it_extab
    TABLES
      t_outtab                 = it_main
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
```

ここで重要なのは次の2点です。

1. レイアウトパラメータに表示データに追加した色情報の項目名を渡す
2. 表示データに色情報を渡す

1点目については、レイアウトパラメータの項目「COLTAB_FIELDNAME」に色情報の項目名を渡せば良いです。これを設定することで、表示データの色情報がどの項目名で管理されるのかを汎用モジュールが認識できるようになります。

2点目では、どの項目に何色を表示するのかを定義します。

上のサンプルコードで表示される画面がこちらです。金額（Amount）1項目ををオレンジ色にしてみましたが、COLTABに色をつけたい項目IDと色情報を追加すれば複数項目の色付けも可能です。

色の設定値「7」はオレンジ色を表すのですが、他にどんな色があるのでしょうか。続けてみていきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2712997/34b66169-4ff5-8f14-1d6f-e3a65f907d74.png)

## ALVで使える色の一覧

サンプルコードでは構造「LVC_S_COLO」型の項目「COLOR」に「7（オレンジ色）」を設定しましたが、全部で8色の設定が可能です。

ちなみに標準プログラム「**SHOWCOLO**」でも見ることができます。SE38から実行できます。

| コード | 色 |
|-----------|-----|
| 0 | システム背景色 |
| 1 | 青色 |
| 2 | 灰色 |
| 3 | 黄色 |
| 4 | 青灰色 |
| 5 | 緑色 |
| 6 | 赤色 |
| 7 | オレンジ色 |

この8色に濃淡をつけることで色を分けられるので、合計16色をセルに設定することが可能です。16色のイメージは次の画面を見てください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2712997/dfc274ff-7033-37f3-d88e-59f99b1033da.png)
1-8行目が淡い色、9-16行目が濃い色です。9行目だけ文字の色が青っぽくなりますが、これはセルの背景色だけではなく文字色も含めて強調表示しているからで標準仕様となります。

色の濃淡は構造「LVC_S_COLO」型の項目「INT」で制御します。SE11を見ればわかりますが、「INTENSIFIED」の略です。

「INT」への設定値は2種類しかありません。

| 0 | 強調表示なし（淡い色） |
|---|-----------------------------------|
| 1 | 強調表示あり（濃い色） |

## まとめ

- 色情報は表示データ側で制御する
- 使える色は8色×濃淡2種類の合計16色

ALVのセルへの色付けは、表示データ側の構造に色情報を持たせるという他のALV機能にはない設定が必要なので、サンプルがないと調べるのが大変な機能要件です。セルへの色付けで困っている方のお役に立てれば幸いです。