エクセルVBAで条件付き書式を使わず1行おきに色を付ける方法

自力で老眼回復

こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!

全10回の連載でエクセルのデータ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。今回はその第8回目です。

前回お伝えした「空白行をまとめて一括で非表示にする方法」に続いて、今回は「条件付き書式を使わず1行おきに色を付ける方法」するテクニックをご紹介します。

エクセルVBAで空白行を削除しないでまとめて一括非表示で隠す方法
エクセルのワークシートにある空白行を取り除きたい場合があると思います。削除はしないで非表示にしたという場合1つ1つ行を選択して非表示にするのは大変な作業ですよね。そこで今回はエクセルのVBAのhiddenプロパティを使って、空白行を非表示にする方法を紹介します。

大量のデータが入った表などをエクセルで表示させると、背景色が一色の場合どこまでデータを見ていたのかわかりずらいことがあります。そこで1行おきに色をつけて見やすくするというアイデアがあると思います。

Ctrlキーを使って1行おきに選択していく・・・う~ん手間がかかりますよね。数十行ならまだしも数百行になったらとてもやってられませんよね。

そこで条件付き書式とエクセルの数式を組み合わせるテクニックがあるのですが、いくつかの手順を踏まなければならないし、複数人で作業するときにそれぞれの人に教えなればならず不便です。

そんなわけで複数人での作業を考えて、エクセルVBAで1行おきに色をつけるプログラムを作っていきましょう。ボタン1発でできれば作業も早く終わるし、操作ミスなどで起こる間違いも少なくなりますからね。

レクタングル大336×280

1行おきに色をつけるプログラムの作成

前回使用した一括変換プログラムにボタンを追加する

毎度のことですが作業効率を考え、前回使ったプログラムを再利用します。デスクトップにある「一括変換.xls」を開きます。

UserFrom1を開いて新たに「1行おきに色をつける」ボタンを追加します。ボタンの表示名はプロパティウィンドウのCaptionで変更できます。ユーザーフォームやボタンの大きさは見やすいように調整して下さい。

またまたボタンが増えました。まだ増える予定ですっ。

サンプルコードを貼り付ける

「1行おきに色をつける」ボタンをダブルクリックしてコードウィンドウを開きます。「CommandButton5_Click()」の下に以下のコードを貼り付けます。

このプログラムコードは「セル内の文字列に含まれる改行を一括で削除する方法」で作ったコードをコピーして一部を修正して使っています。

プログラムコードの解説

重要なポイントに要点を絞って説明していきます。今回の「1行おきに色をつけるプログラム」はワークシート全体に対して処理をするプログラムです。そのため列を指定するInputboxは必要ないのでコードから削除しています。

Inputbox関数を使って開始行を入力させる

これまでの記事では開始行をプログラムコードの中に書いていました。しかし今回のプログラムは1行ごとに色をつけるプログラムですので、開始行が固定だと使い勝手が悪いため、開始行を入力させるようにします。

InputBox(表示させるメッセージ)

InputBox関数を使用するとダイアログボックスを表示させることができます。引数には表示させるメッセージを指定します

上記のプログラムのコードの16行目から20行目の処理です。

変数Col_StartにInputBoxで入力した開始行の数字を入れるようにしています。InputBoxのキャンセルが押された場合や、数字以外の文字列が入力された場合にエラーにならないように、On Errorステートメントを使っています

これは以前の記事「セル内の文字列を操作して全角文字を半角に一括変換する方法」で紹介しましたので参考にしてみてください。

エクセルVBAでセル内の文字列を操作して全角文字を半角に一括変換する方法
全角を半角への変換はASC関数、半角から全角への変換はJIS関数を使って、ワークシート内でもできるのですが、 毎回入力するのは面倒ですよね。VBAを使えば別のエクセルファイルでも使える汎用的なプログラムが作れるのでとっても便利ですよ。

InputBoxに入力した開始行ですが、変数Row_Startに入れるようにしていることはさきほどご説明しました。この変数Row_StartですがLong型で宣言しているので数字以外の値が入るとエラーになります

Dim Row_Start As Long

そこで数字以外が入力されたときはOn Error GoToでプロシージャの最後にあるラベルmyError:までスキップさせているというわけです。

Stepを使って一行おきに処理をする

For 変数 = 開始行 To 終了行 Step 増減数

For文でStepを使うことで間隔を空けて処理をさせることができます。今回の場合はstep 2とすることで1行おきに処理させています。開始行が2なら2,4,6,8,10と変数が2つずつ増加して最終行まで繰り返し処理をします。

Interior.Colorプロパティで行に色をつける

Rows(行番号).Interior.Color = RGB(RGB値)

RGB値には数字を指定します。Rは赤、Gは緑、Bは青になりますので、赤にしたい場合はRGB(255,0,0)と指定します。255が最大値です。

今回のプログラムではグレーを指定しています。RGB値は下記のようなカラーチャートを紹介しているサイトを参考にしてみてください。

また次のようにしてエクセルが独自で持っているカラー番号を指定することもできます

Rows(行番号).Interior.ColorIndex = インデックス番号
インデックス番号の一例
1 黒
2 白
3 赤
4 緑
5 青

例えば青色に網掛けしたい場合は以下のようにします。
Rows(i).Interior.ColorIndex = 5

エクセルのカラーインデックスは下記サイトを参考にしてみてください。

Office VBA リファレンス トピック

1行おきに色をつけるプログラムの動作確認

それでは実際に出来上がったプログラムを動かしてみましょう。

ワークシートの起動ボタンを押します。フォームが表示されたら「1行おきに色をつける」ボタンを押します。

処理を開始したい行を入力します

2行目から1行おきにグレーの色がつきました、

まとめ

いかがでしたか?今回の内容をまとめます。

  • InputBox関数で開始行を入力させる
  • Interior.Colorプロパティで行に色をつける
  • For文でStepを使うことで1行おきに処理を実行できる

時短のおつまみ

今日のおつまみはコレです!

Ctrlキー + D  1つ上のセルをコピーしてペースト

エクセルで便利なショートカットキーです。選択されたセルの1つ上のセルをコピーしてペーストしてくれます。

普通だと1つ上のセルを選択してコピー。次の行のセルに移動してペーストと2段階の操作が必要ですが、このショートカットキーを使えば1発でできるというエコなワザですっ。

それではまた~。



[連載記事 全10回] エクセルVBAで文字列変換ツールを作る

全角半角の変換をしたり、空白行や改行を削除したり。データ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。1つの記事で1機能ずつ追加していきますので、少しずつVBAを学びながら進めることができます。

  1. エクセルVBAでセル内の文字列に含まれる改行を一括で削除する方法
  2. エクセルVBAでセル内の文字列を操作して全角文字を半角に一括変換する方法
  3. エクセルVBAでチェックボックスのONOFFでボタン表示を変える方法
  4. エクセルVBAでセル内文字列の前後の空白をまとめて一括で削除する方法
  5. エクセルVBAのReplace関数でセルの文字列内の空白をまとめて一括削除する
  6. エクセルVBAのCountA関数でシート内の空白行をまとめて一括で削除する方法
  7. エクセルVBAで空白行を削除しないでまとめて一括非表示で隠す方法
  8. エクセルVBAで条件付き書式を使わず1行おきに色を付ける方法 (本記事です)
  9. エクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法
  10. エクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法
レクタングル大336×280
レクタングル大336×280

シェアする

  • このエントリーをはてなブックマークに追加

フォローする