• 締切済み

エクセル 行の挿入

エクセルの行の挿入方法を教えてください。 http://okwave.jp/qa1095365.html?rel=innerHtml&p=bottom&l=1 上記の質問のマクロをコピーし、少し加工して使用させていただいてます。 Sub Macro1() Dim lngCnt As Long '処理行のカウント Dim intCnt As Integer '挿入行数セット ''初期行セット lngCnt = 5 '' 処理行のD列に文字がなくなるまで繰り返す Do Until Cells(lngCnt, 4) = vbNullString ''挿入行数セット intCnt = Cells(lngCnt, 4) + 1 ''挿入行分繰り返す Do Until intCnt <= 0 ''次の行に進む lngCnt = lngCnt + 1 ''行の選択 Rows(lngCnt & ":" & lngCnt).Select ''行の追加 Selection.Insert Shift:=xlDown ''1行追加したので挿入行数から1引く intCnt = intCnt - 1 Loop ''処理行数カウントアップ lngCnt = lngCnt + 1 ''1シートの最大行数を超えたか? If lngCnt > 65536 Then MsgBox "1シートの最大行数を超えました" Exit Do End If Loop ''A1を選択 Range("A1").Select End Sub このマクロでは '' 処理行のD列に文字がなくなるまで繰り返す Do Until Cells(lngCnt, 4) = vbNullString なので、一行抜けてしまうとマクロが止まってしまいます。 これをD行に数字が入っている所はすべて増えるように?止まらないようにしたいのです。 どうすればいいでしょう? 宜しくお願いします。

みんなの回答

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

  質問のような場合は、最終行から上へ処理した方がいいでしょう。 て、Doではなく、For Nextのサンプルをひとつ。 D5~D列最終行までを対象にし、 未入力のセルは処理をジャンプする また、D列の入力値と同じ行数を挿入する (例えば、セルの値が、"3"だったら、3行挿入) '----------------------------------------- Sub test()  Dim R As Long  Dim StartRow As Long  Dim LastRow As Long  StartRow = 5  LastRow = Cells(Rows.Count, "D").End(xlUp).Row  For R = LastRow To StartRow Step -1   If Cells(R, "D").Value > 0 Then     With Cells(R, "D").Offset(1).Resize(Cells(R, "D").Value, 1)       .EntireRow.Insert xlDown     End With   End If  Next R End Sub '------------------------------------------------- なお、シート最終行(65536)のチェックはしてないので 必要なら自分で考えてみること。 以上です。

sumomo61
質問者

お礼

ありがとうございました。 testしたらできました。 マクロをもう少し勉強してみます。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

空白セルの場合の処理方法が判らないので、具体的なコードは書けませんが Range("D65536").End(xlUp).Row で、D列で、データーが入っている最後の行が判りますので、これで得られた行まで、処理を続ける様にすれば良いのでは? また、今回の様に、処理によって行数が増えたり減ったりする場合は、後ろ(下)から処理していくと、コードが簡単になりますよ

sumomo61
質問者

お礼

ありがとうございました。

関連するQ&A

  • Excel VBA のDo Until Loopについて

    こんばんは Excel VBAの初心者です。 Do Until Loopを使って B列の値が変わるところ(下記の表だと、空白からコスモスに変わる、4行目。コスモスからチューリップに変わる6行目。チューリップから菊に変わる8行目。)に行を挿入させたいと思い、下記のマクロを組んだのですが、Do Until Loopが理解できませんでした。 どうしたら良いのか教えて頂けないでしょうか。 宜しくお願い致します。 Excelのシート B1  項目 B2  空白 B3  空白 B4  コスモス B5  コスモス B6  チューリップ B7  チューリップ B8  菊 Sub 行の挿入() Dim y As String Cells(2, 2).Select y = Cells(2, 2).Value Do Until Cells(2, 2).Value <> y ActiveCell.Offset(1).Select Selection.EntireRow.Select Selection.Insert shift:=xlDown Loop End Sub

  • エクセルでの行のまとめ方

    エクセルで、データの塊を1行にまとめたいと思っています。 例) ┌─┬─┬─┐ │A │B │C │ ├─┼─┼─┤ │D │E │F │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │G │H │I │ ├─┼─┼─┤ │J │K │L │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │M │N │O │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │P │Q │R │ ├─┼─┼─┤ │S │T │  │ ├─┼─┼─┤ この様に並び替えたいのです。 ┌─┬─┬─┬─┬─┬─┐ │A │B │C │D │E │F │ ├─┼─┼─┼─┼─┼─┤ │G │H │I  │J │K │L │ ├─┼─┼─┼─┼─┼─┤ │M │N │O │  │  │  │ ├─┼─┼─┼─┼─┼─┤ │P │Q │R │S │T │  │ ├─┼─┼─┼─┼─┼─┤ つまり、データの1行目の後に2行目を貼り付ける。これをデータの塊分で処理を行いたいです。 データが3行あれば、データの1行目の後に2行目、2行目の後に3行目を貼り付けるみたいなイメージです。 ※1:データの塊と言うのは、上記で言うと、[A~F]、[G~L]、[M~O]、[P~T]になります。 ※2:列の数は上記では3列ですが、3列以上存在しています。 ※3:データの塊は例では2行になっていますが、データによっては2行以上存在する事があります。 ※4:但し、例えばデータの塊が2行であれば、その他のデータの固まりも2行ごとになります。 ※5:データが空白になっている場合があります。 ※6:データの塊と塊の行の間には、必ず空白行が存在しています。 下記のようにマクロ作って見ましたがうまく動きません。 解決策や、他にこのようにした方が良いよと言うのがあれば教えて下さい。 Sub TEST() '-------- x = 5 '-------- '-------- i1 = 26 '-------- o = 1 '行数チェック Do Until Cells(o, 1).Value = "" t = 1 '列数 s = i1 + 1 Do Until t = i1 + 1 Cells(o, s).Value = Cells(o + 1, t).Value Cells(o, s + i1).Value = Cells(o + 2, t).Value Cells(o + 1, t).Value = "" Cells(o + 2, t).Value = "" s = s + 1 t = t + 1 Loop o = o + x + 1 Loop

  • 【エクセルマクロ】小計下への空白行挿入

    マクロ初心者です。 日付ごとのデータがありまして、 webで検索した次のマクロを使って、 ' 1行目から処理開始(見出しなし) GYO = 1 Do While Cells(GYO, 1).Value <> "" ' 小計グループの先頭行→GYO1 GYO1 = GYO GYO = GYO + 1 ' 次の行から同じグループでない行を見つける Do While Cells(GYO, 1).Value = Cells(GYO1, 1).Value GYO = GYO + 1 Loop ' 同じグループの最終行→GYO2 GYO2 = GYO - 1 ' 小計行を挿入 Rows(GYO).Insert Cells(GYO, 2).Value = Cells(GYO1, 1).Value & "月の小計" Cells(GYO, 3).Value = " ********** " Cells(GYO, 6).FormulaR1C1 = "=SUBTOTAL(9,R" & GYO1 & "C:R" & GYO2 & "C)" Cells(GYO, 7).FormulaR1C1 = "=SUBTOTAL(9,R" & GYO1 & "C:R" & GYO2 & "C)" Cells(GYO, 8).FormulaR1C1 = "=SUBTOTAL(9,R" & GYO1 & "C:R" & GYO2 & "C)" GYO = GYO + 1 Loop ' 総合計 Cells(GYO, 2).Value = "年度合計" Cells(GYO, 3).Value = " ********** " Cells(GYO, 6).FormulaR1C1 = "=SUBTOTAL(9,R1C:R" & GYO2 & "C)" Cells(GYO, 7).FormulaR1C1 = "=SUBTOTAL(9,R1C:R" & GYO2 & "C)" Cells(GYO, 8).FormulaR1C1 = "=SUBTOTAL(9,R1C:R" & GYO2 & "C)" 次のように、小計と年度計を挿入できるのですが、 見にくいので、小計の下に1行挿入したいのです。 4/1    ○○○ ¥□□ | 4/30    ○○○ ¥□□ 4月の小計 **** ¥□□ 5/1    ○○○ ¥□□ | 5/31    ○○○ ¥□□ 5月の小計 **** ¥□□ 6/1 |  (途中省略) 4/30 4月の小計 **** ¥□□ 年度計  **** ¥□□ マクロに詳しい方、アドバイスよろしくお願いします!

  • 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

  • エクセルVBAの繰り返し処理の質問

    C列にある項目とG列にある項目を比較して、 一致し、H列にある数字が10以上ならば、B列にフラグ1を立てる という処理を行いたいんですが、 下記ぐらいまでしか作れず、うまくいきません・・・ Sub フラグを立てる処理() Dim i As Integer Dim j As Integer Dim k As Integer i = 1 j = 1 Do j = j + 1 Do i = i + 1 If Cells(j, 8) > 9 Then Cells(i - 1, 4) = 1 End If Loop Until Cells(i, 3) <> Cells(j, 7) Or Cells(i, 3) = "" Loop Until Cells(j, 7) = "" End Sub わかる方がいらっしゃいましたら、お願いします。

  • 【マクロ】任意の行の下へ行の挿入&選択

    セルA3:DS750の表があります。 1行=1顧客として使用していますが、度々表に行を挿入して顧客を追加しています。 その為、以下のマクロを作ってみたのですが、最後に【挿入した行をActiveにする】事ができません。 ★挿入位置は、都度変わります。 ★一度に行う挿入行数は1行(多くても3行)の為、マクロは1行追加で作成しています。(行数の指定までは力量により出来ませんでした・・) ★1行目にサンプルを(非表示で)置いて、それを任意の行へ挿入させています。 1行目のサンプルを非表示のまま貼り付けると、挿入した行も非表示になってしまったので、一度再表示させてから処理させています。 サンプル行には、条件書式、数式などがところどころ入っています。 処理の最後に【'行を指定して挿入】と同じ行をActiveにする方法が知りたいです。 記録マクロをいじっただけなので見づらいと思いますが、よろしくお願い致します。 -------------------------------- Sub 挿入() '1行目を再表示 Rows("1:1").Select Selection.EntireRow.Hidden = False '1行目をcopy Rows("1:1").Select Selection.Copy '行を指定して挿入 InsertRow = InputBox("何行目の下に挿入しますか?") + 1 Cells(InsertRow, 1).Insert Shift:=xlDown '1行目を非表示 Rows("1:1").Select Selection.EntireRow.Hidden = True '挿入した行をactiveにする ・・・ end Sub -------------------------------- マクロが根本的におかしかったらすみません。。 アプローチ方法が他にある場合にもご指摘いただけると助かります。

  • エクセル行の挿入

    excelに行を追加する方法を教えてください! Bにある数からマイナス1行下に挿入したいのです。 1→挿入なし  2→下に1行挿入  3→下に2行挿入 数よりマイナス1行の挿入をしたいのですが、 マクロ、関数など全く分かりません。 以前の質問も見てみたのですが、見当たらないのと、 マクロ?が全くわからないので、 どなたか一から教えていただけないでしょうか? 本当に申し訳ないのですが、お願いします。 Aにkkkk Bに数が入ります。   A | B | C | D ------------------------------------- 1| kkkk   2 ------------------------------------- 2| kkkk   1 ------------------------------------- 3| kkikk   3 ------------------------------------- 4| kkkk   2 ↓行の挿入   A | B | C | D ------------------------------------- 1| kkkk   2 ------------------------------------- 2| kkkk   空白(行の挿入) ------------------------------------- 3| kkikk   1 ------------------------------------- 4| kkkk   3 ------------------------------------- 5| kkkk   空白(行の挿入) ------------------------------------- 6| kkkk   空白(行の挿入) ------------------------------------- 7| kkkk   2 ------------------------------------- 8| kkkk   空白(行の挿入) -------------------------------------

  • エクセルマクロ・ユーザーフォームの初期設定

    マクロのユーザーフォームを使って、書式を作っています。 ユーザーフォームを開くと、自動的にシリアルナンバーが出るようにしたいのですが、出てきません。 どのように訂正すれば宜しいでしょうか? ※マクロのテキストを元に、値のみ変更して入力しています。 -----Private Sub UserForm7_Initialize()----- Dim myRow As Long '行番号の変数 Dim mySno As Integer '登録開始番号の変数 Dim myMaxNo As Integer '最大登録件数の変数 With Worksheets("規定") '規定'シートで担当者の入力が始まる行 myRow = 4 '登録開始番号と最大登録件数をセット mySno = 1 myMaxNo = 4 '担当者データを読み込みコンボボックスに登録 Do Until .Cells(myRow, 2).Value = "" omboBox1.Value.AddItem .Cells(myRow, 2).Value myRow = myRow + 1 Loop End With '「精算書」シートの1件目の行番号をセット myRow = 12 '「精算書」データシートの登録No.の新規入力行を求める。 Do Until Cells(myRow, 22).Value = "" myRow = myRow + 1 Loop '登録No.テキストボックスに新規の番号をセット TextBox1.Value = mySno + myRow - 12 ----End Sub------

  • Excelマクロ

    お世話になります。 Excelのマクロに関する質問です。 目的としては、D列に様々な文言が入っており、 D列に記入されている各文言の数をカウントしたいと思っています。 ただし、D列の各文言が複数あった場合でも、 A列が同じ値の場合は数に含めない、という条件があります。 ex)D列に「りんご」という文言が10個あります。   D列に「りんご」と記入されている行のA列は、 「赤」「青」の2パターンしかありません。 ⇒この場合、「2」とカウントしたいです。 現在、以下のマクロを考えています。 =========================================================== sub test() Dim i As Long, x As Long, cnt As Long, buf As Object '「i」「x」「cnt」を数値として定義。「buf」にD列の値を格納します。 x = 4 '4行目以降を対象としています。 Do While Cells(x, 1).Value <> "" 'A列が空白でない場合のみを対象とします。 cnt = 0 '各行のD列に入っている値の数を数えるため、まずはカウントを0にします。 i = 4 '4行目以降を対象としています。 Set buf = Cells(x, 4) ' D列の値を変数「buf」に格納します。 Do While Cells(i, 1).Value <> "" 'A列が空白でない場合のみを対象とします。 If Cells(i, 4).Value = buf And Cells(i, 1).Value <> Cells(x, 1).Value Then  ' D列の値が「buf」に格納した値と同じ、かつ、       ' A列の値が、bufに値を格納した時と異なる場合のみ対象 cnt = cnt + 1 '数を数える対象であれば、+1します。 End If i = i + 1 '次の行に移るために+1します。 Loop Cells(x, 5).Value = cnt ' E列にcntに格納された値を入力 x = x + 1 '次の行に移るために+1します。 Loop end sub ===================================================== 上記のマクロでは、E列にカウント後の数らしいものが入力されるのですが、 値が正しくないようです。 お力添えをいただけますでしょうか。 よろしくお願いいたします。

  • 挿入した行の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等)を教えて頂けないでしょうか。

専門家に質問してみよう