C#
Excel
VBA
Borders
LineStyle

VBA(C#)でExcelの条件付書式の罫線の取得・設定に失敗する

More than 1 year has passed since last update.


課題

エクセルの条件付き書式をコードに落とし込むために

現在の情報を取得しようとしたところ、LineStyleの取得の部分で

以下のようなエラーが発生してしまいました。

実行時エラー '1004':

Boder クラスの LineStyle プロパティを取得できません。

以下のコードで再現しました。

Sub Test()

Dim fc As FormatCondition
Set fc = Range("A1").FormatConditions(1)
MsgBox fc.Borders(xlEdgeTop).LineStyle
End Sub


原因

通常のセル(Range)に罫線をセットする場合、以下の場所が選択できます。

名前

説明

xlDiagonalDown
5
範囲内の各セルの左上隅から右下への罫線

xlDiagonalUp
6
範囲内の各セルの左下隅から右上への罫線

xlEdgeBottom
9
範囲内の下側の罫線

xlEdgeLeft
7
範囲内の左端の罫線

xlEdgeRight
10
範囲内の右端の罫線

xlEdgeTop
8
範囲内の上側の罫線

xlInsideHorizontal
12
範囲外の罫線を除く、範囲内のすべてのセルの水平罫線

xlInsideVertical
11
範囲外の罫線を除く、範囲内のすべてのセルの垂直罫線

参照: MSDN XlBordersIndex 列挙 (Excel)

しかし、条件付き書式における罫線は上下左右の4つしかありません。

ここで再現コードの

fc.Borders(xlEdgeTop).LineStyle

の部分に戻ると、xlEdgeTop は上記の表で 8 になるので、対応する Border がないために

値の取得ができないんですね。


解決

xlEdgeTop 等の列挙子を使わず、1~4の数字で指定すると取得できました。

fc.Borders(1).LineStyle

位置と数字は以下のように対応します。

位置


1


2


3


4

C# では型キャストが必要です。

using Excel = Microsoft.Office.Interop.Excel;

...

Excel.FormatCondition fc = ...;
var border = fc.Borders[(Excel.XlBordersIndex)1];


参考

Excel Q&Aサロンで回答いただきました。ありがとうございました。


余談

一応解決はできたんですが、なにかもっと正しい方法があるような気もします。

ご存知の方はぜひコメントください。