マクロで罫線を引けないバグ


先日のセミナーに参加されたKさんに教えてもらいました。話を聞いたとき、正直「んなわきゃ~ないだろ」って思いました。でも、試してみると確かにおかしいし、事務所で再度確認しても、やはり変。どう見てもバグです。本当にありがとうございました。

VBAのバグです。手動操作では問題ありません。

RangeオブジェクトのBorderAroundメソッドは、指定したセルまたはセル範囲の周囲に罫線を引く命令です。書式は次の通り。

Range.BorderAround LineStyle, Weight, ColorIndex, Color, ThemeColor

引数はすべて省略可能ですが、すべて省略すると何も起こりませんので、Weightくらいは指定した方がよろしいかと。それぞれの引数は、次の意味です。

引数 説明
LineStyle 罫線の種類を指定します
Weight 罫線の太さを指定します
ColorIndex 罫線の色をカラーパレットのインデックス番号指定します
Color 罫線の色を示すRGB値を指定します
ThemeColor テーマの色を配色テーマのインデックス番号で指定します

引数ThemeColorは、Excel 2007で追加された引数です。それ以外の引数は、Excel 2003でも使用できます。さて、Excel 2007で試してみましょう。

Sub Sample1()
    Selection.BorderAround Weight:=xlMedium
End Sub

何も問題ないですね。では、同じコードをExcel 2010で。

「なんじゃ、これ?」って結果です。

Excelのバグって、何となく想像できるんです。「あぁ、なるほど、あそこの機能がこう変わったから、ここに影響が出たんだな」みたいに。でも、これはちょっと信じられないです。しかも、3行または2列までなら問題ないようです。

おかしいのはBorderAroundメソッドです。個別に指定すれば問題ないです。

Sub Macro1()
    With Selection
        .Borders(xlEdgeLeft).Weight = xlMedium
        .Borders(xlEdgeTop).Weight = xlMedium
        .Borders(xlEdgeBottom).Weight = xlMedium
        .Borders(xlEdgeRight).Weight = xlMedium
    End With
End Sub

まぁ、BorderAroundメソッド自体、あまり認知度が高くありませんけど、これは困ったバグですね。