• ベストアンサー

VBAで複数範囲の選択

F5:F16、F19:F33、H5:H16、H19:H33・・・・・ と複数の範囲を選択状態にしたいと思っています。 選択エリアが300個近くあるため、 Union(Range(F5:F16,F19:F33,H5:H16,H19:H33・・・・・  )).select と書くのが面倒なのですが、 Forとか使ってうまく処理できないでしょうか? 初心者ですがよろしくお願いいたします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

選択エリアが300個って、、、 Sub Test() Dim r As Range, myCol As Integer  With ActiveSheet   Set r = .Range(.Cells(5, 6), .Cells(16, 6))    For myCol = 8 To 100 Step 2      Set r = Union(r, .Range(.Cells(5, myCol), .Cells(16, myCol)))    Next myCol   r.Select  End With End Sub もし数式のセルや文字のセルを除いた「数値」だけのセルを選択したいとかなら、SpecialCells を使った方が効率が良いと思いますが、、、

chaobe
質問者

お礼

ありがとうございます。 上記の通りに実行してみましたが、 6列目、8列目、10列目、という選択ではなく 何故か6列目以降100列目まで全て選択になってしまいました。 こちらの環境の問題でしょうか? しかし、この方法でも、修正すればうまくいけそうです。 SpecialCells含め、もう少し勉強しつつ試してみます。 ありがとうございます。

chaobe
質問者

補足

これがまさしく自分のやりたかった方法です。 うまくいきました。 ありがとうございました!

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#1です。 > 何故か6列目以降100列目まで全て選択になってしまいました。 Excel2000で検証してますが、こちらでは飛び飛びに選択されます。 範囲の中に結合セルがあると、その部分はまとめて選択されますが、、、 Excelのバージョンで動作が違うのかなぁ、、、

chaobe
質問者

補足

あ!すいません、結合セルが混ざってました。 失礼いたしました。 修正したらちゃんと選択できました。 ありがとうございます!!

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 その範囲に [挿入]-[名前]-[定義] で名前を付けとけば良いのでは? 仮に WorkCell とでも付けたのなら   Range("WorkCell").Select で済みますよ。ただ、Select はアクティブシートでないと失敗しま すので、WorkCell のシートをアクティブにしておく必要があります。 セルではなくてエリアが300もあるなら、可能がどうか検証してません ので自信なしです。 余談ですが、ご質問にある Union は不要です。 > Union(Range(F5:F16,F19:F33,H5:H16,H19:H33・・・・・ >  )).select Range("F5:F16,F19:F33,H5:H16,H19:H33").Select

chaobe
質問者

お礼

この方法でもうまくできそうです。 ありがとうございます。 Union、不要だと思ったんですが、 Range(F5・・・・・・・と延々と1行で書いていくと 長すぎてエラー(?)になってしまい、 何行かに分けて書かざるをえなくなってしまいました。 その為、Unionでくっつけて、という処理にしてみました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 断片的に、そのテクニックだけをお聞きになっているようですが、 Union(Range(F5:F16,F19:F33,H5:H16,H19:H33・・・・・  )).select 実際に、このようなUnion で、全部繋いで、Selectしたり一気に処理するようなものは、実験でもなければ、めったにあるものではないと思うのですが。 例えば、そのデータを削除するにしても、書式を変えるにしても、ループで、一列ずつでも処理すればよいのではありませんか? Sub ColumnLoop() Dim i As Long    For i = 0 To 94 Step 2 'CVまで     With Range("F5").Offset(, i)      .Resize(12).Select      .Offset(14).Resize(15).Select     End With    Next i End Sub

chaobe
質問者

補足

質問が言葉足らずで、申し訳ありません。 各グループごとに、1ヶ月単位で1つのシートにデータを入力してもらいたいのですが、 4つの入力項目があり、1~15日、16~31日と2段に分かれている為、1人につき8つの選択範囲があり、1グループ40人で、計320箇所の選択範囲になっています。 入力作業をするのがグループの責任者で、PC操作に不慣れな者が多い為、「消去する時にいちいち1つずつ消去するのは面倒くさい」、しかし、入力内容を間違ってクリアしてしまった場合や、クリアした後に気が変わった場合に備えて、「元に戻す」ボタンで戻せるようにしておいて欲しいという希望があり、VBAでのクリアではなく、範囲選択までをVBAでやって、「delete」キーで消去するようにしようかと考えました。 1人につき9列使用しているのですが、選択するのは隔列ではなく、 実際には1列目、3列目、5列目、9列目、となるので、 i = 1~20までの範囲で Range(Cells(5, i * 9 - 8),Cells(19, i * 9 - 8)) Range(Cells(5, i * 9 - 6),Cells(19, i * 9 - 6)) Range(Cells(5, i * 9 - 4),Cells(19, i * 9 - 4)) Range(Cells(5, i * 9),Cells(19, i * 9)) (上記は20名、1~15日分) の範囲を選択するように設定したいのです。 うまく説明できていないかもしれませんが、状況お分かりいただけましたでしょうか? 皆様に頂いた回答でなんとかうまくできそうです。 ありがとうございます。

関連するQ&A