- ベストアンサー
エクセル行の挿入
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 空白(行の挿入) -------------------------------------
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
まず (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)
返事遅くなってすいません 私の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)
関数での解を上げます。 (データ例)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)
すいません さっきのソースコードの '' 5000行分繰り返す Do Until Cells(lngCnt, 1) = vbNullString 部分ですが説明を変更するのを忘れてました 正しくは '' 処理行のA列に文字がなくなるまで繰り返す Do Until Cells(lngCnt, 1) = vbNullString です
- TT_TT
- ベストアンサー率17% (16/90)
もう一個質問なんですがA列は絶対に 文字が入っているものですか?
補足
説明不足で申し訳ありません。 Aには必ず文字が入っています。
- TT_TT
- ベストアンサー率17% (16/90)
これは何行目まで続けたいのですか? 又は終わりの条件みたいなものはありますか?
補足
TT_TT 様 早速ありがとうございます。 何行かははっきり出ていないのですが、 かなりの行数です。5000近くいくと思います。 商品の在庫管理なので、数は全く決まっていません。 Bの数量は1~20くらいまで、ランダムです。 終わりの条件はなしです。 教えていただけると本当に助かります。 どうかお願いいたします。 お忙しいところすみません。
補足
親切にありがとうございます。 実行すると、スタック領域が不足していますになってしますのですが、何か私のやり方が間違っていると 思います。 そのままコピーしてよかったでしょうか?