
エクセルの2007を使っております
現在積み荷のバランスを数値から算出したく
試行錯誤しております、良ければアドバイスお願いします。
E F G H I J K ...
1234567
275029803650398046005980
27503650398046005980
27503650
3650
3650
このように荷物ごとの長さがございます
上記ですと2750X3 2980X1 といった形です
ポイントが何個かありましてそれに対する並び替えを
おこないたいのです
1、左右対称が望ましい(1対ずつ)
2、長さは12000まで
3、3段目まで
右側
3280036503980
2275029805980
1365036504600
左側
3280028003980
2275027505980
1365036504600
このような形になるのが望ましいのですが、
完璧とはいかないまでも近い形になればと思っております
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
Solverを使えば完全ではなくても実用的なものができると思います。
異なる長さのものを組み合わせて、12000になればいいので、そのようにVBAでプログラムします。
結果を見て、左右対称を考えるか、はじめに材料の数を2分して計算すればいいでしょう。
A列に寸法、B列に個数を入れて、下記プログラムを実行すれば、C列以下に結果が出ます。
それを見て気に入るように積めばいいでしょう。
Sub solver3()
Dim r1 As Integer, r2 As Integer, c As Integer, n As Integer, lmax As Single
Dim rm As Integer, nrm As Integer, total As Single
r1 = 2
r2 = Cells(r1, 1).End(xlDown).Row
c = 3
n = 0
lmax = 12000
Range(Cells(r1, c - 2), Cells(r2, c - 1)).Sort Key1:=Cells(r1, c - 2), Order1:=xlDescending, _
Key2:=Cells(r1, c - 1), Order2:=xlDescending
Range(Cells(r1, c + 2), Cells(r2 + 1, 256)).ClearContents
Cells(r2 + 1, c - 1).FormulaR1C1 = "=SUM(R[" & -(r2 - 1) & "]C:R[-1]C)"
total = Cells(r2 + 1, c - 1)
SolverReset
While total > 0
Range(Cells(r1, c + 1), Cells(r2, c + 1)).FormulaR1C1 = "=RC1*RC[-1]"
Range(Cells(r1, c), Cells(r2, c)) = 1
Range(Cells(r2 + 1, c - 1), Cells(r2 + 1, c + 1)).FormulaR1C1 = "=SUM(R[" & -(r2 - 1) & "]C:R[-1]C)"
rm = r1
nrm = Cells(rm, c - 1)
While nrm = 0
rm = rm + 1
nrm = Cells(rm, c - 1)
Wend
SolverAdd CellRef:=Cells(rm, c), Relation:=3, FormulaText:="1"
SolverOk SetCell:=Cells(r2 + 1, c + 1), MaxMinVal:=1, ValueOf:=lmax, ByChange:=Range(Cells(r1, c), Cells(r2, c))
SolverAdd CellRef:=Range(Cells(r1, c), Cells(r2, c)), Relation:=1, FormulaText:=Range(Cells(r1, c - 1), Cells(r2, c - 1))
SolverAdd CellRef:=Range(Cells(r1, c), Cells(r2, c)), Relation:=3, FormulaText:="0"
SolverAdd CellRef:=Range(Cells(r1, c), Cells(r2, c)), Relation:=4, FormulaText:="整数"
SolverAdd CellRef:=Cells(r2 + 1, c + 1), Relation:=1, FormulaText:=Format(lmax)
SolverSolve userfinish:=True
Range(Cells(r2 + 1, c - 1), Cells(r2 + 1, c + 1)).Copy
c = c + 3
Cells(r2 + 1, c - 1).PasteSpecial
Range(Cells(r1, c - 1), Cells(r2, c - 1)).FormulaR1C1 = "=RC[-3]-RC[-2]"
total = Cells(r2 + 1, c - 1)
SolverReset
n = n + 1
Columns(n * 3 + 2).EntireColumn.Hidden = True
Wend
Cells(r2 + 1, c) = n
End Sub

ありがとうございます!!
VBAは自動記録のコードを触るぐらいしかしたことがないのですが、
がんばってみます、
残念ながらコンパイルエラーが表示されてしまい
SolverReset SUBまたは fanctinon が定義されてません。。
という感じででるのです、
少し自分で調べてみます
ありがとうございます。

No.5
- 回答日時:
拙作のSeek(フリー)で解くと、
9,700 ~ 2本 5,980 x 1 3,650 x 1 残=70
9,700 ~ 2本 4,600 x 1 3,980 x 1 残=1,120
9,700 ~ 1本 3,650 x 1 2,750 x 2 残=550
9,700 ~ 1本 3,650 x 1 2,980 x 1 2,750 x 1 残=320
となりますので、
同じ組み合わせのもの(2本のもの)を左右に振り分けて、
残が550の組合せを右、残が320の組合せを左に振り分けると
左右のアンバランスは 550-320=230 となり、
1%以下に収まりました。
9700で収まりますので、トレーラーでなく10tでも
運べそうです (^^;
残が小さい組み合わせを下に乗せると、さらに安定しますね。
ご安全に!
参考URL:http://supermab.com
No.4
- 回答日時:
書き忘れましたが、Solverを使うには、VBの編集画面の、
ツール―参照設定
で、
SOLVERにチェックを入れてください。
そうすれば、
>残念ながらコンパイルエラーが表示されてしまい
>SolverReset SUBまたは fanctinon が定義されてません。
は、
出ないと思います。
No.2
- 回答日時:
少なくともExcelで計算するのは諦めてください。
この問題は「計画問題」という分野になり、超
難解問題の1つに入ります。もっとも積荷の数に
難解さは決定されますが。
具体的な数値が固定であれば、人間が時間をかけ
て計算するのが一番でしょう。まあ、そんなこと
は無いでしょうが。
Lispでプログラムを作るのが一番早く実現できる
と思います。
C++やPHPでも出来るでしょう。
ただ、この手の問題を理解できる人はプログラマ
でも限られます。私の経験上、100人に1人いるか
どうか。この問題を抱えている人でも、実業務を
していない人は、まず理解できません。
一見単純に思えて泥沼化して、何も進まないうちに
予算を食いつぶして泣きつく、が一般的なパターン
です。
No.1
- 回答日時:
とりあえず計算式 (振り分けロジック) が良くわからないのと、どこまで出来て何に困っているのか書いていただかないと、あなたの代わりに仕事することにしかならないと思うのですけど。
例えば、、
「対称」とは何が対称なのか?
12000までの制限とは、何の制限なのか?
左端の3...2...1は何を表してるのか?
この回答への補足
ごもっともでございます。
現場の状態が解らないかぎり答えようがありませんでしたね
現状の問題に特化してご質問させていただくことにします、
左端の321は高さを表しまして
1段目2段目3段目となっております
12000までの制限とは、
縦につなぐ際12000までの制限となっているとゆうことです
1段目最大 3000+3000+3000+3000
対象とは左と右部分で分かれてますので、同じ長さのものを左、右に振り分けるという意味でございました。
なかなか伝わりにくいかとおもいますが、お願いします、
とりあえずしたいことをいいます
まず自動でコピー&ペーストを行うことは可能でしょうか?
A1にある数値を任意の場所に移動
例 A1にある数値をクリック、、そのつぎクリックするセルにその値を
移動(コピーでない)
以上お願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
トラックへの荷物の積みかたを...
-
ACアダプタについて教えてくだ...
-
力率80%の根拠
-
「電流を印加する」という表現...
-
モーターの電流値が上がるのは...
-
加算回路をMIL記号を用い図示せ...
-
単相モーターと三相モーターの...
-
立ち上がり電圧について。たと...
-
同一電圧値、異なる電源供給源...
-
400V 3相4線式について...
-
ブレーカー容量の余裕について
-
EVT(GPT)の電圧比について
-
直・交流回路の同一配管内の入...
-
電源装置の「突き合わせ方式」...
-
電気設備で使われるGCの意味...
-
[LT Spice] オペアンプのシミュ...
-
電圧を下げる方法
-
検流計と電流計の違い
-
単相3線100/200V分電盤の主幹選定
-
パルスとレベルについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
トラックへの荷物の積みかたを...
-
この変形は正しいですか?
-
エクセル 指定した複数の文字の...
-
EXCEL VBA 行の値を累計したい...
-
抵抗値計算
-
2つのシートを重複検索したあと...
-
この問題なのですが、(1)はQ1Q2...
-
エクセルで集計
-
VBAで列範囲、行範囲の指定方法...
-
電磁気学の問題のチェック
-
流体力学の公式証明が解らない
-
VBAでグループごとソートす...
-
μって?
-
どのように計算したのか分かり...
-
iPadAir2か、iPad mini3か、PS4
-
抵抗を使用したインピーダンス...
-
ACアダプタについて教えてくだ...
-
力率80%の根拠
-
「電流を印加する」という表現...
-
モーターの電流値が上がるのは...
おすすめ情報