EXCEL VBAでの行コピー、分割の方法について教えてください

このQ&Aのポイント
  • EXCEL VBAを使用して、特定の条件を満たす行をコピー(挿入)し、さらに(数量)を分割する方法について教えてください。
  • 具体的には、(数量)>(マスタ)の場合に(数量)/(マスタ)分を行コピー(挿入)し、さらにB列の(数量)も(マスタ)以下になるように分割する方法について教えていただきたいです。
  • 初心者ですので、具体的なコードや手順を教えていただけると助かります。
回答を見る
  • ベストアンサー

EXCEL VBA について教えてください。

EXCEL VBA について教えてください。 条件を満たす行をコピー(挿入)さらに(数量)を分割する場合 下記のデータで , (品名 ) , (数量) , (マスタ) , (A/B) , A , B , C , D 1 , 商品1 , 1000 , 2000 , 0.5 2 , 商品2 , 3000 , 1000 , 3 3 , 商品3 , 3000 , 2000 , 1.5 4 , , , , 5 , , , , 6 , , , , このように(数量)>(マスタ)の場合に(数量)/(マスタ)分を行コピー(挿入)して , (品名 ) , (数量) , (マスタ) , (B/C) , A , B , C , D 1 , 商品1 , 1000 , 2000 , 0.5 2 , 商品2 , 1000 , 1000 , 1.0 3 , 商品2 , 1000 , 1000 , 1.0 4 , 商品2 , 1000 , 1000 , 1.0 5 , 商品3 , 2000 , 2000 , 1 6 , 商品3 , 1000 , 2000 , 0.5 さらにB列の(数量)も(マスタ)以下になるように分割する。 単に行のコピーだけなら自分でもできるのですが。。。これはさっぱりです。 どうか教えてください。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

淡々と,やるべき事をやってみます。 Sub macro1()  Dim h As Range  Set h = Range("A1")  Do Until h = ""   If h.Offset(0, 1) > h.Offset(0, 2) Then ’多ければ    h.EntireRow.Copy               h.Offset(1).Insert          ’行を挿入して    h.Offset(0, 1) = h.Offset(0, 2)   ’数量をマスタ量にして    h.Offset(1, 1) = h.Offset(1, 1) - h.Offset(0, 1) ’挿入した行はその分減らす   End If   Set h = h.Offset(1)  Loop  Application.CutCopyMode = False End Sub

その他の回答 (2)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

こちらは一旦締めきりのが良いです。

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

A2から実際にデータが始まるものとします。違う場合は、起点の部分を書き換えてください。 位置の変更がある場合でも、起点だけで済むはずです。 '// Sub TestMacro1()   Dim rng As Range   Dim EndRow As Long   Dim i As Long, j As Long, n As Long, k As Long   Dim buf As Variant   Dim Ar() As Variant      With ActiveSheet    '(タイトル行を含む)起点はここに書きます。"A1" -> "A"    Set rng = .Range("A1", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 4)   End With   With rng     EndRow = .Rows.Count     For i = 2 To EndRow       k = .Cells(i, 2).Value / .Cells(i, 3).Value       If k > 1 Then         buf = .Cells(i, 2).Value         For j = 0 To Int(k + 0.5) - 1           ReDim Preserve Ar(3, n)           Ar(0, n) = .Cells(i, 1).Value           If buf > .Cells(i, 3).Value Then             Ar(1, n) = .Cells(i, 3).Value           Else             Ar(1, n) = buf           End If           Ar(2, n) = .Cells(i, 3).Value           Ar(3, n) = Ar(2, n) / .Cells(i, 3).Value           n = n + 1           buf = buf - .Cells(i, 3).Value         Next       Else         ReDim Preserve Ar(3, n)         Ar(0, n) = .Cells(i, 1).Value         Ar(1, n) = .Cells(i, 2).Value         Ar(2, n) = .Cells(i, 3).Value         Ar(3, n) = .Cells(i, 2).Value / .Cells(i, 3).Value         n = n + 1       End If     Next     .Range("A2").Resize(UBound(Ar, 2) + 1, 4).Value = Application.Transpose(Ar)   End With   Set rng = Nothing End Sub

関連するQ&A

  • EXCEL VBA について教えてください。

    EXCEL VBA について教えてください。 先ほど質問した内容ですが、補足ができなかったので、再度質問しています。 条件を満たす行をコピー(挿入)さらに(数量)を分割する場合 下記のデータで , (品名 ) , (数量) , (マスタ) , (A/B) , A , B , C , D 1 , 商品1 , 1000 , 2000 , 0.5 2 , 商品2 , 3000 , 1000 , 3 3 , 商品3 , 3000 , 2000 , 1.5 4 , , , , 5 , , , , 6 , , , , このように(数量)>(マスタ)の場合に(数量)/(マスタ)分を行コピー(挿入)して , (品名 ) , (数量) , (マスタ) , (B/C) , A , B , C , D 1 , 商品1 , 1000 , 2000 , 0.5 2 , 商品2 , 1000 , 1000 , 1.0 3 , 商品2 , 1000 , 1000 , 1.0 4 , 商品2 , 1000 , 1000 , 1.0 5 , 商品3 , 2000 , 2000 , 1 6 , 商品3 , 1000 , 2000 , 0.5 さらにB列の(数量)も(マスタ)以下になるように分割する。 単に行のコピーだけなら自分でもできるのですが。。。これはさっぱりです。 どうか教えてください。 また、データの位置が変わった場合、どこを修正すればよいでしょうか? 例) 品名:P列 数量:R列 マスタ:AR列 よろしくお願いします。

  • EXCEL VBAで

    EXCEL VBAで シート1のA2~G2までの列にA,B,C,D~と題名があり、それぞれの下の行には数字が並んでます。シート2のA2~G2までの列にもA,B,C,D~と題名がありますが、ランダムに並んでます。シート1のAの行を、シート2のAの行に、BにはBへという風にコピーをさせるにはどのようにすればよいでしょうか。またシート1A~Gのどれかが欠けている場合もあります。その場合はシート1にあるもののみコピーすることとします。 わかりにくいかも知れませんか、どうかよろしくお願いします。

  • VBA

    エクセルVBAについて教えてください。 シート1 A列   B列   C列   D列   E列    F列 ・・・            商品A  商品B  商品C  商品D・・・ 日付  名前(1)   3           2     1 日付  名前(2)         1     3  ・     ・     ・     ・     ・    ・  ・     ・     ・     ・     ・    ・  ・     ・     ・     ・     ・    ・ シート2 A列   B列    C列    D列    E列 日付  名前(1)   商品A   3               商品C    2               商品D    1 日付  名前(2)   商品B    1               商品C    3 ・      ・      ・      ・  ・      ・      ・      ・ ・      ・      ・      ・      上記のような、エクセルで作ったシート1があります。 これを、シート2のようにコピーしたいと思っています。 商品は20列あり、数字が入っている列と入っていない列があります。 数字が入っている列の商品と数字をコピーして、すべてコピーが 終わったら次の行のコピーしていく。 行は100ほどあります。 よろしくお願いします。

  • エクセルで表の相違確認をVBAでしたい。

    お世話になっております。 下記の様な表がシート1とシート2に有、 シート2がシート1と比較して、行が多かったり、または 数量だけが変わっていたり、行が減っていたり、 表の行数は100から200行くらいあるので、VBAでどこが 違うかをすぐ分かる様に確認したいと思っています。 下記の表はあくまでも例ですが、実際は同じNO・同じ品番・同じ品名・同じ数量で複数行あったりします。 どの様に記述していいか分からなく、ご教示下さいます様宜しくお願い致します。    記 A列  B列  C列   D列   E列    No  品番  品名   地区   数量  236  A6TET  みかん  市川   3本 248  A7TGR  りんご  松戸   5本 273  B9GKT  ぶどう  柏    14本 273  A8UFE  すいか  行徳   6本    381  C2ROF  いちご  平井   22本

  • EXCEL VBA行のコピー繰り返し

    EXCEL VBAで行の特定の列の数字を読み取りコピーしてすぐに下の行に挿入して次の行へというようなことがしたいと考えております。 例 商品ID1の数量の列の数値を読み取り4なら同じデータを3行追加する。追加後次の項目へ(商品ID2の行へ) VBAで可能でしょうか?

  • ExcelのVBAに詳しい人に質問です

    B列に品名、C列に個数、D列に『COUNTIF関数』を使って品名が重複した場合に重複と出るようにしている表があります。※画像参照 そこで、個数(C列)が空白の行と、重複がある行を削除したいのですが、 これをVBAで簡単に処理できるようにできないでしょうか。 詳しい方アドバイスお願いします。

  • VBA,行列入れ替え挿入

     初めまして、よろしくお願いします。  VBAで、シート  A B C D E 1    9 2    8 3    7 4 5 を  A B C D E 1 2 3 4 5  9 8 7 とC列(C1:C3)を5行目(B5:D5)へと行を挿入していくVBAを教えて頂きたく、よろしくお願いします。

  • エクセルVBAの質問

    お世話になります。 下記の様な表がシート1に有り(行数は日で変動し、大体100から200行位)、F列に数字が有る場合、その行のA列、B列、E列の値をコピーして、シート2のA2からC2に貼付したいのですが、また貼付は、10行ごとに、貼付するスタート位置が変わります。 A2~A11、A16~25、A31~40という具合に10行貼り付けたら次は、5行下からまた続きを貼付ていくイメージです。 どの様な記述をしたら良いでしょうか。ご教示下さいます様宜しくお願い致します。        記 A列  B列  C列   D列   E列   F列 No  品番  品名   地区   数量  236  A6TET  みかん  市川   3本 248  A7TGR  りんご  松戸   5本 273  B9GKT  ぶどう  柏    14本   17 273  A8UFE  すいか  行徳   6本    381  C2ROF  いちご  平井   22本   20

  • エクセルVBAを教えてください。

    エクセルVBAを教えてください。 エクセル初心者です。 仕事の都合で下記のようなマクロを作らないといけないのですが作り方がよくわかりません・・・。 宜しくお願い致します。 ----------------------------------------------- 列A   列B   列C   列D 1行目  名前   金額   日時 2行目  Aさん  100円  12/1 3行目       200円  12/2 4行目       300円  12/3 5行目  合計   600円 6行目  Bさん  100円  12/1 7行目       200円  12/2 8行目       300円  12/3 8行目       400円  12/4 9行目  合計   1000円 10行目  Cさん  100円  12/1 11行目       200円  12/2 12行目  合計   300円 のExcel表があります。 これを下記のように変更したいです。 列を1つ挿入し、追加した列に合計行までそれぞれの人の名前をペーストしたいです。 列A   列B   列C   列D   列E 1行目  名前   名前   金額   日時 2行目  Aさん  Aさん  100円  12/1 3行目       Aさん  200円  12/2 4行目       Aさん  300円  12/3 5行目  合計   Aさん  600円      ←合計欄まで名前をコピーしたいです。 6行目  Bさん  Bさん  100円  12/1 7行目       Bさん  200円  12/2 8行目       Bさん  300円  12/3 8行目       Bさん  400円  12/4 9行目  合計   Bさん  1000円 10行目  Cさん  Cさん  100円  12/1 11行目       Cさん  200円  12/2 12行目  合計   Cさん  300円

  • エクセルで一行毎、一枚づつ自動でプリントアウトしたいです。

    エクセルで一行毎、一枚づつ自動でプリントアウトしたいです。      A列   B列 5行目  品名   数量  6行目  商品A   1 7行目  商品B  45 8行目  商品C   6 9行目  商品D   0 10行目 商品E   8 11行目 商品F   0  :    :    :  :    :    : 現在は Sheet1に上のような表があり Sheet2に製品明細の雛型がたくさん作ってあり、 品名と数量をSheet1から参照し入力された状態になっており 数量が0のもの以外を選択して手動で印刷しています。 今後は 製品明細の雛型は1つで 製品明細を1行毎を1枚に印刷し 数量が0のものは印刷しないように自動でできるようにしたいです。 どのようなマクロを作れば良いのでしょうか?

専門家に質問してみよう