古庄 潤(ふるしょう じゅん)

本業はエンジニア。ICに様々な機械をつなぎ,電流やら電圧を測定する。もちろん,これらの測定器もVBAでコントロールし,取り込んだデータもマクロで処理する。人呼んで,マクロの鬼軍曹!

診断(14)
ケイ線の色を変える

「先生,浮かない顔ですね」
「おぉ,ゲール君,PCが壊れたんじゃ」
「えぇ!それじゃあ仕事にならないじゃないですか」
「それは大丈夫。予備のPCがある」
「そうでした。先生はコレクタでしたね。で,どう壊れたんですか?」
「ハードディスクの不良のようじゃ。3回に1回しか立ち上がらん。最近,その兆候があったから,処置しようと思っていたんじゃが」
「それじゃあ,お気に入りの写真もパー?」
「いや,それはパーテーションを切って,Dドライブに保存してあるから大丈夫」
「マクロは?」
「きれいさっぱり,ない」
「Dドライブは大丈夫なんでしょう?」
「いや,それは,その…そこだけ,変なんじゃ」
「怪しい…。メールは?」
「それも,メールソフトをDドライブにインストールしてあるから大丈夫。すべてサルベージして新しいディスクに移した」
「じゃあ,ほとんど問題無いじゃないですか」
「それが…ゲール君の『お気に入り』が消えてしもうた」
「なんですと~!!」
「どうやら,そのあたりのセクターがいかれたようじゃ」
「どうしてくれるんですか。苦労して集めた私の『お気に入り』」
「わしの『お気に入り』は,サルベージできたから良しとしよう」
「殴りますよ」
「次の方,ど~ぞ~」

今月の相談
「ケイ線を明るい色に変えるように指示されました。黒のケイ線は,PowerPointに貼り付けると,暗い背景にまぎれて見えないらしいので。楽勝!と思ったのですが,Excelの操作では,フォントやセルの色のように変更できないんですね。マクロでなんとかならないでしょうか?」

「へい!お安い御用で!」
「おや,先生,けつが軽いですね」
「ん? それは君のことだ。フットワークが軽いと言ってくれたまえ」
「まあまあ。それで,解決できるんですか?」
「うむ,わしにも経験があるが,通常の操作で,既存のケイ線の色を変更することはできない。イライラさせられたが仕方ない。それでマクロを作った覚えがある」
「じゃあ,ちょちょいのちょいですね」
「あぁ,暗い背景に紛れない色だから水色にしてみるかな?」
「お願いします」
「はい,できました」
「はやっ!」

Sub BORDER_COLOR_CHANGE()
  Dim myFile_Name As Variant
  Dim i As Integer
  Dim j As Integer
  Dim myTARGET_BOOK As Workbook

  myFile_Name = Application.GetOpenFilename _
    ("Excel ファイル (*.xls), *.xls", MultiSelect:=True)  '<---(1) 

  If IsArray(myFile_Name) = False Then  '<---------------------(2)
    Exit Sub
  End If

  For i = LBound(myFile_Name) To UBound(myFile_Name)  '<-------(3)
    Set myTARGET_BOOK = Workbooks.Open(myFile_Name(i))  '<-----(4)

    For j = 1 To myTARGET_BOOK.Worksheets.Count  '<------------(5)
      myTARGET_BOOK.Worksheets(j).UsedRange.Borders.ColorIndex = 8
                                                    '↑--------(6)
    Next j

    myTARGET_BOOK.Close  '<------------------------------------(7)
  Next i

  Set myTARGET_BOOK = Nothing  '<------------------------------(8)
End Sub
リスト1●ケイ線の色を変更するマクロ

 まず,GetOpenFilenameメソッドで,処理するファイルのフルパス+ファイル名を取得します(1)。MultiSelectオプションをTrueにしているので,複数のファイルを選択できます。取得したファイル名は,配列になって変数myFile_Nameに格納されます。

 「ファイルを開く」ダイアログボックスで,ユーザーが[キャンセル]ボタンをクリックした場合,変数myFile_Nameは配列になりません。これを利用して,ユーザーの操作を判断します(2)。myFile_Nameが配列でない場合は,直ちにプロシジャを抜けます。

 (3)は,(1)で取得したファイルの数だけ繰り返すループです。ブックを開いてオブジェクト型変数に代入します(4)。

 さらに,開いたブックのシートの数だけ繰り返すループが(5)です。ループの中では,シート内で使用されているセル(UsedRange)のケイ線の色を変更します(6)。

 ケイ線の色を変更したブックを閉じます(7)。SaveChangesオプションを省略しているので,実行時には保存を確認するメッセージボックスが表示されます。マクロ側で保存してから閉じたい場合は,SaveChangesオプションをTrueにします。最後に,オブジェクト型変数を空にします(8)。

「先生,ケイ線を取得するのは,Bordersですか?」
「そうじゃ。Bordersプロパティで,Bordersオブジェクトを取得する。Bordersオブジェクトには,左右上下斜めのケイ線が含まれておる。個別に取得する場合は,表1のようにBordersプロパティのインデックスに,それぞれのケイ線を意味する引数を指定する。最後の二つのように,セルとセルの間のケイ線を一括して取得する便利な引数もあるぞよ」

表1●Bordersプロパティとその引数
Bordersプロパティと引数 内容
Borders(xlEdgeTop) セルの上のケイ線
Borders(xlEdgeBottom) セルの下のケイ線
Borders(xlEdgeLeft) セルの左のケイ線
Borders(xlEdgeRight) セルの右のケイ線
Borders(xlDiagonalDown) セルの右下がりの斜めのケイ線
Borders(xlDiagonalUp) セルの右上がりの斜めのケイ線
Borders(xlInsideHorizontal) セルとセルの間の横のケイ線
Borders(xlInsideVertical) セルとセルの間の縦のケイ線

「先生,早速使ってみましょう」
「そうじゃな。おりゃ」

図1●オリジナルのシート
図1●オリジナルのシート
[画像のクリックで拡大表示]

図2●マクロでケイ線の色を変更したシート
図2●マクロでケイ線の色を変更したシート
[画像のクリックで拡大表示]