箱に順に並べる表を作成するには | |
---|---|
[195612] 箱に順に並べる表を作成するには- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ テツ -(2023/02/06(22:25)) □U R L/ A B C D E F G 1 品名 個数 箱a@ マス番号 〜 箱a@ マス番号 2 A 30 1 1 〜 1 30 3 B 70 1 31 〜 1 100 4 C 100 2 1 〜 2 100 5 D 40 3 1 〜 3 40 6 E 120 3 41 〜 4 60 ・ ・ ・ ・ ・ ・ ・ ・ 20 ・ ・ ・ ・ ・ ・ ・ 合計 680 上記のような表を作成するときA列の品名、B列の個数は入力数式で出すとして、 C2セルに開始箱番号、D2セルに開始マス番号を入力すると、B2セルの30を 足した箱番号、マス番号をF2G2入るように。続いてB3の70を箱番号1のマス 31〜1の100と入るように、C1D1に入力することにより自動で順に箱番号マス番号が入るようにするにはどのようにマクロを書けばよいのかご教示をお願いします。C2D2に入る数字は毎回1とは限りません。 マクロに関してはほとんどわからないのでよろしくお願いします。 |
[195613] Re[1]: 箱に順に並べる表を作成するには- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/02/07(07:16)) □U R L/ > 1 品名 個数 箱a@ マス番号 〜 箱a@ マス番号 > 5 D 40 3 1 〜 3 40 > 6 E 120 3 41 〜 4 60 ~~~↑~~~ ~~~↑~~~ 6行目で、箱bェ「4」に変わる理由 と マス番号が「60」になる理由 を説明してください。 |
[195615] Re[2]: 箱に順に並べる表を作成するには- ■記事引用/メール受信=OFF■ □投稿者/ テツ -(2023/02/07(12:48)) □U R L/ ありがとうございます。 6行目で、箱bェ「4」に変わる理由 と マス番号が「60」になる理由は この箱にはB6にありますように3箱目のマス番号41から120番入れます、 ですから次の箱の4箱目60番までとなります。 図がこんなにズレてしまうのですね、ズレた図で見てくださりありがとうございます。 半平太 さんのようにずれないようにするにはどうしたらよいのでしょう。 |
[195616] Re[3]: 箱に順に並べる表を作成するには- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2023/02/07(17:35)) □U R L/ >この箱にはB6にありますように3箱目のマス番号41から120番入れます、 >ですから次の箱の4箱目60番までとなります。 なるほどです。 >ずれないようにするにはどうしたらよいのでしょう。 コメント送信時に 図表モード-> ○ に黒目●を入れてください。 Sub packing() Dim App As Application Dim r As Range, rRef As Range Dim v, Sm, Pos Dim NumOfBoxes As Long, TTL As Long, i As Long Set App = Application Set r = Range("B2:B20") TTL = App.Sum(r) NumOfBoxes = App.RoundUp((TTL + Range("B2") + Range("D2")) / 100, 0) Range("F2:G20").ClearContents v = Range("C2:G2").Resize(r.Rows.Count).Value '箱No.のセル配列を作る Range("F2:G2") = Range("C2:D2").Value Range("F2").AutoFill Destination:=Range("F2").Resize(NumOfBoxes), Type:=xlFillSeries '100刻みのセル配列を作る Range("G3:G4") = [{101;201}] Range("G3:G4").AutoFill Destination:=Range("G3").Resize(NumOfBoxes - 1), Type:=xlFillSeries Set rRef = Range("G2").Resize(NumOfBoxes) Sm = App.Sum(Range("D2") - 1) '処理前のマス番号を算出 For i = 1 To r.Rows.Count If App.Sum(r(i, 1)) Then '個数の入力がなくなるまで処理 Sm = Sm + r(i, 1) Pos = App.Match(Sm, rRef, 1) v(i, 4) = Range("F2")(Pos, 1) v(i, 5) = (Sm - 1) Mod 100 + 1 If i < UBound(v) - 1 And App.Sum(r(i + 1, 1)) Then v(i + 1, 1) = v(i, 4) + IIf(v(i, 5) = 100, 1, 0) v(i + 1, 2) = v(i, 5) Mod 100 + 1 End If Else Exit For End If Next '結果を上書き Range("C2:G2").Resize(r.Rows.Count) = v End Sub |
[195619] Re[4]: 箱に順に並べる表を作成するには- ■記事引用/メール受信=OFF■ □投稿者/ テツ -(2023/02/08(19:07)) □U R L/ 半平太さんありがとうございました。 しっかりと思い通りの動きをしてくれました。 家のパソコンではしっかりと動くのですが、会社のパソコンではセキュリティーが厳しくマクロを実行することができませんでした、あまりセキュリティーを弱にすることもできませんので、せっかく作成していただいたのに使うことができず申し訳ありません。 そこで関数を組み合わせて同じように動くのは可能でしょうか |
[195620] (削除)- ■記事引用/メール受信=OFF■ □投稿者/ / -(2023/02/08(20:41)) □U R L/ この記事は削除されました |
このトピックに書きこむ |
---|