• ベストアンサー

エクセル行の挿入

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/17068)
回答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くらいまで、ランダムです。 終わりの条件はなしです。 教えていただけると本当に助かります。 どうかお願いいたします。 お忙しいところすみません。

関連するQ&A

  • エクセルマクロ、空白行(セル)の挿入

    データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。

  • 行を挿入するマクロ

    エクセルマクロ(VBA)で    A 1  B 2  C 2  D 1 上記の場合、数字の数だけ行を挿入したいのですが、うまく出来ません。 Aの下に1行。Bの下に2行。Cの下に2行。Dの下に1行という感じです。 教えていただければありがたいです。よろしくお願いいたします。

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

  • excelのマクロで条件による行の挿入

    列AとBがあり列Aに学校のクラス名A組、B組、C組・・・(20クラスほど)と氏名が 入るエクセルシートがあるのですが 先頭行はA組から始まり5行区切りで数え、(A組も5行のうちに入る) その5行内に次のB組が入らないように空白行を挿入したいです もし、5行以内にB組がない場合、次の5行でまたB組があるか判定しなければ氏名5つ あれば空白をいれてというのを20クラスぶん作るマクロは可能でしょうか? VBAの知識がさっぱりないので途方にくれています。 元のデータの例   マクロ実行後 列A   列B      列A   列B A組           A組   氏名1 111      氏名1 111  氏名2 222      氏名2 222 B組           空白行挿入 氏名3 333      空白行挿入 氏名4 444      B組 氏名5 555      氏名3 333 氏名6 666      氏名4 444 氏名7 777      氏名5 555 C組 氏名6 666              氏名7 777              空白行挿入              空白行挿入              空白行挿入              空白行挿入              C組  

  • エクセルのマクロ(行を挿入し連番を振る)

    ボタンを押すと以下のことを実行するマクロを作成することはできますか? A列2行目から 書類a 書類b 書類c 書類d 書類e C列2行目から 5 3 2 4 3 と入っています。C列は各書類の枚数です。 ボタンを押すと書類aと書類bの間に4行空白行が挿入され、A列とC列は増やした4行にそれぞれ書類a、5がコピーされ、B列には2列目から6列目まで1.2.3.4.5と連番が振られる。 というマクロです。 B列C列で1/5 2/5 3/5 4/5 5/5 であるという表現がしたいのです。(/は入りません) 書類が1枚の場合はB列C列共に空白で1/1とは入りません。 C列に入る書類の枚数により行が挿入されその書類の枚数分の連番が振られるようなマクロが作りたいです。 毎日何百行も手作業で挿入しコピーし連番を振る作業をしています。 決まった行数を増やすとか上の行をコピーするマクロならわかるのですが、C列の値を見て挿入する行数を判断するようなマクロができるのかわかりません。 どなたか教えて頂けないでしょうか。

  • エクセルの参照行の挿入による追加と行の削除に対応できる関数を教えてくだ

    エクセルの参照行の挿入による追加と行の削除に対応できる関数を教えてください。 sheet1を印刷用ページ、sheet2をデータ用ページとしています。 sheet2は頻繁に追加や削除をするのですが、単純な =sheet1!A1 ですと、 sheet2に追加してもsheet1に追加されたデータが反映されない。 sheet2の行を1つでも削除するとsheet1のその行は#REF!というエラーに。 という状態です。下記内容に対応できる関数はあるでしょうか。 sheet2がこのような時 行  A あ B い C う D え sheet2Dに「お」を挿入すると sheet1がこのようになるように。 行  A あ B い C う D お E え また、B行を削除したらsheet1が 行  A あ B う C え となるように。 そして、可能ならばコピーのドラッグで複製できるようにしたいのですが・・・ 条件が色々ありますが、よろしくお願いします。

  • 関数が含まれたセルの行をマクロで挿入する

    セルD2には、IF関数が含まれている、以下の表があります。2行目に行をマクロで挿入して大きな表を作成する予定です。        A       B       C      D      1    納入数   使用m数   納入m   使用m 2                           〔=if(B2>1,C2,"")〕 マクロは、以下のようにして、2行目に行を挿入したのですが、IF文が含まれたものが 挿入できません。どのようなマクロ文にしたらよいかわからず困っています。別シートからコピーする 方法も考えられますが、同じシート内で収めたいと考えています。宜しくお願いします。 Sub 行挿入() ' ' 行挿入 Macro ' ' Range("a2:d2").Insert copyorigin:=xlFormatFromRightOrBelow End Sub

  • エクセル 行挿入のマクロについて

    こんばんは、エクセルのマクロについてお伺いします。 現在 A1:支店名 B1:連番 C1:在庫数 全部で1000行位入力があります。 ・A列には支店名 ・B列には連番は1・2・3~と1000件位 ・c列には在個数にはそれぞれ1桁から2桁の数字 【質問】 在庫数の数だけその連番の行を増やしたい。 例えば、 A2:東京支店 B2連番:1 C2在庫数:3 だとすると2行目のあとに2行挿入し在庫数が3なので下記のように3行にしたい。 A2 東京支店 B2連番 1 C2 在庫数 1 A3 東京支店 B3連番 1 C3 在庫数 空欄 A4 東京支店 B4連番 1 C4 在庫数 空欄 何せ数が多いのでマクロをお教え頂ければ助かります。 ※その際、支店名と連番は同じ物がはいるとありがたいです。 ※在庫数は空欄で構いません。 マクロでなくても方法があればお教え下さい。 よろしくお願い致します。

  • 行挿入+貼付けと空白行削除を同時に行うには?

    行挿入+貼付けと空白行削除を同時に行うには? VBA初心者です。 仕事でエクセルを使っていますが、 no  工程1 工程2 工程3 1   A   B   C 2   B   _   A 3   C   A   _ 4   _   C   A という表を no  工程 1   A     B     C 2   B     A 3   C     A 4   C というように並び替えたいのですが、 現在は各番号ごとに3行挿入して工程をコピー、行と列を入れ替えて貼付けをしています。 これだと no  工程 1   A     B     C 2   B      A 3   C     A 4     C     A のように空白行ができてしまいます。これをもう一度、マクロで消しているのですが、 データ量が多いため、行挿入と空白行を消す作業を同時に行わないとシート最大行数である 65536行を超えてしまう可能性があります。 同時にやるにはどのようにすればよいのでしょうか? よろしくおねがいします。

  • エクセルで1行ごとに空白行を挿入し、挿入した空白行に色をつけたいです

    タイトルの通りです。 エクセル(2000)で、データはシート毎に件数が違います。 各シート毎にそれぞれ1行毎、空白行を挿入し、挿入した空白行のA列~G列までに薄いグレーの色をつけるマクロを入れたいのですが、うまくいきません。 詳しい方、教えて下さい。

専門家に質問してみよう