- ベストアンサー
「Columns("A:C")」の列文字を数字にして表記したい
こんばんは。早速ですが質問します。 『Columns("A:C").ColumnWidth = 3』 の("A:C")の部分(列文字)を数値にしたいのですが 『Columns(1 & ":" & 3).ColumnWidth = 3』 だと 「アプリケーション定義またはオブジェクト定義のエラーです。」になります。 『Columns(1).ColumnWidth = 3』 ならエラーになりません。 どうやって数字で表示すればいいでしょう? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 私も、前々から、これに関しては疑問に感じていました。 それは、VBAのワークシートの引数の元のソース部分は、数値処理なのに、Columns は、文字によって入れることに成り立ちます。確かに、変数として扱うには、"A:C" は上手くないのは同感です。Columnsの引数は、index で、Rows との整合性がなくてはならないのに、その統一が取れていません。これは、設計上のミスかもしれません。 最初に、test1 の場合。 Sub test1() With ActiveSheet .Range(.Columns(1), .Columns(3)).Select End With End Sub このような形は、一般的ではありません。それは、Rangeの内部の引数にオブジェクトを入れるということは、納まりがよくないからです。基本的に、親オブジェクトから、プロパティとして一続きなっていなければなりません。 Sub test2() With ActiveSheet .Cells(1, 1).Resize(, 3).EntireColumn.Select 'Cells(1, 1).Resize(, 3).ColumnWidth = 20 '列幅を20にする End With End Sub そこで、数値処理する場合は、こういう形にするしかないのかなって思います。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
やってみると Columnsの複数列指定の場合A:Cのようにすべきで1:3はエラーです。 1つの列の場合は数字指定が出来ます。 Application.ReferenceStyle = xlR1C1が関係してないかと思って やってみましたが、関係ないようです。 不統一な感じで、理由不明ですが、やむを得ません。 Sub test01() Columns("A:C").ColumnWidth = 15 End Sub Sub test02() With Application .ReferenceStyle = xlR1C1 End With Columns(4).Select Selection.ColumnWidth = 10 End Sub Sub test03() With Application .ReferenceStyle = xlA1 End With Columns(6).Select Selection.ColumnWidth = 10 End Sub
お礼
ありがとうございます。
- mitarashi
- ベストアンサー率59% (574/965)
Range(Columns(1), Columns(3)).ColumnWidth = 10 が正解でしょうが、下記でも出来ます。 Range(Cells(1, 1), Cells(1, 3)).EntireColumn.ColumnWidth = 20 Range(Cells(1), Cells(3)).EntireColumn.ColumnWidth = 30
お礼
ありがとうございます。
お礼
みなさんありがとうございます。 大変参考になりました。