2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-16

課題

エクセルの条件付き書式をコードに落とし込むために
現在の情報を取得しようとしたところ、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サロンで回答いただきました。ありがとうございました。

余談

一応解決はできたんですが、なにかもっと正しい方法があるような気もします。
ご存知の方はぜひコメントください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?