• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA について教えてください。)

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

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

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答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