こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!
全10回の連載でエクセルのデータ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。今回はその第8回目です。
前回お伝えした「空白行をまとめて一括で非表示にする方法」に続いて、今回は「条件付き書式を使わず1行おきに色を付ける方法」するテクニックをご紹介します。
大量のデータが入った表などをエクセルで表示させると、背景色が一色の場合どこまでデータを見ていたのかわかりずらいことがあります。そこで1行おきに色をつけて見やすくするというアイデアがあると思います。
Ctrlキーを使って1行おきに選択していく・・・う~ん手間がかかりますよね。数十行ならまだしも数百行になったらとてもやってられませんよね。
そこで条件付き書式とエクセルの数式を組み合わせるテクニックがあるのですが、いくつかの手順を踏まなければならないし、複数人で作業するときにそれぞれの人に教えなればならず不便です。
そんなわけで複数人での作業を考えて、エクセルVBAで1行おきに色をつけるプログラムを作っていきましょう。ボタン1発でできれば作業も早く終わるし、操作ミスなどで起こる間違いも少なくなりますからね。
目次
1行おきに色をつけるプログラムの作成
前回使用した一括変換プログラムにボタンを追加する
毎度のことですが作業効率を考え、前回使ったプログラムを再利用します。デスクトップにある「一括変換.xls」を開きます。
UserFrom1を開いて新たに「1行おきに色をつける」ボタンを追加します。ボタンの表示名はプロパティウィンドウのCaptionで変更できます。ユーザーフォームやボタンの大きさは見やすいように調整して下さい。
またまたボタンが増えました。まだ増える予定ですっ。
サンプルコードを貼り付ける
「1行おきに色をつける」ボタンをダブルクリックしてコードウィンドウを開きます。「CommandButton5_Click()」の下に以下のコードを貼り付けます。
このプログラムコードは「セル内の文字列に含まれる改行を一括で削除する方法」で作ったコードをコピーして一部を修正して使っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
'1行おきに色をつける Private Sub CommandButton5_Click() Dim tmp Dim Col As Long Dim Row_Start As Long Dim Row_End As Long Dim y As Long '最終行を取得 With ActiveSheet.UsedRange Row_End = .Rows(.Rows.Count).Row End With 'キャンセルが押された場合は処理を終了する On Error GoTo myError '処理開始行 Row_Start = InputBox("開始行を数字で入力してください") On Error GoTo 0 For y = Row_Start To Row_End Step 2 '行に色をつける Rows(y).Interior.Color = RGB(200, 200, 200) Next y myError: End Sub |
プログラムコードの解説
重要なポイントに要点を絞って説明していきます。今回の「1行おきに色をつけるプログラム」はワークシート全体に対して処理をするプログラムです。そのため列を指定するInputboxは必要ないのでコードから削除しています。
Inputbox関数を使って開始行を入力させる
これまでの記事では開始行をプログラムコードの中に書いていました。しかし今回のプログラムは1行ごとに色をつけるプログラムですので、開始行が固定だと使い勝手が悪いため、開始行を入力させるようにします。
InputBox関数を使用するとダイアログボックスを表示させることができます。引数には表示させるメッセージを指定します。
上記のプログラムのコードの16行目から20行目の処理です。
1 2 3 4 5 |
'キャンセルが押された場合は処理を終了する On Error GoTo myError '処理開始行 Col_Start = InputBox("開始行を数字で入力してください") On Error GoTo 0 |
変数Col_StartにInputBoxで入力した開始行の数字を入れるようにしています。InputBoxのキャンセルが押された場合や、数字以外の文字列が入力された場合にエラーにならないように、On Errorステートメントを使っています。
これは以前の記事「セル内の文字列を操作して全角文字を半角に一括変換する方法」で紹介しましたので参考にしてみてください。
InputBoxに入力した開始行ですが、変数Row_Startに入れるようにしていることはさきほどご説明しました。この変数Row_StartですがLong型で宣言しているので数字以外の値が入るとエラーになります。
そこで数字以外が入力されたときはOn Error GoToでプロシージャの最後にあるラベルmyError:までスキップさせているというわけです。
Stepを使って一行おきに処理をする
For文でStepを使うことで間隔を空けて処理をさせることができます。今回の場合はstep 2とすることで1行おきに処理させています。開始行が2なら2,4,6,8,10と変数が2つずつ増加して最終行まで繰り返し処理をします。
Interior.Colorプロパティで行に色をつける
RGB値には数字を指定します。Rは赤、Gは緑、Bは青になりますので、赤にしたい場合はRGB(255,0,0)と指定します。255が最大値です。
今回のプログラムではグレーを指定しています。RGB値は下記のようなカラーチャートを紹介しているサイトを参考にしてみてください。
また次のようにしてエクセルが独自で持っているカラー番号を指定することもできます。
1 黒
2 白
3 赤
4 緑
5 青
例えば青色に網掛けしたい場合は以下のようにします。
Rows(i).Interior.ColorIndex = 5
エクセルのカラーインデックスは下記サイトを参考にしてみてください。
1行おきに色をつけるプログラムの動作確認
それでは実際に出来上がったプログラムを動かしてみましょう。
ワークシートの起動ボタンを押します。フォームが表示されたら「1行おきに色をつける」ボタンを押します。
処理を開始したい行を入力します
2行目から1行おきにグレーの色がつきました、
まとめ
いかがでしたか?今回の内容をまとめます。
- InputBox関数で開始行を入力させる
- Interior.Colorプロパティで行に色をつける
- For文でStepを使うことで1行おきに処理を実行できる
時短のおつまみ
今日のおつまみはコレです!
エクセルで便利なショートカットキーです。選択されたセルの1つ上のセルをコピーしてペーストしてくれます。
普通だと1つ上のセルを選択してコピー。次の行のセルに移動してペーストと2段階の操作が必要ですが、このショートカットキーを使えば1発でできるというエコなワザですっ。
それではまた~。
[連載記事 全10回] エクセルVBAで文字列変換ツールを作る
全角半角の変換をしたり、空白行や改行を削除したり。データ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。1つの記事で1機能ずつ追加していきますので、少しずつVBAを学びながら進めることができます。
- エクセルVBAでセル内の文字列に含まれる改行を一括で削除する方法
- エクセルVBAでセル内の文字列を操作して全角文字を半角に一括変換する方法
- エクセルVBAでチェックボックスのONOFFでボタン表示を変える方法
- エクセルVBAでセル内文字列の前後の空白をまとめて一括で削除する方法
- エクセルVBAのReplace関数でセルの文字列内の空白をまとめて一括削除する
- エクセルVBAのCountA関数でシート内の空白行をまとめて一括で削除する方法
- エクセルVBAで空白行を削除しないでまとめて一括非表示で隠す方法
- エクセルVBAで条件付き書式を使わず1行おきに色を付ける方法 (本記事です)
- エクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法
- エクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法