• ベストアンサー

「Columns("A:C")」の列文字を数字にして表記したい

こんばんは。早速ですが質問します。 『Columns("A:C").ColumnWidth = 3』 の("A:C")の部分(列文字)を数値にしたいのですが 『Columns(1 & ":" & 3).ColumnWidth = 3』 だと 「アプリケーション定義またはオブジェクト定義のエラーです。」になります。 『Columns(1).ColumnWidth = 3』 ならエラーになりません。 どうやって数字で表示すればいいでしょう? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 そこで、数値処理する場合は、こういう形にするしかないのかなって思います。

uiyiuq
質問者

お礼

みなさんありがとうございます。 大変参考になりました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

やってみると 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

uiyiuq
質問者

お礼

ありがとうございます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

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

uiyiuq
質問者

お礼

ありがとうございます。

関連するQ&A