• ベストアンサー

エクセルのマクロでセルの内容によって行を挿入

エクセルのマクロでこんなことは出来るのでしょうか。   A    B 1 東京  1 2 大阪  3 3 札幌  2 4 福岡  1 5 横浜  2 上記のような表をマクロの処理で下記のように書き換えることは出来るでしょうか。   A    B 1 東京  1 2 大阪  1 3 大阪  1 4 大阪  1 5 札幌  1 6 札幌  1 7 福岡  1 8 横浜  1 9 横浜  1 B列に入ってる数字の分だけ行を作りたいのです。 (B列の数字マイナス1行を挿入する形になります) 書き換えがややこしければ、別の場所に作り直してもかまわないので お願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 これは、記録マクロの延長上にあると思いますから、下から取れば、簡単に出来てしまうと思います。 Sub RowsEntries()   Dim i As Long   Dim j As Long   Application.ScreenUpdating = False '画面の切り替えを止める   For i = Range("B65536").End(xlUp).Row To 1 Step -1     j = Cells(i, 2).Value 'B列の値を取る     If j > 1 Then       Cells(i, 1).Resize(, 2).Copy       Cells(i, 1).Resize(j - 1).Insert Shift:=xlDown       Cells(i, 2).Resize(j).Value = 1     End If   Next i   Application.CutCopyMode = False   Application.ScreenUpdating = True End Sub

char0078
質問者

お礼

ありがとうございます。 御礼が遅くなって申し訳ありません。 下から上へ行く方法があるとは。 とてもシンプルで分かりやすい方法ですね。 記述の短さと分かりやすさで20pt付けさせていただきました。 また勉強しなおしてきます。

その他の回答 (2)

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

行挿入・削除は、そのロジックを良く考えて、作らないと、自分の実行いている行や、追加すべき行を混乱するものになりがちです。 下記は、現在データの下に増加させて、現在データはそのままにして、その点の判りにくさを避けています。 Sub test01() d = Range("A65536").End(xlUp).Row ' MsgBox d k = d + 1 For i = 1 To d Cells(i, "C") = i If Cells(i, "B") = 1 Then Else For j = 1 To Cells(i, "B") - 1 Cells(k, "A") = Cells(i, "A") Cells(k, "B") = 1 Cells(k, "C") = i k = k + 1 Next j Cells(i, "B") = 1 End If Next i End Sub 最下行dを求め、増やすのはその下の部分の行にして、ポンインタK を使って1行増追加するごとにKも1足してます。 あと終了後C列でソートします。 結果 東京 1 1 大阪 1 2 大阪 1 2 大阪 1 2 札幌 1 3 札幌 1 3 福岡 1 4 横浜 1 5 横浜 1 5 B、C列が不要なら削除。 Range("B:C").EntireColumn.Delete をコードの最後(end SUBの直前)に入れておく。

char0078
質問者

お礼

ありがとうございます。 御礼が遅くなって申し訳ありません。 データを増やして並べ替えとはとても思いつきませんでした。 色々な方法があるのですね。勉強になりました。

  • survey
  • ベストアンサー率26% (17/65)
回答No.1

Sub Kakikae() ' 初期設定 Dim A() as String,B() as Integer,Counter as Integer, _ i as Integer,j as Integer,Gyou as Integer Redim A(0),B(0) ' データの取得 Do ' B行が空の場合はループから出る A(0)=Range("B2").Offset(Counter,0) B(0)=Range("C2").Offset(Counter,0) If A(0)="" Then Exit Do End If ' 配列の拡張 Counter=Counter+1 Redim Preserve A(Counter),B(Counter) ' データ格納 A(Counter)=A(0):B(Counter)=B(0) DoEvents Loop ' 書き込み For i=1 to Counter For j=1 to B(i) ' 行番号 Gyou=Gyou+1 Range("A1").Offset(Gyou,0)=Gyou ' A,B Range("B1").Offset(Gyou,0)=A(i) Range("C1").Offset(Gyou,0)=1 DoEvents Next j Next i End Sub

char0078
質問者

お礼

ありがとうございます。 御礼が遅くなって申し訳ありません。 やってみましたが、うまく動かず、私には難しすぎました。 勉強しなおしてきます。

関連するQ&A

  • エクセルマクロにて条件比較後にセル挿入をしたい

    下記の様な表(処理前)があるとします。 2行目から行毎に"A列 = C列 AND B列 = D列"という比較を行い、 TRUEなら次の行へ、FALSEなら該当行のC列とD列に 空白セルを挿入し(処理後の表の様にしたいです)次の行へ進む という処理をマクロにて実現したいです。 どのようなマクロを組めば宜しいでしょうか?ご教授お願い致します。 <処理前> A列 B列 C列 D列 東京 斎藤 東京 斎藤 東京 田中 東京 後藤 東京 伊藤 東京 井上 東京 後藤 東京 三沢 東京 井上 大阪 田中 東京 三沢 <処理後> A列 B列 C列 D列 東京 斎藤 東京 斎藤 東京 田中 <両列に空白セル挿入> 東京 伊藤 <両列に空白セル挿入> 東京 後藤 東京 後藤 東京 井上 東京 井上 大阪 田中 <両列に空白セル挿入> 東京 三沢 東京 三沢

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

    こんばんは、エクセルのマクロについてお伺いします。 現在 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 在庫数 空欄 何せ数が多いのでマクロをお教え頂ければ助かります。 ※その際、支店名と連番は同じ物がはいるとありがたいです。 ※在庫数は空欄で構いません。 マクロでなくても方法があればお教え下さい。 よろしくお願い致します。

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

    ボタンを押すと以下のことを実行するマクロを作成することはできますか? 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列の値を見て挿入する行数を判断するようなマクロができるのかわかりません。 どなたか教えて頂けないでしょうか。

  • Excelの行挿入で

    Excelのシートにデータがつまっているのですが(これから新しく表を作るということではないということです。)、行の挿入をしたいのです。 このとき、行を選択して、右クリックで「挿入」を選べば挿入自体はできます。 しかし、 既にある表は、行が、A列とB列が結合されているのですが、 単に上記のように挿入すると、 A列B列が分かれている行が挿入されてしまいます。 新しく挿入された行のA列とB列を選択して、「セルの書式設定」の「配置」でセルを結合させてもいいのですが、 いちいちそうしなくても 挿入時点ですでに結合されているようにするにはどうすればよいですか。 (Excel2000)

  • エクセル マクロでの行挿入は・・・・

    マクロを勉強中です。 特定の列の値(下の表では5列の『サブコード』です)が、 4~6 の時に、1行挿入し上の行のコピーを貼りつけ、 7~9 の時は、2行挿入して上の行をコピー貼りつけ・・・ という作業が、マクロでできますでしょうか? ご回答を、お待ちしております。 どうか、よろしくお願い致します (u_u)

  • 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組  

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

    セル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

  • エクセル行の挿入

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

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

    データが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行という感じです。 教えていただければありがたいです。よろしくお願いいたします。

専門家に質問してみよう