• ベストアンサー

ExcelのマクロでColumnsに変数を使いたい

久しぶりにExcelのマクロについて質問させてください。 Rows(ActiveCell.Row & ":10").RowHeight = 0 これで、例えばセルB3を選んだ状態で このマクロを実行すれば 行3~10の行幅が0になりますよね。 しかし 同じようにセルB3を選んだ状態で 列B~Jの列幅を0にしようとして Columns(ActiveCell.Row & ":10").ColumnWidth = 0 を実行しても 実行時エラー'1004'というエラーが表示されます。 もちろん Range(ActiveCell, Cells(1, 10)).ColumnWidth = 0 とすれば、目的そのものは達成できるのですが Rowsがすっきりしているのに比べて どうも分かりやすいとは言えない気がします。 特に、実際には単純に「10」ではなく 変数を使って列の終点を指定したいだけに Columnsを使えるならそれに越したことはないと思うのです… 以上、マクロに詳しいかたには どうでもいいことなのかもしれませんが もしColumnsを使うことができるのでしたら その方法をお教えいただければ幸いです。 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

単純には、  Columns(Chr(ActiveCell.Column + 64) & ":J").ColumnWidth = 0 と、なります 列は数字ではなく"A"などのアルファベットなので ActiveCell.Column で取得した列数をChrでアルファベットに変換します "A"=Chr(65)ですので、65の部分を変数にすれば良いと思います

niftynejp
質問者

お礼

"A"=Chr(65) というご説明から Columns(Chr(ActiveCell.Column + 64) & ":J").ColumnWidth = 0 というお答え、 非常に分かりやすかったです。 ありがとうございました。 早速使わせていただきます。

その他の回答 (1)

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

>ActiveCell.Row の例が出ていて、これに惑わされて、気づかなかったが、連続した行の指定はRange("1:3").RowHeight= ですが 列の指定はColumns("A:D").ColumnWidth= のように列番号(=名称は列番号だが、実質列記号。A,B,C・・・)でしないとならないのです。 Columns("1:4").ColumnWidth= のような書き方は認められていません。なぜか小生は不思議ですが。 Cellsの場合はCells(1,1)とCells(1、”A")が認められているのにと思います。 またいつもD->4、4->Dのような変換の関数が無いのか守勢は不満ですが、無いのでAのJis文字コードが65なので64を足す引くとかでやったりしてます。 ーー そのほかに右端列が少なければ(下記はA2をアクチブにしてテストした痕跡を残してありますが。) Sub test01() MsgBox ActiveCell.Row y = Array("", "A", "b", "c", "d", "e", "f", "g", "h", "I", "j") Columns(y(ActiveCell.Row) & ":" & y(10)).ColumnWidth = 0 'Columns("2:10").ColumnWidth = 10 'Columns("2:10").ColumnWidth = 0 'Columns(2 & ":10").ColumnWidth = 0 Columns(ActiveCell.Row & ":10").ColumnWidth = 0 End Sub や A2をアクチブにして Sub test02() Columns(Chr(ActiveCell.Row + 64) & ":" & Chr(10 + 64)).ColumnWidth = 0 End Sub でやると、実質、列の非表示になりました。 >行幅が0になりますよね は行高の間違いでしょう。

niftynejp
質問者

お礼

ご回答、ありがとうございました。 imogasiさんもColumnsに数字が使えないこと 不思議に思われているのですね。 詳しいかたでも同じ思いだと知り なんだか、安心しました。 これからはChrと64をがんばって使いこなすようにします。 またよろしくお願いします。