• ベストアンサー

VBA For Eachの使い方

For Each x In Range("A1:G1") このようなコードにおいて、A1からG1の全てに対して処理を行うのではなく、A1とC1とE1とG1に対して処理を行い、B1とD1とF1は飛ばして処理をしないようにするにはどうすれば良いですか?

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

  • ベストアンサー
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

やり方は色々あるけど、例えば列数で処理分けする場合 --- For Each x In Range("A1:G1")  Select Case x.Column   Case 1, 3, 5, 7    MsgBox ("○")   Case 2, 4, 6    MsgBox ("×")  End Select Next

VitaminBB
質問者

お礼

回答ありがとうございます。 STEP~とかで、一つ飛びなんてことは出来ないのですね。

その他の回答 (2)

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

例データA1:C3 1 2 3 4 5 6 7 8 9 コード Sub test03() Dim cl As Range For Each cl In Range("A1,c1,a3") MsgBox cl Next End Sub 実行すると 1,3,7が表示されます。 ご参考に。

VitaminBB
質問者

お礼

回答ありがとうございます。 STEP~とかで、一つ飛びなんてことは出来ないのですね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

For Each x In Range("A1,C1,E1,G1") '処理 Next とか flag = True For Each x In Range("A1:G1") If flag Then '処理 End If flag = Not flag Next とか

VitaminBB
質問者

お礼

回答ありがとうございます。 STEP~とかで、一つ飛びなんてことは出来ないのですね。

関連するQ&A

  • Excel VBA のFor Each ・・・ Next について

    配列に数字(特段数字でなくても)入れたいのですが、以下のように書きました。 Sub test() Dim x As Variant Dim m(1 To 10) As Integer For Each x In m x.Value = 100 Next Stop End Sub Stopでとめてmを確認するとすべて0です。どうしてなのでしょうか。 配列ではなく Sub test() Dim x As Variant For Each x In range("a1:a10") x.Value = 100 Next End Sub とするとA1:A10には100が入ります。 この差がいまいちわからなくて、 もちろんFor ・・・ Nextで簡単に入れられるのは承知しています。 補足ですが また最初はx.valueの.valueをつけていなかったのでセルにも反映されませんでしたが.valueをつけると入りました。

  • for each の現在の配列ポインタ VBA

    for each で配列内の値をいじるマクロを組んでいるのですが 「今 配列内のどこを見ているのか」を取りだすにはどうすればよいのでしょうか for each c in range(~ の時には「今 range内のどこを見ているのか」は c.address をすればわかったのですが、配列となるとどうすればよいのか… お分かりになるかたいらっしゃったらよろしくお願いします

  • VBAのFor Eachのセル読み込み順番について。

    こんにちは。 VBAのFor Eachのexcelセル読み込み順番について お伺いします。 for each MjObj in range("A1:D10") ********** next とした場合にセルはA1を先頭に左から右列へ、 上から下行へと順次読み込まれますが、 この順番を変更することは出来るのでしょうか。 また、運用で誤って変更される可能は あるでしょうか。 以上、2点お伺い致します。 宜しくお願い致します。

  • ノード元でfor-eachしたい

    こんにちは。はじめまして。 <A> <B> <C>1</C> <D>あ<D> </B> <B> <C>2</C> <D>い<D> </B> <Z> <Y>999</Y> <X>わ</X> </Z> <Z> <Y>888</Y> <X>ん</X> </Z> <A> というXMLで Aでfor-eachしたいんですが… それでBとCとYとXの値を取得したいのです。 これってできますか? どうもXMLの作り方が変で困っています。 スタイルシートのみでどうにかできないかと思い質問してみました。よろしくお願いします。

    • ベストアンサー
    • XML
  • VBA For Eachでセル内の文字列を一個ずつ取り出すには

    エクセル2000です。 たとえばA1セル内の文字列を一個ずつ取り出す場合、 Sub test01() For i = 1 To Len(Range("A1").Value) Cells(i, "B").Value = Range("A1").Characters(i, 1).Text Next End Sub このように最初から最後の文字まで何番目で指定することはわかるのですが、これをFor Each で回すにはどうしたらよいでしょうか? (⌒o⌒)? お教えください。 Sub test02() For Each ch In Range("A1").Characters i = i + 1 Cells(i, "B").Value = ch Next End Sub ではエラーになります。

  • For Eachを使った並び替えについて

    XPのVBAで、シフトを組もうとしています。 登録者の中から5名を1組とし、班長を固定して4通り。 それを毎月、4組作成したいのです。 繰返しが多いので、簡単な方法がありそうなのですができません。 どうぞよろしくお願いいたします。 Sub 名簿() Dim a As Range ‘名簿シートの1行目に=RAND()関数を入れる。2行目に名簿を作成する。 ‘組合せシートの$AI$1, $AI$3, $AC$1, $AC$3の4つのセルに”組1”という名前を定義 ‘名簿シートのB2セルの人を班長として固定。組合せシートの”組1”(4箇所)に貼り付ける Sheets("名簿").Select Range("B2").Select Selection.Copy Sheets("組合せ").Select For Each a In Range("組1") a.Select ActiveSheet.Paste Next a ‘名簿シートのC2セルから2行の最後までのデータをランダムに並べ替え、C2からF2をコピー、貼付け For Each a In Range("組1") a.Select Selection.Offset(0, -4).Select Sheets("名簿").Select Range("C1:I2").Select Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("C2:F2").Copy Sheets("組合せ").Select ActiveSheet.Paste Next a ‘名簿シートの全てのデータをランダムに並び替え。 Sheets("名簿").Select Range("B1:I2").Select Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub 以上の作業を”組2”、”組3”、”組4”においても繰り返したいのです。 できれば、組の中で同じ組合せがないほうが嬉しいのですが。 できれば班長も同じ組が出来ないほうがよいのですが。 ややこしいお話で申し訳ありませんが、よろしくおお願いいたします。

  • Excel vba PDF 複数ファイルを一括保存

    以下のコードで、for eachの部分をどのように変えると 1枚のpdfですべて保存出来るか教えてください。 よろしくお願いします。 sub macro1()  dim h as range  worksheets("Sheet1").select  for each h in range("C2:C" & range("C65536").end(xlup).row)   worksheets("Sheet2").select   range("B6").value = h.value   range("E18...

  • エクセルVBAで列幅設定

    A列の幅を、C~F列の幅(同一ではありません)に設定しようと思いました。 ところが Columns("A").ColumnWidth = Range("C1:F1").Width とすると、ColumnWidthとWidthの単位がまったく違うのでエラーになります。 同じ単位で設定するには Columns("A").ColumnWidth = Columns("C").ColumnWidth + Columns("D").ColumnWidth + Columns("E").ColumnWidth + Columns("F").ColumnWidth とするか、 Sub test02() Dim c As Range Dim x As Single For Each c In Range("C1:F1") x = x + c.ColumnWidth Next Columns("A").ColumnWidth = x End Sub などのように手の込んだことをするしか思いつきません。 もっと簡単な方法はないでしょうか?

  • Excel VBA 計算式を代入するには?

    計算式が一部ミスっていまして、計算式を修正したいのですが、中々上手くいきません。結果は全部"0"で返ってきます。 ソースは以下になります。 Sub 全て修正() Dim ws As Worksheet k = 1 For Each ws In ActiveWorkbook.Sheets ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256 k = k + 1 Next End Sub 計算式は 『 F15 * 3 / 256 』 となのですが、 F15 では関数処理をしており、更に元データは以下のような関数処理をそれぞれ行っている状態です。    C列        D列    E列   F列    データ      LIGHT()  LEFT() HEX2DEC() F50A0000000281  000281   0002    2 こんな場合はどんな方法で処理すればよろしいですか? アドバイスお願い致します。

  • エクセルVBAで

    いつもお世話になります。 使い方がいまいち分かっていないのでご指導願います。 set Y=range("a1:e5") for each X in Y ・・・・ next X で、恐らくa1からa2,a3と順々にe5まで進んでいると思うのですが。 質問(1)これを1個とばしにする事は可能でしょうか? for n=1 to 10 step2みたいな使い方です。 質問(2)B行をまるまるとばしたい時は如何すればいいのでしょうか? 宜しくお願いします。