• 締切済み

行を挿入するマクロがうまくいきません。

Sheets("りんご").Select Rows("1:1").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False End Sub というマクロは、りんごのシートにある1行をコピーして、 みかんのシートの人と名前定義してある特定の行にコピーする マクロです。この次に下のマクロを実行すると Sheets("りんご").Select Rows("2:3").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown それまでのものが残ってしまい、行がどんどん増えていってしまいます。 いずれかのマクロを実行すればリセットされて行が増えないように コピーするにはどうすればよいでしょうか・・?

みんなの回答

回答No.3

補足拝見いたしました。 複数行の中から特定の行のみ削除したいという場合はその特定の行を識別するためのフラグが必要となります。 例えば最初のマクロで「東京特許許可局」を挿入する際に隣のB列には「1」と入力しておきます(添付画像の通り)。 そうすれば次のマクロで「関西国際空港」「豊臣秀吉」を挿入する際B列に「1」が入っている行を削除してから挿入するという処理ができます。 Sub 最初のマクロ() Sheets("りんご").Select Rows("1:1").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False ActiveCell.Offset(0, 1) = 1 End Sub Sub 次のマクロ() Dim i As Long Dim R As Range i = 1 For Each R In Range("A1", Cells(Rows.Count, 1).End(xlUp)) If Cells(i, 2) = 1 Then Rows(i & ":" & i).Delete Shift:=xlUp End If i = i + 1 Next Sheets("りんご").Select Rows("2:3").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown End Sub

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

それはね、コピーした列を「貼り付け」すべきところを「列の挿入」してるからですよ

runpet
質問者

お礼

ご指摘ありがとうございます; 挿入の誤りです。コピーする先にはすでに文字があるため 挿入のマクロで作る予定でした;

runpet
質問者

補足

下の補足が誤っていたため訂正します; イメージとしては、      A B C D E  1 私の名前は  2 おしえてGOOです  3 どうぞよろしく  4 おはようこんにちは  5 おはようさようなら 3の列が今回の名前定義された人とします。 そこにりんごシートにある 東京特許許可局とかいてある行をコピーして 人と定義された行に挿入すると    A B C D E  1 私の名前は  2 おしえてGOOです  3 東京特許許可局  4 どうぞよろしく  5 おはようこんにちは となります。ここで更に例えばりんごシートから2行をコピーしたものを 挿入するマクロがあるとして、それを実行すると、    A B C D E  1 私の名前は  2 おしえてGOOです  3 東京特許許可局  4 関西国際空港  5 豊臣秀吉  6 どうぞよろしく  7 おはようこんにちは となってしまうのではなく、    A B C D E  1 私の名前は  2 おしえてGOOです  3 関西国際空港  4 豊臣秀吉  5 どうぞよろしく  6 おはようこんにちは としたいという感じです;

回答No.1

本データの具体的な状況や位置関係が分からないので、とりあえず下部分マクロを実行する際に「人」セルより上にある行を削除するというコードを書いてみました。 内容としては「人」セルの1つ上のセルの文字列数を数えて0でなければその行は削除するという方法です。 下部分マクロより前に追記して実行してみてください。 Sheets("みかん").Select Do Until Range("人").Row = 1 Range("人").Offset(-1, 0).Select If Len(ActiveCell.Value) <> 0 Then Selection.Delete Shift:=xlUp End If Loop

runpet
質問者

お礼

ご回答ありがとうございます; 申し訳ありません。行をコピーするという質問でしたが、 行を挿入するという誤りでした; おしえていただいた通り、 Sheets("みかん").Select Do Until Range("人").Row = 1 Range("人").Offset(-1, 0).Select If Len(ActiveCell.Value) <> 0 Then Selection.Delete Shift:=xlUp End If Loop Sheets("りんご").Select Rows("2:3").Select Selection.Copy Sheets("みかん").Select Range("人").Select Selection.Insert Shift:=xlDown Application.CutCopyMode = False End Sub を実行すると固まってしまいました; 申し訳ありません。。

runpet
質問者

補足

イメージとしては、      A B C D E  1 私の名前は  2 おしえてGOOです  3 どうぞよろしく  4 おはようこんにちは  5 おはようさようなら 3の列が今回の名前定義された人とします。 そこにりんごシートにある 東京特許許可局とかいてある行をコピーして 人と定義された行でに挿入すると    A B C D E  1 私の名前は  2 おしえてGOOです  3 東京特許許可局  4 おはようこんにちは  5 おはようさようなら となります。ここで更に例えばりんごシートから2行をコピーしたものを 挿入するマクロがあるとして、それを実行すると、    A B C D E  1 私の名前は  2 おしえてGOOです  3 東京特許許可局  4 関西国際空港  5 豊臣秀吉  6 おはようこんにちは  7 おはようさようなら となってしまうのではなく、    A B C D E  1 私の名前は  2 おしえてGOOです  3 関西国際空港  4 豊臣秀吉  5 おはようこんにちは  6 おはようさようなら としたいという感じです;

関連するQ&A

  • sheet1上のマクロでsheet2に画面を切り替えずに行を挿入させたい

    Excel2002ユーザーです。 sheet1上で実行するマクロで、画面を切り替えることなく、 いわば水面下でsheet2の行1に空行を挿入させ、常に最新のデータ(Sheet1上にあるセルの値)を書き込んでいく、 ということをしたいのです。 古いデータは順次、下に送られる形です。 まずデータの書き込み以前に、挿入ができないのです。 sheet1上のマクロで、 Worksheets("sheet2").Rows("1:1").Select Selection.Insert Shift:=xlDown と書き込みましたがダメでした。 (実行時エラー'1004': RangeクラスのSelectメソッドが失敗しました) Sheets("sheet2").Select Rows("1:1").Select Selection.Insert Shift:=xlDown の場合、行挿入はOKですが、sheet2に画面が切り替わってしまいます。 常にsheet1の画面を表示させたままにしてこのようなことを行いたいのですが、 良きアイデア、アドバイスがありましたら御教授ください。 よろしくお願い致します。

  • エクセルのマクロ:連続動作を空白行で終了する方法

    XP・Excel2003使用のマクロ素人です。 エクセルのマクロを使って以下のマクロを作りました。 1.Sheet1の1行目に入っているデータをSheet2にコピー 2.Sheet2をコピー 3.Sheet1の1行目を削除 4.上記1~3のマクロを実行するボタンをクリック 作業を繰り返し行いたかったので、(4)の「マクロボタンをクリック」という作業もマクロに組み込んでみたのですが、空白行でも延々に実行されてしまいます。 【Sheet1に入っているデータが空白になったら作業を止める】というマクロはどのように書けばいいのでしょうか? マクロの作り方が根本的に間違っていましたら、あわせてご指摘下さい。 宜しくお願い致します。 Range("A1").Select Selection.Copy Sheets("Sheet2").Select ActiveSheet.Paste Sheets("Sheet2").Select Application.CutCopyMode = False Sheets("Sheet2").Copy After:=Sheets(3) Sheets("Sheet1").Select Rows("1:1").Select Selection.Delete Shift:=xlUp Range("A1").Select Sheets("Sheet1").Select Application.Run "Book1!Macro1"

  • EXCEL2000で作成したマクロが2007で動作しない

    EXCEL2000で作成したマクロがEXCEL2007上で動作しません。 2つのシートに入ったデータを,「抽出」シートにコピー後, 抽出条件に合わせて抽出するというものなのですが, 「Sheet1」で最終行を取得するところで,正しい範囲を 選択しません。どこが間違えているのか,ご指南頂けないでしょうか? お願いいたします。 下には,正しい結果が出ない所までを貼りつけました。 Sub フィルタオプション() Dim LastRow As Long, LastColumn As Long Dim myData As Range Dim myCriteria As Range Sheets("Sheet1").Select Rows("1:1").Select Selection.Copy Sheets("抽出").Select Rows("3:3").Select ActiveSheet.Paste If Worksheets("Sheet1").FilterMode = True Then   Worksheets("Sheet1").ShowAllData End If With Worksheets("Sheet1") LastRow = .Cells(Application.Rows.Count, "A").End(xlUp).Row End With Sheets("Sheet1").Select Range(Rows(2), Rows(LastRow)).Select Selection.Copy Range("A1").Select Sheets("抽出").Select Range(Rows(4), Rows(4)).Select Selection.Insert Shift:=xlDown

  • 簡単なマクロですが教えてください。

    マクロで、現在アクティブになっているセルのある行全体を選択し、 そこに行を追加(挿入)する。 その後、1行目にある行全体をコピーして、追加(挿入)した 行に1行目の数式をコピーしたいのです。 マクロの記録から作成しようとしたら、 毎回13行目に挿入・コピーするようになってしまいました。 例えば、マクロ実行時に5行目にアクティブセルがあれば、 5行目に挿入したいのです。 この方法を教えて頂けませんでしょうか。 現在の誤ったマクロ構文を付けますので、 どのように直したらよいか教えて頂けませんか。 何卒よろしくお願いいたします。 Sub osietekudasai() ' ' osietekudasai Macro ' ' Rows("13:13").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Rows("1:1").Select Selection.Copy Rows("13:13").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A13").Select

  • エクセルマクロ 抽出したデータを別のシートへコピーしたい

    マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 【1】シート名「データ」をA列でオートフィルタ抽出して、別シートにコピーする。 【2】別シートにコピーしたデータに外枠罫線をつける。 【3】シート名「データ」には塗りつぶしがあるので、別シートにコピーされた塗りつぶしは「なし」する。 【4】シート名「Sheet1」の1~2行目をコピーし、別シートの1~2行目に挿入し、シート名「データ」に戻る。 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、今はコピーして「あ行」の部分を書き換えています。(かなり面倒です) 最終的には、抽出されたそれぞれのシートを別々のブックにしたいとも思っています。 長々とすみませんが、どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 Sheets("データ").Select Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="あ行", Operator:=xlAnd Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy Sheets("あ行").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Cells.Select Selection.Interior.ColorIndex = xlNone Sheets("Sheet1").Select Rows("1:2").Select Selection.Copy Sheets("あ行").Activate Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Select Sheets("データ").Select Range("A1").Select

  • Excel 繰り返しマクロ

    下記のようなマクロを使ってn個あるシートの内容を「集計」シートにコピーさせるようにしました。 (自動マクロとの組合せなので、スマートではないかもしれませんが) でも、これだと「集計」シートもコピー作業を行ってしまうので、 「集計」シートはコピー作業をしないように除外したいのですが、どうしたら良いのでしょう? 実際にはシート数は30程度、コピペ項目は1シートあたり30項目程度あります。 よろしくお願いします。 ------------------------- Sub テスト2() ' For i = 1 To Worksheets.Count '案件番号等コピー ' Sheets(i).Select Range("D3").Select Application.CutCopyMode = False Selection.Copy Sheets("集計").Select Range("A4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '案件名 Sheets(i).Select Range("F3").Select Application.CutCopyMode = False Selection.Copy Sheets("集計").Select Range("B4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '国名 Sheets(i).Select Range("E3").Select Application.CutCopyMode = False Selection.Copy Sheets("集計").Select Range("C4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '選択セルの解放 Application.CutCopyMode = False '行挿入 ' Sheets("集計").Select Rows("4:4").Select Selection.Insert Shift:=xlDown Next i End Sub

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • 任意の複数行をコピーするマクロ

    VBを勉強中の初心者です。 マクロの自動記録でシート1の5~6行目をシート2のセルA3へコピーすることはできました。マクロの内容は   Sheets("Sheet1").Select   Rows("5:6").Select   Selection.Copy   Sheets("Sheet2").Select   Range("A3").Select   ActiveSheet.Paste となっていました。 上記のシート1の5~6行目を任意の複数行(例えば A1 に 200306 A2 に 200307 A3 に 200307 A4 に 200307 A5 に 200308 A6 に 200309 A7 に 200309 のデータがあった場合、コピーしたい年月が 200307 の場合は A2 ~ A4 をシート2のA3へ)でコピーしたいのですが、どうすればよいのかどなたか教えて下さい。よろしくお願いします。

  • Excelのマクロで現在行を指定する方法を

    Excelのマクロで現在行を変えて、現在見ている行にする方法を教えてください。 下記は操作を記録させて作成したものですが、これを例えば、Excelの213行で実行させると 205行に196~203行が再度追加されてしまいます。 これを変えて、現在見ている例えば213行の前に196~203行を入れたいという場合はどうすればいいのでしょうか? つまり、Rows("205:205").Selectの205というのを、現在見ている行に変更できれば良いように思うのですが。よろしくお願いします。 Sub Macro3() ' Keyboard Shortcut: Ctrl+Shift+A   Rows("196:203").Select   Selection.Copy   Rows("205:205").Select   Selection.Insert Shift:=xlDown   ActiveWindow.SmallScroll Down:=9 End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

専門家に質問してみよう