添付の左表から右表を作成するマクロを作りたいのです
【個数が1以上の商品のものを個数分行コピーするという内容のマクロを組みたいのです。】
配列に格納して、配列最終要素まで取るところまではできたのですが、
【個数の値が1以上の場合、その数量分をコピーして次の商品の個数が1以上ならコピーする】
というプログラムの書き方がわからず途中で止まってしまっています。
どなたかおわかりのかたがおられましたらご教示お願いできないでしょうか。
よろしくお願いいたします
★途中まで作成したプログラム。
Sub Macro1()
i = 0
Count = 0
Maxrow = Range("D6").End(xlDown).Row '最終行取得
Set myRange = ActiveSheet.Range(Cells(6, 4), Cells(Maxrow, 4))
myArray = myRange
Count = UBound(myArray) '配列に値が入っている最後の要素番号取得
While (i <= Count)
ここをどう書けばいいのかわからなくて困っています。
Wend
End Sub
No.5
- 回答日時:
行数の予測が立ちにくいとかならこんな方法も。
Sub megu()
Dim myAl As Object
Dim r As Range, i As Integer
Set myAl = CreateObject("System.Collections.ArrayList")
For Each r In Range("C6", Cells(Rows.Count, "C").End(xlUp))
For i = 1 To r.Offset(, 1).Value
myAl.Add (Array(r.Value, r.Offset(, 1).Value))
Next
Next
Range("G5:H5").Value = Range("C5:D5").Value
With Application
Range("G6").Resize(myAl.Count, 2).Value = .Transpose(.Transpose(myAl.ToArray()))
End With
Set myAl = Nothing
End Sub
ただしWin10の場合ですとこちらも関係するかも。(PDFファイルです)
https://www.e-reverse.com/uploads/Windows10.NETF …
ありがとうございます。
fujillinさんのアルゴリズムを元に、皆様の助言を元にあれから作成していたところ今できました。
コード提示もいただきありがとうございました。
No.4
- 回答日時:
>【個数が1以上の商品のものを個数分行コピーするという内容のマクロを組みたいのです。
】これについては、配列を使う必要はないと思いますよ。
配列の使いどころとして、セル範囲への入出力時やランダムアクセスが必要な場合などと思います。
この場合、セル範囲への入出力時に有効と思いますが、Excelの機能などを使用する方が容易で速い場合がありますよ。
もし、配列の学習を兼ねと言うなら、ベタに(Forで)画像のG~Hに書き出す処理を書いてみましょう。
その処理は、配列を使用した時のそれに近いと思います。
Set myRange = ActiveSheet.Range(Cells(6, 4), Cells(Maxrow, 4))
myArray = myRange
後からmyRangeを使用しないなら、
初めから、myArray = ActiveSheet.Range(Cells(6, 3), Cells(Maxrow, 4))
要素数が予測できるなら、範囲全てにしても良いかと思います。
配列を使う必要はなかったのですか。
ネットで調べてたら、列 配列格納みたいな記事がヒットしたので、配列でやるのがいいのかと思い組んでました。
頂いたコードを元に作成してみたいと思います。
No.3ベストアンサー
- 回答日時:
こんにちは
ご提示とは別の考え方ですが、方法と手順をご参考までに。
1)最終行を求め、6行目までStep-1で以下を下からループ
2-1)指定行数=1なら何もしない
2-2)>1の場合、処理中の行の下に、指定行-1 行分をコピー挿入
ループ終了で、処理終了
ありがとうございます。
「1)最終行を求め、」ここまではわかったんですが、私も最終行は出す必要があるよね。って思ったので最終行を取るとこまで書いたのです。
ただ、1)・・・「6行目までStep-1で以下を下からループ」これは上に上っていってるんでしょうか。上に登る意味がつかめないので、底から考えてみたいと思います。
No.2
- 回答日時:
こんぱくさん。
思考の順番が間違ってますよ!!ループ内で行うべき処理内容を決めてから、ループに入る前に、何を準備すべきかを考えるべきです。
今回の処理において、ループ内で行うべき処理をざっくり書いてみました。
もし、このロジックが納得できるようであれば、この処理に合わせて、事前準備、および、ループのロジックを考えてみて下さい。
ちなみに、ループ内で行の追加や削除を行う場合、下から上に向かって処理した方が、簡単な場合が多いです。その辺もよく考えてみて下さい。
以下、ループ内の参考ロジックです。
With Range("C6:D6")
.Copy
.Resize(1).Insert Shift:=xlDown
End With
アルゴリズムで、一行挿入したら元の行もずれて下に行って。
「あれ?そうなったら結局どう処理したらいいんだ?元の格納された値をどう足して処理する?」
ってなって、アルゴリズムが全然思いつかなくて進まなくなってしまったんです。
参考ロジックでまた考えてみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) Sheet1の出荷日と品名が並んだ表からSheet2の品名別出荷日別の個数一覧表を作っています。 オ 3 2022/12/01 23:54
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
エクセルで最小値から0を除く方法
-
えfor文とか使っちゃう時点で時...
-
ArrayListの初期値に二次元配列...
-
VBA 1次元配列を2次元に追加する
-
VBAで配列をまるごとコピー
-
for each の現在の配列ポインタ...
-
順列の作成
-
excel2010 VBAの修正をご指導い...
-
VBA:配列の中で文字列が何番目...
-
配列変数の添字が範囲外ですと...
-
Excel2003 条件付き中央値
-
VB6.0の配列に使用する「=」の意味
-
2つ以上の変数を比較して最大数...
-
《エクセル2000》A列・B列の商...
-
FORTRANのCOMMON文
-
Excel-VBAの配列「Public Const...
-
fortranのwrite文について
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
subの配列引数をoptionalで使う...
-
ListViewで、非表示列って作れ...
-
for each の現在の配列ポインタ...
-
配列変数の添字が範囲外ですと...
-
VBのFunctionで、配列を引数...
-
VB6 配列を初期化したい
-
2次元動的配列の第一引数のみを...
-
Excel-VBAの配列「Public Const...
-
配列内の内容を全て表示する方法
-
Dim は何の略ですか?
-
配列を任意の数値で埋める方法
-
VLOOKUP関数で、一番下...
-
アルゴリズム、配列のフローチ...
-
verilogで配列の任意の8bitを取...
-
えfor文とか使っちゃう時点で時...
-
VBA Match関数の限界
おすすめ情報