- ベストアンサー
マクロFor Each ~ In Nextについて
いつも回答して頂き感謝しています。 下記のマクロで列を一つづつとばしながら繰り返し処理したいのですがどうすればよろしいでしょうか? For Each h In .Range(.Range("C3"), .Range("IV3").End(xlToLeft)) Set s = Worksheets(h.Value) Next End(xlToLeft))の後ろに Step 1 を入れたらOKと思ったのですが、エラーがかかるので違うみたいです。さっぱりわかりません。御指導の程宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
For Each Nextループで「1つおき」なんて機能はありません。 作成例1: dim c as long for c = 3 to .range("IV3").end(xltoleft).column step 2 set s = worksheet(cells(3, c).value) next c 作成例2: dim h as range for each h in .range(.range("C3"), .range("IV3").end(xltoleft)) if h.column mod 2 = 1 then set s = worksheets(h.value) end if next
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
ここで使っているmodは,演算子と言います。 res = A1 + B1 (足し算) res = C1 & D1 (文字列の結合) などの計算式で使用している+や&の仲間です。 VBAのヘルプで演算子と入れて検索し,「演算子の概要」のトピックスからリンクしている各種演算子の解説を一読してみてください。VBAではどんな記号を使ってどんな計算が出来るのか,演算子の優先順位はどうなっているのかなどを理解します。 mod演算子は剰余演算子とも言いますが,割り算した余りを整数で求めます。
お礼
ネットで確認してみます。アドバイスありがとうございました。
- tsubuyuki
- ベストアンサー率45% (699/1545)
これは・・セル番地を動かすのではなく、 列番号を動かしてやる方が「わかりやすい」かもしれませんね。 For h = 3 To .Cells(3, .Columns.Count).End(xlToLeft).Column Step 2 Set s = Worksheets(.Cells(3, h).Value) Next くらい。 前にWithが有り、変数hは長整数、変数sはワークシートで宣言してあるのが条件ですね。 マメ知識(ご存知でしょうけれど)。 For 変数 = X To Y Step Z 「Xから始めてZを足しながらYに達するまで」と言う意味です。 Z=1であれば省略可能です(=Step 1 なら省略可能)。 「一つずつ飛ばしながら=2を足しながら」と言うのなら「Step 2」と指定してやります。 Each~In を使ってセル番地などで指定する場合は、 「セル番地には数字を足せない」ので受け付けてもらえない、 と考えると目安になるかもしれません。
お礼
自分が質問した記述にSTEPは使えなかったのですね。初めて知りました。No.1の作成例2を拝借し、無事思っていた通りの動作が出来ました。ありがとうございました。
お礼
返事が遅れて申し訳ありません。 変数h をいろんな場所で使っているので、作成例2を参考に作り直しました。思っていた通りの動作でした。ありがとうございました。 ネットでみましたが、ここで使われているmodの意味がいまいち分かりません。出来れば教えて頂きたいのですが?宜しくお願いします。