• 締切済み

vba 順次記録 

下記のマクロはツール、マクロ、新しいマクロの記録で作成しました。 順序はa1に ”=RSS|'3315.T'!現在値” 最初から入力しておきます。 1回目a1に楽天のマーケットスピード  (MS) より数字が入力されます a1に入力したすうじをa5とa6にコピーします。 2回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6 を a6,a7 にコピーします。 3回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7 を a6,a7,a8 にコピーします。 4回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7,a8 を a6,a7,a8,a9 にコピーします。 n回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7,a8,-----a? を a6,a7,a8,a9,-----a? にコピーします。 以後入力有り次第 繰り返し続けて記録したいのです。 下記のマクロはa列に記録ですがb、c、d、と4箇所形式は同じですがデータの違いのが有るのですが a,b,c,d,列入力順序がばらばらなのです a列のみでもお願いします。 Sub M3() Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Range("A5:A6").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A6").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A7").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A8").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A9").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A10").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select End Sub

みんなの回答

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

こういう同じ場所にデータが入って来るものは、マクロの記録では、扱うのは無理です。マクロの記録はどういうところに向いているか、限界は何か、などVBAをもっと勉強しないと。 多分(注)イベントという仕組みで、どれもシートのChangeイベントの助けで、そのキッカケで、データ取り込み(他のセルに、次のデータで壊されないようにA1セルから退避する)をする。 ーー それに>a5,a6,a7,a8 を a6,a7,a8,a9 にコピーします などのところは、くどく繰り返さないでも、今有るデータの最下行の下行にデータを写す(移す、代入する)という処理でよいのでは。そして最後に昇順や降順にソートすればよいのではないのかな。 最下行は Sub test01() MsgBox Range("A65236").End(xlUp).Offset(1, 0).Row End Sub を参考にすればよいと思う。 (注)動的な、WEBデータ相手の処理ならば、イベント処理を使ってで、うまく行くかどうか、テストも出来てないので、自信はないが。初心者がやるには難しすぎるように思う。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

A1に数値が入力されたら処理を実行するには、 この場合は、 Worksheet_Calculate イベント Workbook_SheetCalculate イベント などを使うのではないですか。 もう少し勉強しましょう。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

はじめまして 「マクロの記録」では解決できません。 自分でマクロを編集する必要があります。 まずは「MS より次の入力が入ります。」のタイミングでマクロを実行する必要があります。 A1の値を変更したら、その都度手動でマクロを実行するのが一番手っ取り早い方法です。 また、「イベントプロシージャ」の「Workbook_SheetChange」を使って、A1が変更されたときに自動的にマクロを実行することもできます。 次に、 [A65536].End(xlUp).Row という数式を使えば、データが入っている一番下の行の番号が分かります。(A65536はA列の一番最後のセルですが、Excelのバージョンによって異なります。使用しているExcelで確認してください) もっとも、最後の行を調べなくても、 Range("A5").Select Selection.Copy Selection.Insert Shift:=xlDown と、「挿入-コピーしたセル」という機能を使えば、自動的にデータを下へずらすことができます。 http://www.jpita.or.jp/hpv3/ziten/mokutekibetu/ex_32.html

yuki-g
質問者

お礼

お勉強無しで 参考になりました。

yuki-g
質問者

補足

お世話になります。 os win xp excel 2003

関連するQ&A