- ベストアンサー
ExcelVBA 異なる罫線の設定が取得できない
- VBAでセルの罫線の設定を取得する方法について質問です。セル単位で罫線が設定されている場合でも、別のセルには罫線が設定されていない場合があるので、それを判別したいと思っています。しかし、LineStyleで設定を取得すると、別のセルに設定されている罫線が取得されてしまいます。エクセルの仕様では、セルの見た目上の設定が取得されるのでしょうか?判別する良い方法はありますか?
- ExcelのVBAで、異なるセルに罫線が設定されている場合、それを取得する方法について質問です。セル単位で罫線が設定されている場合でも、別のセルには罫線が設定されていない場合があります。しかし、VBAのLineStyleで設定を取得すると、別のセルに設定されている罫線が取得されてしまいます。セルの見た目上の設定が取得されるのでしょうか?良い方法はありますか?
- ExcelVBAで異なるセルに罫線が設定されている場合、それを取得する方法についてお知恵をお借りしたいです。セル単位で罫線が設定されている場合でも、別のセルには罫線が設定されていない場合があります。しかし、VBAのLineStyleで設定を取得すると、別のセルに設定されている罫線が取得されてしまいます。セルの見た目上の設定が取得されるのでしょうか?判別する良い方法はありますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1です。 補足ありがとうございます。 xlEdgeTop、xlEdgeBottom、xlEdgeRight、xlEdgeLeft は接しているセルの罫線も考慮した値になります。 そのセルの罫線だけでしたらxlTop、xlBottom、xlRight、xlLeftです。 私は面倒なのでBorders(1)~Borders(6)としています。それぞれ、以下の様になっています。 Borders(1):左 Borders(2):右 Borders(3):上 Borders(4):下 Borders(5):左上から右下の斜め Borders(6):左下から右上の斜め また、上下左右の罫線だけでしたら以下の様に判断もできます。 If Range("B3").Borders.LineStyle = xlLineStyleNone Then MsgBox "罫線なし" Else MsgBox "罫線あり" End If Excel2010でもこの辺りは変わらないと思います。
その他の回答 (1)
- mt2015
- ベストアンサー率49% (258/524)
当方の環境(Excel2016)では再現できなかったので、 > 自分は「セルBに罫線が設定されていない」事を判別しようとしているのですが、LineStyleで設定を取得しても、セルAに設定されている罫線が取得されてしまいます。 この現象が発生するサンプルコードを提示してください。 また、Excelのバージョンも示してください。
補足
申し訳ありません。Excelのバージョンは2010です。 B2セルに罫線を設定した後、以下のマクロを走らせた所、結果は1、1、1、-4142と出力されました。表示上も、D4セルには罫線が表示されませんでした。 Sub test() Dim myCell As Range Set myCell = Range("B2") MsgBox myCell.Borders(xlEdgeBottom).LineStyle MsgBox myCell.Offset(1, 0).Borders(xlEdgeTop).LineStyle myCell.Copy myCell.Offset(0, 2) myCell.Offset(1, 0).Copy myCell.Offset(2, 2) MsgBox myCell.Offset(0, 2).Borders(xlEdgeBottom).LineStyle MsgBox myCell.Offset(2, 2).Borders(xlEdgeTop).LineStyle End Sub もしかして、Borders(xlTop)等で調べるのでしょうか? 間違えてそう入力したのですが、エラーが出ませんでした。ただヘルプには、BordersにはxlEdgeTop等しか書かれていませんでした。
お礼
>xlEdgeTop、xlEdgeBottom、xlEdgeRight、xlEdgeLeft は >接しているセルの罫線も考慮した値になります。 そうだったのですね。道理で想定した挙動と結果が異なる筈です。 >そのセルの罫線だけでしたらxlTop、xlBottom、xlRight、xlLeftです。 軽く試してみた所、このindexを使えば希望の結果が得られそうなので、頑張ってみます。 迅速で丁寧なご回答、誠にありがとうございました。