• 締切済み

VBAでの1列すべての指定方法について。

こんにちは。 VBAでの1列すべての指定方法についてお伺いします。 Columns(1).Select For Each MyObj In Selection x = MyObj Next というようにA列を検索させていますが、 Select使わないでRange("A:A")と言う形で 指定させようと思っています。 (シートの切り替えをしたくないので。) For Each MyObj In Range("A:A") x = MyObj Next しかし、任意の列に対して数列ごとに飛ばしながら 実行していますので、列の指定の方法は英数ではなく 数値で行いたいです。 For Each MyObj In Columns(1) x = MyObj Next と指定が出来れば良いのですが、上手く動きません。 1⇒Aと変換できる関数でも構いませんので、 良い指定方法あれば、宜しくお願い致します。

みんなの回答

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

#2です。補足します。ちゃんと例外処理すれば、こんな感じ。 Sub SampleCode()   Dim SH As Worksheet   Dim rngC   As Range   Dim rngTARGET As Range        Set SH = ThisWorkbook.Sheets("Sheet1")   Set rngTARGET = Intersect(SH.Columns(1), SH.UsedRange)      If Not rngTARGET Is Nothing Then     MsgBox "処理範囲は" & rngTARGET.Address     For Each rngC In rngTARGET     ’処理内容     Next rngC   Else     MsgBox "A列にはデータがないです"   End If      Set rngTARGET = Nothing   Set SH = Nothing End Sub

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

こんにちは。KenKen_SP です。 > (シートの切り替えをしたくないので。) ならば、シートを指定しなければならないと思います。 それから、 For Each MyObj In Columns(1).Cells でも良いのですが、65536回ループすることになりますので、私は よく Intersect と UsedRange で処理範囲を限定させる方法を使って います。   Dim SH As Worksheet   Dim MyObj As Range   Dim i   As Long      Set SH = ThisWorkbook.Sheets("Sheet1")   For Each MyObj In Intersect(SH.Columns(1), SH.UsedRange)     i = i + 1   Next MyObj   Set SH = Nothing   MsgBox i 例えば、 For Each C In Selection といったコードは良くありますが、これだとユーザーが全セルを 選択した場合、莫大なループになってしまいます。大抵の処理は セルになんらかのデータがある範囲に限られるはずなので、 例えユーザーが全セルを選択したとしても、 Set rngTARGET = Intersect(Selection, Activesheet.UsedRange) としてループの範囲を狭めています。

tosi0000
質問者

お礼

有難う御座います。 UsedRangeはいいですね。 私も使わせてもらいます。

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

>For Each MyObj In Columns(1) これを For Each MyObj In Columns(1).Cells としてみれば?

tosi0000
質問者

お礼

有難う御座います。 期待したとおりの回答でした。

関連するQ&A