- ベストアンサー
【VBA】セル範囲選択の繰り返し
- VBAを使用して、セル範囲を繰り返し選択する方法について
- 行数が増えた場合でも選択したいセル範囲を考慮した記述に変更する方法
- セルの範囲を選択するVBAマクロのサンプルコードと説明
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3です。 投稿後、もう一度質問文を読み返して >選択したい行数が増えた場合を考慮した記述に変更したいと思っております。 の部分を見逃していました。 前回のNo.1のコードの方が対応しやすいと思います。 >For i = 11 To 27 Step 2 の1行を >For i = 11 To Cells(Rows.Count, "C").End(xlUp).Row Step 2 (C列で最終行を取得しています) にすれば行数が増えてもC列最終行まで1行おきに選択されるはずです。 何度も失礼しました。m(_ _)m
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 色々やり方はあるかと思いますが・・・ とりあえず二通りのやり方です。 Sub Sample1() Dim i As Long, myRange As Range Set myRange = Range("C9").Resize(, 84) For i = 11 To 27 Step 2 Set myRange = Union(myRange, Cells(i, "C").Resize(, 84)) Next i myRange.Select End Sub Sub Sample2() Application.ScreenUpdating = False Range("C:C").Insert With Range(Cells(9, "C"), Cells(27, "C")) .Formula = "=IF(MOD(ROW(),2)=1,1,"""")" .Value = .Value End With Range("C8") = "ダミー" Range("C8:CH27").AutoFilter field:=1, Criteria1:=1 Range("C9:CH27").SpecialCells(xlCellTypeVisible).Select ActiveSheet.AutoFilterMode = False Range("C:C").Delete Application.ScreenUpdating = True End Sub Sample1の方が簡単かもしれませんね。m(_ _)m
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 もちろん、#1さんのループでつなぐ方法も考えましたが、あえて、選択したい場所を増やす方法として、二種類を考えてみました。 Dim strRng As String Dim myRng As Range Dim myTarget As Range '文字列でつなぐ strRng = "C9:CH9,C11:CH11,C13:CH13,C15:CH15,C17:CH17," ←注意、行の末尾のカンマ strRng = strRng & "C19:CH19,C21:CH21,C23:CH23,C25:CH25,C27:CH27" Set myRng = Range(strRng) Set myTarget =Intersect(Target, myRng) このように、文字をつなぐ方法ですが、しかし、文字列の長さには限界があります。 そこで、このように、Unionでつなぐ方法があります。 Dim myRng As Range Dim myTarget As Range Set myRng = Range("C9:CH9,C11:CH11,C13:CH13,C15:CH15,C17:CH17") Set myRng = Union(myRng, Range("C19:CH19,C21:CH21,C23:CH23,C25:CH25,C27:CH27")) Set myTarget =Intersect(Target, myRng) ちなみに、my というプレフィックスは、ローカル変数という意味です。 Target は、システム側で使っていますので、あえて、こう名称を変えます。
お礼
お礼早々にご回答くださり誠にありがとうございます。 ご教示いただいた内容で希望の結果を得ることができました!
- yugere
- ベストアンサー率37% (48/127)
こんにちは。 ============================================================ Sub セルの範囲選択() ' Dim rg as String rg = "C9:CH9" For i = 11 To 27 Step 2 rg = rg & ",C" & i & ":CH" & i Next i Set Target = Intersect(Target, Rang(rg)) If 処理1 End If End Sub ============================================================ でどうでしょうか?
お礼
お礼早々にご回答くださり誠にありがとうございます。 ご教示いただいた内容で希望の結果を得ることができました!
補足
ご回答ありがとうございます。 一つ目の範囲と次の範囲の間には、6行の空白があります。なお範囲のサイズは同じ(おなじ形式の表の繰り返し)です。 このような繰り返かが30回ある場合はどのようになりますか? よろしくお願いします!
お礼
お礼早々にご回答くださり誠にありがとうございます。 ご教示いただいた内容で希望の結果を得ることができました!