エクセル マクロでデータごとに1行挿入するマクロを教えてください

このQ&Aのポイント
  • エクセルのマクロを使用して、データごとに1行ずつ挿入する方法を教えてください。
  • A~AW列にデータがあり、同じ品番ごとに1行挿入するマクロを作成したいです。
  • 具体的な方法として、insertの際に新しく挿入された行のC列に式を挿入する方法を教えてください。
回答を見る
  • ベストアンサー

挿入した行のC列に式を挿入

Yahoo知恵袋からの回答の引用で Q エクセル マクロでデータごとに1行挿入するマクロを教えてください。 A~AW列にデータが入っていて、同じ品番ごとに1行挿入するマクロを教えてください。 A Sub insRow() Dim i As Long For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(i, 1).Value <> Cells(i - 1, 1).Value Then Cells(i, 1).EntireRow.Insert (xlShiftDown) End If Next i End Sub このようなものがありますが、この最後のinsertにあたって、挿入されて新しく加わる全ての行のC列に式を挿入する方法(例えば、=A13等)を教えて頂けないでしょうか。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

>式を挿入する あまり奇をてらわず、その通りにするだけでOKですよ。 sub macro1()  dim i as long  for i = range("A65536").end(xlup).row to 3 step -1   if cells(i, "A") <> cells(i - 1, "A") then    cells(i, "A").entirerow.insert shift:=xlshiftdown    cells(i, "C").formula = "=A13"   end if  next i end sub #サンプルマクロの問題点も改善してありますので見逃さないようにしてください。 #肝心の「例えば」じゃないホンモノの数式はご質問じゃないので、自力で解決してください。

tukutukuhosi
質問者

お礼

うーん、ホントそのまんまだったんですね笑 ありがとうございます。うまくできました!

その他の回答 (1)

noname#184160
noname#184160
回答No.1

Microsoftコミニュティ、プロが押してくれます。 http://answers.microsoft.com/ja-jp/windows/forum/windows_8

tukutukuhosi
質問者

お礼

なるほど、このようなサイトもあるのですね。今後、参考にしたいと思います。

関連するQ&A

  • 重複行を完全削除するエクセルのマクロ

    Sub sakujyo() Dim i, ii As Long For i = 1 To Range("a65336").End(xlUp).Row For ii = Range("a65336").End(xlUp).Row To i + 1 Step -1 If Cells(i, 4).Value = Cells(ii, 4).Value _ And Cells(i, 13).Value = Cells(ii, 13).Value Then Delete Shift:=xlUp End If Next ii Next i End Sub マクロに関しては、素人でございます。 こちらのマクロを作ってみたのですがうまくいきません。 4列目と13列目の列が重複したときのみ重複した行をすべて削除させたいと思っております。どうぞお教えください。

  • 条件による行挿入VBAの統合

    Bookごとのデータの内容により次の3つをその都度使い分けていますが これをひとつのVBAに統合したいのですが書き方を教えてください。 (当方詳しくないのでこのVBAも教えられたままのもので自作ではありません) ※A列データのうちタイトル行には■を先頭に入れてあります。 ●「■」があればすべて分割(■タイトルの上の行に1行挿入) Sub 全分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then Rows(r).Insert End If Next End Sub ●タイトルに(1)または(2)が含まれる場合は (1)の上で分割(■の上の行に1行挿入)、(2)のあるA列はセル消去 Sub かっこ2有り分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then If InStr(Cells(r, "A").Value, "(2)") > 0 Then Cells(r, "C").ClearContents End If If InStr(Cells(r, "A").Value, "(1)") > 0 Then Rows(r).Insert End If Cells(r, "A").ClearContents End If Next End Sub ●上記混在の場合(かっこありタイトルとかっこなしタイトルが混在) Sub 混在分割() Dim r As Long For r = 140 To 2 Step -1 If InStr(Cells(r, "A").Value, "■") > 0 Then If InStr(Cells(r, "A").Value, "(2)") > 0 Then Cells(r, "A").ClearContents End If If InStr(Cells(r, "A").Value, "■") > 0 Then Rows(r).Insert End If End If Next End Sub ※かっこ有りに(3)もある場合、(2)と同じ処理 3つを統合した場合の分類のルール A列に■のあるタイトルの処理 ■のあるタイトルごとにタイトルの上に1行挿入 ただしタイトルに(2)(3)が含まれる場合は、上に行挿入せずそのタイトル部分(A列)のセル消去 A列の状況 ■タイトル データ1 データ2 データ3 ■タイトル(1) データ1 データ2 データ3 ■タイトル(2) データ4 データ5 データ6 ■タイトル データ1 データ2 データ3 A列の処理状況 (行挿入) ■タイトル データ1 データ2 データ3 (行挿入) ■タイトル データ1 データ2 データ3 (空白) データ4 データ5 データ6 (行挿入) ■タイトル データ1 データ2 データ3 なおデータの数字(連番)はD列に入れてありますが、 上記ルールにより■のあとや(2)(3)のとき同一タイトルなら連番にしてあるので この1の行を分割の判定としてもいい Office2013/Windows7

  • 下記のマクロはC列5行目から文字の

    下記のマクロはC列5行目から文字の入っている最後の行までの範囲で セル内に蜜柑や林檎、苺の文字が入っていたら同一行のA列にも蜜、林、苺 の文字を入れるというマクロなのですが・・・ たとえばC列12行目が 『蜜柑林檎苺』 となっていた場合、A列に入る言葉は『苺』となり『蜜』『林』という言葉が 消えてしまいます。 そこでこのマクロを少し改造して、 C列が『蜜柑林檎苺』や『蜜柑苺』となっている場合 A列に入る言葉は『蜜林苺』ないし『蜜苺』という風に積み重ねていくように改造はできないでしょうか? ↓この部分を改造すればできるようになりますか? Cells(i, 2).Offset(0, -1).Value = "蜜" Sub 蜜柑林檎苺() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "蜜柑") > 0 Then MsgBox i & "行目アウト!" Cells(i, 2).Offset(0, -1).Value = "蜜" End If If InStr(.Cells(i, "C"), "林檎") > 0 Then MsgBox i & "行目アウト!" Cells(i, 2).Offset(0, -1).Value = "林" End If If InStr(.Cells(i, "C"), "苺") > 0 Then MsgBox i & "行目アウト!" Cells(i, 2).Offset(0, -1).Value = "苺" End If Next i End With End Sub

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

  • マクロで全てのシートで条件を満たすシートに行を挿入するにはどうしたらいいですか

    マクロ初心者です。自分でも作ってみたのですが、なかなか思うようにいかず困っています。 book内のシート3つ目から最後のシートで、条件に一致するシートの特定位置に行を挿入するということがしたいのですが。 条件とは、1列目の最後の行に「合計」と記入されていれば、行を4行挿入し、上の書式をコピーするというものです。 下記に記しているマクロは、シートを指定した場合には動くのですが、これにシートをnとして、FOR...Nextを付け加えてシートを順番に参照させようとしても、うまくいきません。 Sub 行挿入sample3() With Sheets("10007") For i = 7 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(i + 1, 1) = "" Then Exit For ElseIf .Cells(i + 1, 1) = "合計" Then Range(Cells(i + 1, 1), Cells(i + 4, 1)).Select Selection.EntireRow.Insert Range(Cells(i, 1), Cells(i, 3)).Select Selection.Copy Range(Cells(i + 1, 1), Cells(i + 4, 3)).PasteSpecial xlPasteFormats End If Next i End With End Sub 知識をお持ちの方、教えていただけるととても助かります。よろしくお願いします。

  • 13行目のセルの値が0のとき、その列を非表示にする

    Windows7 Excel2007でマクロ作成中の初心者です。 13行目のセルの値が、0のときは、その列を非表示にするというマクロを作ろうとしましたが なかなか難しくておてあげです。探したら次のようなコードがでてきました。 ボタンを押すとK列の値を参照して「A」と表示されている行を隠し、「表示する」ボタンを押すと、 解除するという処理。 Option Explicit Private Sub Cmd隠す_Click()  Dim 行番号 As Long  '行を隠す  For 行番号 = 4 To 13   If Cells(行番号, 11).Value = "A" Then    Cells(行番号, 1).EntireRow.Hidden = True   End If  Next 行番号 End Sub Private Sub Cmd表示する_Click()  '表全体を再表示する  Cells.Select  Selection.EntireRow.Hidden = False  Selection.EntireColumn.Hidden = False  Cells(1, 1).Select End Sub このコードを利用して、13行目のセルの値が、0のときは、その列を非表示にするというコードにしたいのです。 よろしくおねがいします。

  • 数値を入力、ボタンをクリックして行を挿入

    下記はA1に「5」を入力し、マクロを実行すると、A10行より5行分挿入するといったコードですが、シート1のA1に「5」を入力し、マクロを実行するとシート2のA10行より5行分挿入するといったコードを教えてくれませんか? 宜しくお願いします。 Sub Test() Range("A10").Resize(Range("A1").Value).EntireRow.Insert End Sub

  • エクセルで行を挿入して小計合計を出したい

    質問ですが,以下の参考としたマクロについて,データが1支店1件しかない場合は行を挿入せずにこのままとしたい場合はどのように修正すれば良いか教えていただけませんでしょうか。 1支店2件以上のデータがある場合は,以下の参考としたマクロのとおり行を挿入して小計を計算表示する。  支店コード1001 20000円 200円  ← 行挿入不要 小計無し       1002 30000円 200円       1002 45000円 300円       小計 75000円 500円 参考にした質問・アドレス A列に支店コード(4桁の数値)、J列に金額、K列に手数料があります。 支店は5箇所でデータは1支店あたり100~500行ほどあります。全支店のデータが連続しています。 1.支店コードの最終行の下に1行挿入し、J列,K列の小計を計算する。 2.最後の支店の小計の下に一行あけてJ列,K列の合計をしたい。 Sub test01() d = Range("a2").CurrentRegion.Rows.Count ' MsgBox d Cells(d + 1, 1) = "END" Dim st1, gt1, st2, gt2 As Long st1 = 0: gt1 = 0: st2 = 0: gt2 = 0 mk = Cells(2, 1) '========== For i = 2 To 10000 If Cells(i, 1) = "END" Then Exit For '最終行判定 If Cells(i, 1) = mk Then '前行とコード同じか '------今回行分加算 st1 = st1 + Cells(i, 2) st2 = st2 + Cells(i, 3) Else mk = Cells(i, 1) '--------小計 Cells(i, 1).EntireRow.Insert Cells(i, 1) = "小計" Cells(i, 2) = st1 gt1 = gt1 + st1 st1 = 0 Cells(i, 3) = st2 gt2 = gt2 + st2 st2 = 0 '-----今回行分加算 i = i + 1 st1 = st1 + Cells(i, 2) st2 = st2 + Cells(i, 3) End If Next i '============終了 '-------小計 Cells(i, 1) = "小計" MsgBox st1 Cells(i, 2) = st1: gt1 = gt1 + st1: st1 = 0 Cells(i, 3) = st2: gt2 = gt2 + st2: st2 = 0 '-------合計 Cells(i + 1, 1) = "合計" Cells(i + 1, 2) = gt1 Cells(i + 1, 3) = gt2 End Sub   アドレス http://okwave.jp/qa/q414647.html

  • 重複データーの集計、削除

    どなたかご教授下さい。 下記のようにD列に重複する行があればI列に集計し、行削除するマクロを作成しました。 さらに、重複する基準となる列を複数(D列,F列,G列)に増やしたいのですが、上手く出来ません。 宜しくお願い致します。 Sub test() Dim i, j For i = 19 To Cells(Rows.Count, 2).End(xlUp).row - 1 For j = Cells(Rows.Count, 2).End(xlUp).row To i + 1 Step -1 If Cells(i, 4).value = "" Then Exit Sub If Cells(i, 4).value = Cells(j, 4).value Then Cells(i, 9).value = Cells(i, 9).value + Cells(j, 9).value Rows(j).Delete End If Next Next End Sub

  • エクセルの行の削除を配列で高速化したい

    A列にID番号(012345等の文字列化した数字) B列に属性(A、B、C等の文字列) C列に数値  のようなデータがあります。 1行目はタイトル行です。 最優先されるキーをA列、2番目に優先されるキーをB列にして並べ替えてあります。 A列、B列のデータは重複するものがあります。 このデータを、 A列のID番号が同じだった場合、上の属性がA、次の行の属性がBの組み合わせだった場合のみ、下の行のC列の数値データを上の行のC列の数値に加算して、下の行を削除します。 以下のマクロを書き、うまくいきました。 Sub 集計() Dim i As Long, r As Long r = Cells(65536, 1).End(xlUp).Row Application.ScreenUpdating = False For i = r To 2 Step (-1) If Cells(i, 1) = Cells(i - 1, 1) Then If Cells(i, 2) = "B" And Cells(i - 1, 2) = "A" Then Cells(i - 1, 3) = Cells(i - 1, 3) + Cells(i, 3) Rows(i).Delete End If End If Next Application.ScreenUpdating = False End Sub しかし、データ数が多いので1分以上かかってしまいます。 多分、配列に取り込んで処理できれば飛躍的に高速化できるとは思うのですが、 V = Range(Cells(2, 1), Cells(r, 3)).Value と取り込んだあと、どう処理したらいいのかわかりません。 教えてください。

専門家に質問してみよう