• ベストアンサー

Excelの繰り返し&条件貼付マクロの併用について

本来であれば参考書片手に作成するべき内容だとは思いますが 事務処理の期限が近いのでご質問させてください。 【やりたい事】 現在、Sheet1A行のセルにIF関数で条件式をいれ 正のものは「1」と表示されるようになっている。 Aセルにフラグ「1」が表示されている場合、同列B~ZセルまでをSheet2同セルにコピー。 Aセルにフラグがない場合は上記処理を飛ばす。 これを1列目から600列目まで繰り返すマクロを作成したい。 ※Sheet2に対してコピー処理がされなければ良いので必ずしも列を詰める必要はない また、出来れば今後の拡張を考えて1~600列を可変させたいので 範囲コピーではなく繰り返し条件を用いて上記マクロ作成したいと考えています。 単純にネット上で探した繰り返しと条件貼付マクロを併用してみたのですが 構文エラーは表示されないものの処理が行われません。 Sub 貼付マクロ() For i = 1 To 600 If "A & i "= 1 Then Sheets("Sheet1").Range("B & i: Z & i").Copy Sheets("Sheet2").Range("B & i: Z & i").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Else End If Next i End Sub Excelマクロ自体、通常の記録マクロと WEBに公開されているマクロのセル変更での利用程度しかしたことがない為 根本的な間違いがあると思いますがご教示いただけないでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>1列目から600列目 1行から600行まで? >Sheet2同セルにコピー。 Sheet2の同行? >If "A & i "= 1 Then >Sheets("Sheet1").Range("B & i: Z & i").Copy >Sheets("Sheet2").Range("B & i: Z & i").PasteSpecial Paste:=xlPasteValues >Application.CutCopyMode = False >Else >End If If Sheets("Sheet1").Range("A" & i).Value = 1 Then Sheets("Sheet2").Range("B" & i & ":Z" & i).Value = _ Sheets("Sheet1").Range("B" & i & ":Z" & i).Value End If とか?

aytdss
質問者

お礼

早速の回答ありがとうございます! >1行から600行まで? >Sheet2の同行? どちらもご認識どおりです。 上記マクロを早速試してみました所 きちんと貼付が行うことが出来ました、ありがとうございます。 ちなみに基本的な質問で申し訳ないですが Sheets("Sheet2").Range("B" & i & ":Z" & i).Value = _ Sheets("Sheet1").Range("B" & i & ":Z" & i).Value わざわざペーストせずとも=でくくる事で 貼付が可能ということでしょうか?

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

merlionXXです。 貼り付けたコードがどういうわけか、一部欠落していましたのでやりなおします。 Sub 上詰貼付マクロ() With Sheets("Sheet1") For i = 1 To .Range("A" & Rows.Count).End(xlUp).Row If .Range("A" & i).Value = 1 Then n = n + 1 Sheets("Sheet2").Range("B" & n & ":Z" & n).Value = .Range("B" & i & ":Z" & i).Value End If Next i End With End Sub

aytdss
質問者

お礼

上詰を行う場合までご教示いただけるとは・・・ありがとうございます。 nとiの変数?を利用するんですね 実際にご指摘頂ければなるほど!という感じですが 自分で思いつかない辺りまだまだ勉強不足ですね。 参考になりました、誠にありがとうございます。 これでご回答を締め切らせてもらいます。 どれも参考になったこともあり 本来ならばベストアンサーを皆様に差し上げたいところですが 今回は先着順でポイントを付けさせてもらいます、ご了承下さい。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> Sheet1A行のセル エクセルでは縦が列、横が行です。 A行ではなくA列ですね? > 今後の拡張を考えて1~600列を可変させたいので 1行目からA列データ最終行まで繰り返す例です。 ついでに上詰にしてしまいましたが。 なお、値だけの表示でいいなら何もコピーして貼り付ける必要はありません。(=でOK) Sub 上詰貼付マクロ() With Sheets("Sheet1") For i = 1 To .Range("A" & Rows.Count).Row If .Range("A" & i).Value = 1 Then n = n + 1 Sheets("Sheet2").Range("B" & n & ":Z" & n).Value = .Range("B" & i & ":Z" & i).Value End If Next i End With End Sub

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

まず >If "A & i "= 1 Then がいけません Sheets("Sheet1").Range("A" & i).Value = 1 Then になるはずです。 同様に >Sheets("Sheet1").Range("B & i: Z & i").Copy も Sheets("Sheet1").Range("B" & i & ":Z" & i).Copy でしょう。 セルの範囲を指定するのに Sheets("Sheet1").Range(Cells(i, "B"), Cells(i ,"Z")).Copy という書き方もできます。

aytdss
質問者

お礼

ご回答ありがとうございます。 今後類似マクロを作る事もあると思いますので このような記述方法のご指摘は非常に勉強になります。 予想以上に早い回答が2つもいただけた為 資料作成がはかどり、少し事務処理に余裕が出来ましたので こちらの方法もご教示内容を元にマクロを組んで試してみることにします。 ありがとうございました!

関連するQ&A