[ HOME ] [ BACK ] [ NEXT ]

犬でもわかるExcelVBA講座

§10 色を選択できるようにする。

 久しぶりになってしまいました・・
更新があまりにも遅いので
もうみてくれてる人がいるのかどうかもわからないのですが一応がんばります。

前回は選択されたセルに対して赤色に変更するプログラムを紹介しましたが、
赤色ばっかりではつまらないので色を選択できるようにしてみましょう。
前回のコードを見てみましょう。
Sub ColorRed()
'
' Macro1 Macro
' マクロ記録日 : 2001/9/02 ユーザー名 : れいぞー
'

'
    With Selection.Interior
        .ColorIndex = 3
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
    End With
End Sub

では、ボタンを押したときに色を選択するようにするにはどうすればいいでしょう?
今回はドロップダウンを使うことにします。
本来ならユーザーフォームを使うところですが5.0・95の互換も考えて
今回はダイアログシートを使用します。
(多分今回で5.0&95の互換は最後になるかもヘルプにも載っていないし混乱の元になりそうなので・・)

まず、シートタブ(どれでもいい)の上で
右クリック⇒挿入(I)⇒MS Excel5.0ダイアログを選択してOKを押してください。
※このときシート名を『Dialog1』から『Dlg_Color』に変更してください。
(シートタブをダブルクリックすると変更できます。)

ダイアログシートとフォームというツールバーが現れます。
(ツールバーが現れなかったら表示⇒ツールバー⇒フォームで表示させて下さい)

その中の『コンボボックス』というのを使ってみます。
コンボボックス』とは右側の矢印をクリックすると選択肢がでろーっと出て来てユーザーは
その選択肢から選択できるようにするものです。
コンボボックスをクリックしてダイアログシート上で左上から右下に対角線状にドラッグすると
下のようになります。


コンボボックスは選択された行の番号を調べることができます。
今回はその行番号を利用してみます。

色のインデックス番号は下のようになっています。

      

この並びと同じように     (イメージ図↑)
コンボボックスの選択肢を出してあげればその番号が直接使えます。

早速やってみます。
まずSheet1にA1から↓の図の順番でいろの名前を入力しておきます。

ダイアログシートのコンボボックスを右クリック⇒コントロールの書式設定で
コントロールタブの入力範囲(I)を下の図のように設定します。

ここに設定した範囲がコンボボックスのリストになってでろ〜っと出てきます。


次にダイアログを表示させるには↓
DialogSheets("シート名").Show とします。

さっきシート名を変更したので
DialogSheets("Dlg_Color").Show となります。

プログラムの流れを考えて見ましょう。

1  ボタンが押されるとダイアログボックスが表示する。
2  まずユーザーが『OK』を押したのか『キャンセル』を押したのかを調べる。
3  『OK』だった場合ユーザーが選択した行番号を調べる。
4  選択された行番号を使ってセルの色を変更する。

こんな流れになると思います。

1 は DialogSheets("Dlg_Color").Show です。
しかしこれだけでどうやってOK・キャンセルを調べるのでしょうか?
実はダイアログボックスは『OK』が押されると『True』
『キャンセル』が押されると『False』を返してきます。

この『返す』という表現方法が、実に混乱を招くというか、
プログラミングが不可解になるのですがほかにいい表現がないので仕方なく使うことにします。

3 の『OK』だった場合は
IF文(IF Then Elseステートメント)を使います。
If 条件式 Then ←もしも 条件式 がTrueなら処理1を実行する。Falseなら実行しない。

   処理1

End IF

OKが押されるとDialogSheets("Dlg_Color").Show はTrueになるので上の式に当てはめると
If DialogSheets("Dlg_Color").Show Then

  コンボボックスの選択された行番号をしらべて
  セルの色を変更する。

End If

こうなります。↑

条件式というくらいなので式っぽくかくとこうなります。↓
If DialogSheets("Dlg_Color").Show = True Then

  コンボボックスの選択された行番号をしらべて
  セルの色を変更する。

End If

条件分岐はできました。
コンボボックスの選択されたアイテムが何番目なのかを調べるにはListIndexプロパティーを使用します。
4  DialogSheets("Dlg_Color").DropDowns("ドロップ 4").ListIndex
このDropDowns("ドロップ 4")という名前をどうやって調べたかというと・・
コンボボックスを選択すると数式バーに出るんです。↓

(入力するときは半角全角を気をつけてください。ドロップは全角カナ 4は半角その間のスペースは半角) 
1から4までをまとめると↓こうなります。
Sub Change_Color()

   If DialogSheets("Dlg_Color").Show Then
    'もし『OK』ボタンが押されたら

     Selection.Interior.ColorIndex = DialogSheets("Dlg_Color").DropDowns("ドロップ 4").ListIndex
    '選択されているセルの色をダイアログボックス(Dlg_Color)のドロップダウンの行番号に設定する。

  End If

End Sub

なんだか
     Selection.Interior.ColorIndex = DialogSheets("Dlg_Color").DropDowns("ドロップ 4").ListIndex
    '選択されているセルの色をダイアログボックス(Dlg_Color)のドロップダウンの行番号に設定する。

の部分が長ったらしくてうっとーしーですね。

ちょっと変数というのを使ってさっぱりさせて見ます。

ダイアログボックス(Dlg_Color)のドロップダウンの行番号をい一度、変数に入れておいて
セルの色を、その変数で指定してみます。
Sub Change_Color()

  Dim intColor As Integer
  If DialogSheets("Dlg_Color").Show Then
    'もし『OK』ボタンが押されたら

    intColor = DialogSheets("Dlg_Color").DropDowns("ドロップ 4").ListIndex
    'intColorという変数にダイアログボックス(Dlg_Color)のドロップダウンの行番号を入れておく。

    Selection.Interior.ColorIndex = intColor
    '選択されているセルの色をintColorという変数で設定する。

  End If

End Sub

どうですか?だいぶすっきりしたと思いません?
好みの問題なんですがわかりやすいコードを書いておけば
あとで機能などを追加したくなったときなどに便利です。
人に見せるときも恥ずかしくなくてよいです。
ちなみに私のコードはぐちゃっぐちゃで、ひとに見せられません。
そうならないように今のうちからきれいな見やすいコードを書く癖をつけておくといいでしょう。

話がそれましたが上のコードをボタンに登録して実行してみてください。
どうです?
そうとうプログラムっぽくなったと思いません?

とりあえず今回はこの辺で・・・

■■■■■■■■■■■■ まとめ ■■■■■■■■■■■■■

 
1 IF Then Elseステートメントは条件分岐
2 ダイアログボックスは『OK』が押されると『True』『キャンセル』が押されると『False』を返してきます。
3 コンボボックスの選択されたアイテムが何番目なのかを調べるにはListIndexプロパティーを使用する。

今回は、ボタンのクリックイベントにより選択範囲のセルの色を変更する方法を説明しました。
次回は今回、軽く触れた変数について詳しく説明します。


■このページはリンクフリーです。どんどんはってください。特に連絡する必要もありません。
■ご連絡いただければ、こちらからもリンクします。出来れば下のバナーを使ってください。
■ご意見・ご要望はこちらからお願いします。