[[20250312165032]] 『希望の数値に自動で振分したいです』(悩女) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『希望の数値に自動で振分したいです』(悩女)

10万   4万   6万
A     B    C


2375 → 2375   
2330 →     2330
1230 → 1230
1190 →     1190
660 →      660
500    ・
440    ・
430    ・
390    ・

上記のような形で、A列に入っている合計数値をB列・C列の希望の合計に均等にうまく振分たい。

< 使用 Excel:unknown、使用 OS:surface >


全く意味不明。
OSのsurfaceも意味分からん。

(悩男) 2025/03/12(水) 17:07:10


いや、ちょっと待てよ。
A列の合計が10とすると、B列の合計値は4、C列の合計値は6、とするということか?
だとすると、B列はA列の4/10、C列はA列の6/10、にそれぞれするっていうことか?
ほぼ謎解きゲーム。

(悩男) 2025/03/12(水) 17:13:54


以前ここでそんなことをしていたマクロを見かけたような気がする
組み合わせが複数ある場合と組み合わせが存在しない場合の出力をどうするか
あるいは正確な分け方が無い場合に近似値でよいか

問題点はこれくらい?
(くろまめ危機一髪) 2025/03/12(水) 17:47:48


>OSのsurfaceも意味分からん。
マイクロソフトが販売しているパソコンのブランド名です。
>均等にうまく振分たい。
提示されている表は何故そのようになるの。

< 使用 Excel:unknown、使用 OS:surface >を理解していないんじゃないの。

(?) 2025/03/12(水) 19:48:57


 ソルバーを使うとできるかもしれません。条件によります。

 (Q1)A列の数値の個数は最大で何個くらいですか?
 (Q2)分離したいグループの個数は2グループでいいんですか?
 (Q3)典型的なサンプルを省略なしで提示できますか?
     A列のすべてのデータと、B列、C列の合計数値です。

(xyz) 2025/03/13(木) 08:02:38


これは、数値が2つの列に分配されるように配置されているように見えますが、下部の「・」のついた数値がどういう役割を果たしているのか明確ではありません。もし具体的な意図や計算ルールがあれば教えていただけますか? たとえば、このデータをどのように整理したり、分割したりしたいのかについて詳しく教えていただけると、適切なアドバイスができるかと思います! 😊

(Copilot) 2025/03/13(木) 10:04:20


よくわかってなくてすみません。。。Excel保存ファイル種類が【Excel97-2003】というものでした。
Windows 10 Proだと思います。

具体的な目的としては、下記例として合計153,220枚の配布枚数を設定していて(これは上から効率のよい市区群順にしている)2日間に分けて配布したいのですがそれぞれの日に設定枚数があります。(B列・C列)
設定枚数に対して上から均等に振分をしたいです。
(B列を上から・C列を下からとかにするとC列だけ実績が悪くなってしまうため)

現状は下記の場合はB列が50,000枚、C列103,220枚でほぼ2倍の枚数になるので
A列を=B1、=C2・C3 のように=で引っ張って下までオートフィルして大体の枚数を入れてから手作業で希望枚数になるようB列・C列を調整しています。
均等に振分れたらいいので、絶対に上からBCC・BCC・BCCという順番ではなくていいです。

※だいたい200〜600行くらいあります。(全都道府県をシート別にしている)
A列       B列        C列
153,220   2025/4/1 2025/4/2
設定部数 50,000  103,220
1340    1340
900          900
880          880
480     480
460          460
410          410
340       340
200          200
200          200
150     150
130          130
1320          1320
1130     1130
820          820
710          710
590     590
550          550
300          300
230     230
200          200
100          100
100     100
80          80
60          60
50     50
2100          2100
1550          1550
1390     1390


手作業でとても時間がかかっているので何か解決策があればご教示いただきたいです。

(悩女) 2025/03/13(木) 10:44:29


B列・C列の枚数をそれぞれの設定枚数に近づけるのは簡単なことであるとは思いますが、
上の例のように、BCC・BCC・BCC・・・とほぼ規則正しく並んでいるのはなぜですか?
要するに、以下がよく分からないということです。
>設定枚数に対して上から均等に振分をしたいです。
>(B列を上から・C列を下からとかにするとC列だけ実績が悪くなってしまうため)
日ごとの配布枚数さえ決めれば、どこの地域にいつ配布するかは需要ではないように思うのですが・・・。

(えいかん) 2025/03/13(木) 11:43:12


A列が上から順番にレスポンスの良いエリアになっております。
日付ごとに良い所・悪い所が偏らないよう上から均等に振分たいという意向です。

B列を上から、C列を下からのような振分方法になれなければ何でも大丈夫です。
(ある程度レスポンスの良い悪いが均等に入ればいいです)
(悩女) 2025/03/13(木) 12:05:48


何をもって「均等に」と言うのかはわかりませんが
B1に50000、C1に103220、A2以下に1340…と入っているとして
 B2=A2
 B3=IF(SUM($B$2:B2)/$B$1<SUM($C$2:C2/$C$1),A3,"") 下にフィル
 C3=IF(B3="",A3,"") 下にフィル

設定枚数に対する合計の割合が小さい方に割り振るようにしてますが
機械的に振ってるだけなのでぴったり50000ぴったり103220にはなりません
そこは適当に調整してください
(傘) 2025/03/13(木) 13:58:37


 割合に応じて機械的に割り振るというのをマクロ化したコード例

 Sub Test()
    Dim ratio As Double
    ratio = Range("C2") / Range("B2")

    Dim i As Long, Sum2 As Long, Sum3 As Long
    Cells(3, 2) = Cells(3, 1)
    Sum2 = Cells(3, 1)
    For i = 4 To Cells(Rows.Count, "A").End(xlUp).Row
        If (Sum3 / Sum2) > ratio Then
            Cells(i, 2) = Cells(i, 1)
            Sum2 = Sum2 + Cells(i, 1)
        Else
            Cells(i, 3) = Cells(i, 1)
            Sum3 = Sum3 + Cells(i, 1)
        End If
    Next
 End Sub

(hatena) 2025/03/13(木) 14:35:47


(hatena)さんありがとうございます!マクロでうまくいきそうです。
この作業を全シートで繰り返したいのですが、
そのマクロコードも教えて頂けますでしょうか。
(悩女) 2025/03/13(木) 15:53:53

 回答コメントを頂いておりながら返答が遅れてしまいました。失礼しました。
 ソルバーで使用できる変数の数は200が上限ですので、Excelのソルバーでは対応できません。
 既に適切な回答がされています。
(xyz) 2025/03/13(木) 18:58:00

 > この作業を全シートで繰り返したいのですが、
 > そのマクロコードも教えて頂けますでしょうか。

 以下でどうでしょう。

 Public Sub Sample()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        Add3days ws
    Next
 End Sub

 Sub Add3days(ws As Worksheet)
    Dim ratio As Double
    ratio = ws.Range("C2") / ws.Range("B2")
    Dim i As Long, Sum2 As Long, Sum3 As Long
    ws.Cells(3, 2) = ws.Cells(3, 1)
    Sum2 = ws.Cells(3, 1)
    For i = 4 To ws.Cells(Rows.Count, "A").End(xlUp).Row
        If (Sum3 / Sum2) > ratio Then
            ws.Cells(i, 2) = ws.Cells(i, 1)
            Sum2 = Sum2 + ws.Cells(i, 1)
        Else
            ws.Cells(i, 3) = ws.Cells(i, 1)
            Sum3 = Sum3 + ws.Cells(i, 1)
        End If
    Next
 End Sub

(hatena) 2025/03/14(金) 08:45:00


皆様ありがとうございました。
(hatena)さんエラーが出ていたのですが、
ratio=ws.のws.を抜いたらマクロ動きました。
作業がすごく楽になりました。
ありがとうございました!!
(悩女) 2025/03/14(金) 10:06:06

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.