先日のセミナーに参加された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メソッド自体、あまり認知度が高くありませんけど、これは困ったバグですね。
【追記】2022/02/01先日、VBAのTipsで、新しく罫線についてまとめていたとき、ふと、このバグを思い出しました。試してみたら、直ってました。まぁ、これはショーストッパーに近いですからね。早めに直したのではないでしょうか。ちなみに、VBAで罫線を操作するポイントについては、下記コンテンツをご覧ください。