店員も客も斜め上を行くデパートの福袋

こんばんは。早速ですが質問します。

『Columns("A:C").ColumnWidth = 3』

の("A:C")の部分(列文字)を数値にしたいのですが

『Columns(1 & ":" & 3).ColumnWidth = 3』
だと
「アプリケーション定義またはオブジェクト定義のエラーです。」になります。

『Columns(1).ColumnWidth = 3』

ならエラーになりません。
どうやって数字で表示すればいいでしょう?
よろしくお願いします。

A 回答 (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

そこで、数値処理する場合は、こういう形にするしかないのかなって思います。
    • good
    • 2
この回答へのお礼

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

お礼日時:2009/05/12 00:12

やってみると


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
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2009/05/12 00:11

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
    • good
    • 6
この回答へのお礼

ありがとうございます。

お礼日時:2009/05/07 23:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A