• ベストアンサー

エクセル行の挿入

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   空白(行の挿入) -------------------------------------

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

  • ベストアンサー
  • TT_TT
  • ベストアンサー率17% (16/90)
回答No.3

まず (1)メニューバー⇒ツール⇒マクロ⇒Visual Basic Editorを実行 (2)メニューバー⇒挿入⇒標準モジュールをクリックし 下記のコードを貼り付けて保存して下さい。 Sub Macro1() Dim lngCnt As Long '処理行のカウント Dim intCnt As Integer '挿入行数セット ''初期行セット lngCnt = 1 '' 5000行分繰り返す Do Until Cells(lngCnt, 1) = vbNullString ''現在の行のB列のセルがスペースじゃないか? If Cells(lngCnt, 2) <> vbNullString Then ''現在の行のB列のセルを-1したものがゼロより上か? If Cells(lngCnt, 2) - 1 > 0 Then ''挿入行数セット intCnt = Cells(lngCnt, 2) - 1 ''挿入行分繰り返す Do Until intCnt <= 0 ''次の行に進む lngCnt = lngCnt + 1 ''1シートの最大行数を超えたか? If lngCnt > 65536 Then Exit Do End If ''行の選択 Rows(lngCnt & ":" & lngCnt).Select ''行の追加 Selection.Insert Shift:=xlDown ''追加行のA列に"kkkk"挿入 Cells(lngCnt, 1) = "kkkk" ''1行追加したので挿入行数から1引く intCnt = intCnt - 1 Loop End If End If ''処理行数カウントアップ lngCnt = lngCnt + 1 ''1シートの最大行数を超えたか? If lngCnt > 65536 Then MsgBox "1シートの最大行数を超えました" Exit Do End If Loop ''A1を選択 Range("A1").Select End Sub (3)Visual Basic Editorを閉じてExcelのメニューバー⇒ツール⇒マクロ⇒マクロをクリックし、先ほど保存したマクロを実行して下さい! これで出来ると思います~

その他の回答 (5)

  • TT_TT
  • ベストアンサー率17% (16/90)
回答No.6

返事遅くなってすいません 私のPCは大丈夫だったんですけどね~ Sub Macro1()からEnd Subまでそのまま貼り付けてくれればOKのはずなのですがスタック領域が不足ということは 多分PCのスペックなどの問題ではないでしょうか? ちょっと改良してみましたので試してみて下さい ダメならもう一度連絡して下さい ----------------------------------------------- Sub Macro1() Dim lngCnt As Long '処理行のカウント Dim intCnt As Integer '挿入行数セット Dim intSaveCnt As Integer 'SAVE用カウント ''初期行セット lngCnt = 1 ''初期値セット intSaveCnt = 0 '' 処理行のA列に文字がなくなるまで繰り返す Do Until Cells(lngCnt, 1) = vbNullString ''現在の行のB列のセルがスペースじゃないか? If Cells(lngCnt, 2) <> vbNullString Then ''現在の行のB列のセルを-1したものがゼロより上か? If Cells(lngCnt, 2) - 1 > 0 Then ''挿入行数セット intCnt = Cells(lngCnt, 2) - 1 ''挿入行分繰り返す Do Until intCnt <= 0 ''次の行に進む lngCnt = lngCnt + 1 ''セーブのカウント intSaveCnt = intSaveCnt + 1 ''セーブカウントが2000以上の場合保存する If intSaveCnt > 2000 Then ActiveWorkbook.Save intSaveCnt = 0 End If ''1シートの最大行数を超えたか? If lngCnt > 65536 Then Exit Do End If ''行の選択 Rows(lngCnt & ":" & lngCnt).Select ''行の追加 Selection.Insert Shift:=xlDown ''追加行のA列に"kkkk"挿入 Cells(lngCnt, 1) = "kkkk" ''1行追加したので挿入行数から1引く intCnt = intCnt - 1 Loop End If End If ''処理行数カウントアップ lngCnt = lngCnt + 1 ''セーブのカウント intSaveCnt = intSaveCnt + 1 ''セーブカウントが2000以上の場合保存する If intSaveCnt > 2000 Then ActiveWorkbook.Save intSaveCnt = 0 End If ''1シートの最大行数を超えたか? If lngCnt > 65536 Then MsgBox "1シートの最大行数を超えました" Exit Do End If Loop ''A1を選択 Range("A1").Select End Sub ------------------------------------------------

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

関数での解を上げます。 (データ例)Sheet1のA2:C8(c列は関数の結果) A列  B列   C列 a 2 1 b 1 3 c 3 4 d 4 7 e 1 11 f 5 12 g 1 17 C2に1、C3に=C2+B2といれC8まで複写 (関数式)Sheet2のA2に =IF(ISERROR(MATCH(ROW()-1,Sheet1!$C$2:$C$100,0)),"",INDIRECT("sheet1!A"&MATCH(ROW()-1,Sheet1!$C$2:$C$100,0)+1)) と入れて、A18まで複写。 (A1-A18) ・は空白行。 a ・ b c ・ ・ d ・ ・ ・ e f ・ ・ ・ ・ g

  • TT_TT
  • ベストアンサー率17% (16/90)
回答No.4

すいません さっきのソースコードの '' 5000行分繰り返す Do Until Cells(lngCnt, 1) = vbNullString 部分ですが説明を変更するのを忘れてました 正しくは '' 処理行のA列に文字がなくなるまで繰り返す Do Until Cells(lngCnt, 1) = vbNullString です

pause555
質問者

補足

親切にありがとうございます。 実行すると、スタック領域が不足していますになってしますのですが、何か私のやり方が間違っていると 思います。 そのままコピーしてよかったでしょうか?

  • TT_TT
  • ベストアンサー率17% (16/90)
回答No.2

もう一個質問なんですがA列は絶対に 文字が入っているものですか?

pause555
質問者

補足

説明不足で申し訳ありません。 Aには必ず文字が入っています。

  • TT_TT
  • ベストアンサー率17% (16/90)
回答No.1

これは何行目まで続けたいのですか? 又は終わりの条件みたいなものはありますか?

pause555
質問者

補足

TT_TT 様 早速ありがとうございます。 何行かははっきり出ていないのですが、 かなりの行数です。5000近くいくと思います。 商品の在庫管理なので、数は全く決まっていません。 Bの数量は1~20くらいまで、ランダムです。 終わりの条件はなしです。 教えていただけると本当に助かります。 どうかお願いいたします。 お忙しいところすみません。