• 締切済み

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/17068)
回答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

  • VBAの勤務割表の式を短く

     月間の勤務割表を作成しています。 1列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。 列に日付、行を個人名(max16名)とし1列3行を名前の定義で13種類作成してあります。 別シートの各セルの入力番号に応じて13種類を貼り付けていますが、式を簡単にできませんでしようか?  お教えくださいませんでしょうか?勉強不足は否めませんが。 尚名前の定義は、1行3列に1--で勤務1・""-""で日勤・""公休""で公等にしてあります。 OS Windows7 Office2010 Sub 図形の貼付け2() If Worksheets("メイン").Range("J9").Value Then Select Case Worksheets("メイン").Range("J9").Value 1人-1日 Case 1: ActiveSheet.Range("勤務1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 2: ActiveSheet.Range("勤務2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 3: ActiveSheet.Range("勤務3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("日勤1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("日勤2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("日勤3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select Else Select Case Worksheets("メイン").Range("I9").Value Case 2: ActiveSheet.Range("明け").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("夜勤").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("公").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("有").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 7: ActiveSheet.Range("特").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 8: ActiveSheet.Range("振").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 9: ActiveSheet.Range("欠").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select End If End Sub

  • エクセル VBA 繰り返し コピー貼り付け

    以下を繰り返し作業をOffsetを使用して行いたいのですがどうすればいいでしょうか? Sheets("Sheet1").Select Range("A1:C1").Select のA1:C1以下へA1000:C1000ぐらいあります。 Sheets("Sheet2").Select Range("G1").Select は貼り付けたセル3つの数字の組み合わせで公式に使う計算期間がまちまちですので公式を張り付けたり出来ません。 D1の解を heets("Sheet1").Select Range("D1").Select に貼り付けてA1:C1以下1000までの結果を評価出来るようにしたいのですが! ' Macro1 Macro Sheets("Sheet1").Select Range("A1:C1").Select Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D1").Select ActiveSheet.Paste Range("A2:C2").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Range("A3:C3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D3").Select ActiveSheet.Paste End Sub よろしくおねがいします。

  • EXCELのVBAについて

    マクロのボタンで内容を削除する様に設定した所、 Dim re As Integer Sheets("投入シート").Select re = MsgBox("入力データをクリアします。" & vbCrLf & vbCrLf & "よろしいですか?", vbOKCancel, "クリア確認") If re <> vbCancel Then Sheets("投入シート").Select ActiveSheet.Unprotect Range("a1:c30").Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste Sheets("投入シート").Select ActiveSheet.Unprotect Range("c4:c30").Select Selection.ClearContents Range("f31").Select Selection.Copy Range("c9").Select ActiveSheet.Paste Range("f33").Select Selection.Copy Range("c11").Select ActiveSheet.Paste Range("f32").Select Application.CutCopyMode = False Selection.Copy Range("c14").Select ActiveSheet.Paste Range("c4").Select Application.CutCopyMode = False 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If Sheets("投入シート").Select Range("c4").Select End Sub この様に入力したのですがセルのC11の計算式だけセル番号が消えてしまいます。 どうしてでしょうか?ご指導をお願いします。

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • vba 不揃いの行数にカーソル位置対応

    os_xp //// ex_2003 Sub goo() ' goo Macro ' Keyboard Shortcut: Ctrl+g ' Range("A65524").Select Selection.End(xlUp).Select Rows("669:669").Select '(1)-----次回及び 他のシートは不揃いの為 Selection.Copy Rows("670:670").Select '(2)-----(1)が位置が変化するからここも対応 ActiveSheet.Paste Application.CutCopyMode = False Range("A669:F669").Select '-----範囲の変更ありの予定 Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False Range("BD669:BG669").Select '-----範囲の変更ありの予定 Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False Range("A672").Select '(3)-----次回及び 他のシートは不揃いの為 最後に記録の2段下にカーソルが来て欲しい End Sub ' 'どのシートでも (1) (2) (3) が対応してくれないか?。 '

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • エクセルVBAで教えて下さい。

    A1のセルに [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 A2のセルに [ 6-10] -5.12224e-04 4.07480e-04 -2.73746e-04 -1.77853e-02 -2.13805e-03 A3のセルに [11-15] -6.88489e-03 -2.06765e-02 -9.44633e-03 6.97059e-03 -1.28400e-02 と、このような感じでA7セルまで同じ感じでスペースで空いた数値が入力されています。 A8のセルのみ [36-37] -6.39210e-03 -1.55806e-03 と入力されております。 まず行いたいのはスペースが空いてる部分で、それぞれの数値を各セルに分けたいです。 A1のセルに入力されている [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 ならば A1に[1-5] B1セルに4.05398e-01 C1セルに3.63385e-01 のように これをA1からA8のセルで行ったあと指定のセルを30行目に貼り付けます。 E1→A29 C2→B29 D2→C29 E2→D29 E3→E29 F3→F29 B4→G29 D5→H29 E5→I29 F5→J29 貼り付けのデータは増えていきます。つまり、30行目にデータが入ってる場合は そのデータが1行下の行に下がり、新たなデータが30行目に追加されます。 このようにして、データが最大で58行目まで追加される可能性があります。 最小であれば30行目、31行目の2つしかない場合あります。 この時、0の近似値を各列のセルから探し、当てはまるセルを赤く塗り潰すというのが 今回行いたいことです。 A列ならA30~A58までの中で0の近似値を探し、当てはまるセルを赤く塗り潰す。 ただ空白の場合は無視してもらいたいです。0の近似値だと空白が選択されてしまうので。 近似値探しの前までならマクロがありますのでご参照下さい。 Sub Macro4() ' ' Macro4 Macro ' ' Range("A1:A8").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(21, 1), Array(34, 1), Array(47, 1), _ Array(60, 1)), TrailingMinusNumbers:=True Range("A1").Select Range("E1").Select Selection.Copy Range("A29").Select ActiveSheet.Paste Range("C2:E2").Select Application.CutCopyMode = False Selection.Copy Range("B29").Select ActiveSheet.Paste Range("E3:F3").Select Application.CutCopyMode = False Selection.Copy Range("E29").Select ActiveSheet.Paste Range("B4").Select Application.CutCopyMode = False Selection.Copy Range("G29").Select ActiveSheet.Paste Range("D5:F5").Select Application.CutCopyMode = False Selection.Copy Range("H29").Select ActiveSheet.Paste Range("J7").Select Application.CutCopyMode = False Range("A29:K29").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A29:K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A29").Select Range("A1:F8").Select Selection.ClearContents Range("A1").Select Range("K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.NumberFormatLocal = "G/標準" End Sub わかりずらい質問ですみませんが、ご指導の程 お願い致します。

  • マクロで住所録を抽出して、別シートにコピーするのに

    マクロで住所録を抽出して、別シートに抽出したデータをバラバラに貼り付けたいです。 当方、マクロ初心者なので、分かりやすく教えてください。 シート1『入力シート』、シート2『印刷シート』、シート3に『客先住所録』とあって、今までは住所録のデータをセル1つずつをコピーしてシート1の入力シートに貼り付けて、シート1から2へは関数の=セル番号として飛ばして、シート2の印刷シートを印刷していました。 せっかく、住所録があるからなんとか簡単にならないかと言われて、初心者ながらマクロを作成しました。住所録のオートフィルタで抽出まではうまく出来たのですが、入力シートにコピー貼付が作成時に抽出した住所録は出来ますが、それ以外の住所で抽出すると出来ません。 どうすれば、いいのかご教授願います。 シート3『客先住所録』 A1 チェック A2 1 A3 B3 C3 D4 E4 F4 1又は空白 会社名 〒 住所 FAX TEL 以下70件ほど住所録入力あり。 シート1『入力シート』 G4に〒 G5に住所 K6に電話番号 Y6にFAX G7に会社名 にコピーしたいです。 自分が作成したマクロは Range("A3:F70").Select Range("A3:F48").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Range("A1:A2"), Unique:=False Range("B7").Select Selection.Copy Sheets("入力シート").Select Range("G7:AF7").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("C7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("I4:AH4").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("D7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("G5:AH5").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("E7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("K6:T6").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("F7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("Y6:AH6").Select ActiveSheet.Paste End Sub どう治せば良いのか、宜しくお願いします。 宜しくお願いします。

  • エクセルマクロ 繰り返して、別のシートへコピーしたい

    エクセルマクロ 繰り返して、別のシートへコピーしたい マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、 どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 1行目から10行目まで繰り返したくて、 1行目から2行目のセルの移動の差は10行目までかわりません。 '1行目 Sheets("Sheet1").Select Range("B14:C14").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B15:C17").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False '2行目 Sheets("Sheet1").Select Range("B18:C18").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B19:C21").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

  • マクロ短縮簡潔方法

    Sub 請求書元表() Application.ScreenUpdating = False Application.DisplayAlerts = False Sheets("請求書元表").Select ActiveWindow.SelectedSheets.Delete Sheets("1回目入力").Select Sheets("1回目入力").Copy Before:=Sheets(19) Sheets("1回目入力 (2)").Select Sheets("1回目入力 (2)").Name = "請求書元表" Range("A2").Select Sheets("2回目入力").Select Range("A2:F600").Select Application.CutCopyMode = False Selection.Copy Sheets("請求書元表").Select Range("A601").Select ActiveSheet.Paste Sheets("請求書元表").Select Range("B2").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Range("B2").Select Sheets("請求書元表").Select Range("b2:b1798").Select Application.CutCopyMode = False Selection.Copy Sheets("請求申込書").Select Range("a2").Select ActiveSheet.Paste Sheets("請求書元表").Select Range("e2:e1798").Select Application.CutCopyMode = False Selection.Copy Sheets("請求申込書").Select Range("d2").Select ActiveSheet.Paste Sheets("請求書元表").Select Range("f2:f1798").Select Application.CutCopyMode = False Selection.Copy Sheets("請求申込書").Select Range("g2").Select ActiveSheet.Paste 'Call 集計申込書 'Call 一括集計 Application.DisplayAlerts = True End Sub

専門家に質問してみよう