質問: Borders__.Item(Index) End Property ``` みたいな感じで引数(インデクス)の有り無しで返すオブジェクトが 変更出来たらなぁ... っと思ったのですがうまく行きませんでした.....。 ### 補足情報(FW/ツールのバージョンなど) Excel 2013以降 Win10 64bit Home と Pro
回答: 書かれているコードから、オーバーロードのようなことをしたいのだと思われます。 VBAではオーバーロードはできないですが、無理矢理やるとしたら以下のような感じでしょうか。 * 引数を省略可能・返り値の型をObject型にして、引数の有無で返すオブジェクトを変更する(例:Worksheet.OLEObjectsメソッド) * 複数としても単数としても使えるクラスを作成する(例:Rangeオブジェクト) `Copy`をどのように使っているかわかりませんが、`Range.Value(xlRangeValueXMLSpreadsheet)`で代用できないでしょうか? RangeのValueプロパティは引数を指定できるプロパティで、`xlRangeValueXMLSpreadsheet`を指定すると、セルの値、罫線、色などの基本的な情報を取得、設定することができます。 (条件付き書式などExcelに依存した機能はダメですが、単純な書式なら取得、設定できます) ``` Sub Sample() 'コピー元のセル Dim srcRng As Excel.Range Set srcRng = Range("A1") '適当に書式設定 With srcRng .Interior.Color = vbYellow .Font.Color = vbRed .BorderAround XlLineStyle.xlContinuous, xlThin .Value() = "ABC" End With '貼り付け先のセル Dim destRng As Excel.Range Set destRng = srcRng.Offset(2) '書式などコピー(要サイズ合わせ) destRng.Value(xlRangeValueXMLSpreadsheet) = _ srcRng.Value(xlRangeValueXMLSpreadsheet) 'xlRangeValueXMLSpreadsheet ' = Excel.XlRangeValueDataType.xlRangeValueXMLSpreadsheet ' = 11 End Sub ```