• ベストアンサー

エクセル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行をまるまるとばしたい時は如何すればいいのでしょうか? 宜しくお願いします。

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

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

A1,B1,C1,D1,E1,A2,B2・・・と進みます。 ifで判定するとか、、、 '質問(1) Sub aa()  Dim x As Range  Set Y = Range("A1:e5")  For Each x In Y    If (x.Row Mod 2) <> 0 Then x = 1  Next x End Sub '質問(2) Sub bb()  Dim x As Range  Set Y = Range("A1:e5")  For Each x In Y    If x.Column <> 2 Then x = 1  Next x End Sub

keiri2002
質問者

お礼

回答有難うございます。 >x.Row x.Column こういう使い方が出来るんですね。 またお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

For Each NextステートメントでStepは使えないようです(エラーに成ります、経験済み)。 A1:C3に a1 b1 c1 a2 b2 c2 a3 b3 c3 といれて Sub test01() Dim cl As Range For Each cl In Range("A1:C3") If cl.Column = 2 Then Else MsgBox cl '処理の代わり End If Next End Sub を実行すると A1/C1/A2/C2/A3/C3の順に表示されます。 ご参考に。

keiri2002
質問者

お礼

回答有難うございます。 解決しました。 またお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vbaでfor nextの計算

    vbaでfor nextを使って計算しています。 excelのシートの値を使って計算しています。 for nextが3重になっていて中のyとxのfor next が計算し終わったらjのfor nextで次のセルを参照したいのですがうまくいきません。 どうしたらいいか教えてください。 コードは以下の通りです For j = 1 To 2 Step 1 For y = 3 To 90 Step 3 γ = y / 180 * π For x = -180 To 180 Step 6 α = x / 180 * π γs = Range("A:A").Rows(j).Value / 180 * π αs = Range("B:B").Rows(j).Value / 180 * π Eeg = Range("C:C").Rows(j).Value Eed = Range("D:D").Rows(j).Value 計算式(省略) Next x Next y Next j

  • 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と変換できる関数でも構いませんので、 良い指定方法あれば、宜しくお願い致します。

  • エクセルVBAの条件指定が上手くいきません

    「7を超えたら、For Eachステートメントを抜けなさい」という条件を入れたいのですが、 7を超えても処理が継続し困っています。 勉強不足で申し訳ないですが、ご教授願います。 【やりたいこと】 まず、セルB1~D3までのセルの値(9つ)が、7を超えない条件で1を加算していきます。 加算したときの値はE~Gの列に貼り付けていきます。 7を超えた時点でFor Eachステートメントを抜けます。 また、B1~D3までのセルには計算式が入っており、A1に数字を入れると、 それぞれ異なる増え方をします。(計算式自体は$A$1+1.1、$A$1+2.1などシンプルなもの) Sub test() Dim i As Range Dim n As Long Dim x As Long n = 1 x = 1 For Each i In Range("B1:D3") Range("A1").Value = x If i < 7 Then Range("B1:D3").Copy Cells(n, 5).Select Selection.PasteSpecial Paste:=xlPasteValues n = n + 3 x = x + 1 ElseIf i > 7 Then Exit For End If Next End Sub お手数ですが、宜しくお願いいたします。

  • 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をつけると入りました。

  • エクセルVBAで罫線を引きたいのですが

    コマンドボタンを押すと、対応するVBAが実行される ところまでできたのですが 10行目のA1~G10まで、アンダーラインを引きたいのです 下記はそれらしいVBAをコピーして実行したものです これでは、各セルに二重線で縁取りされました それを、アンダーラインを引きたいのですが、教えてください For Each myRange In Worksheets(1).Range("A10:g10") '←(1) myRange.Borders.LineStyle = xlDouble Next myRange できれば、For Each、なんか使わないでできると ありがたいのですが よろしくお願いします

  • エクセル VBA Replace について

    XP microsoft visual basic 6.0 です はじめに A1 に =SUM(A2:A5) と記入してます A2 から A5 には何も記入されていないので A1 の値は 0 です そこで Sub a() Dim e As Range For Each e In ActiveSheet.UsedRange e.Value = Replace(e.Value, "あ", "") Next End Sub を実行すると A1 の =SUM(A2:A5) が 0 と計算結果のみの数字に置き換えられてしまうのですが、何故なのでしょうか 置換後も 関数式を残しておきたいのですが何か良い方法はありませんか よろしくお願いします

  • エクセルVBA

    Sub PlusA001() Dim a As Range Dim b As Integer Range("e1").Value = "氏名" Range("e2").Value = "甲" Range("e2").AutoFill Destination:=Range("e2:e10"), Type:=xlFillDefault Range("f1:j1").Value = Array("国", "数", "理", "社", "英") Set a = Range("f2") For i = 1 To 5 Do Until b = 9 a.Value = Int(100 * Rnd) + 1 b = b + 1 Set a = a.Offset(1, 0) Loop b = 0 Set a = a.Offset(-9, 1) Next i End Sub サンプルコードの例ですが、どうも実行しても納得できない部分があります。それはSet a=a.offset(-9,1)の部分です。Set a = Range("f2")においてf2を始点としているのは判りますが、f2からであればa=a.offset(-9、5) とすればいいのかと思い実行したのですが、ぐちゃぐちゃになります。なぜ(-9、5)ではなく(-9、1)何ですか?いくら読み解いても判りません。教えてください。

  • エクセル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 などのように手の込んだことをするしか思いつきません。 もっと簡単な方法はないでしょうか?

  • VBA For Eachの使い方

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

  • マクロ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と思ったのですが、エラーがかかるので違うみたいです。さっぱりわかりません。御指導の程宜しくお願い致します。