• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの関数について教えてください)

エクセルでの入札計算式を教えてください

このQ&Aのポイント
  • エクセルでの入札計算式について教えてください。入札数が決まっていて、安い順に入札数を割り当てる場合、同じ金額の入札がある場合は如何すれば良いですか?
  • ビジネスゲームでのメーカーへの入札をエクセルで計算したいです。入札数が決まっており、安い順に入札数を割り当てる場合、同じ金額の入札が複数ある場合はどうすれば良いですか?
  • エクセルでの入札計算式について教えてください。入札数が決まっている場合、安い順に入札数を割り振る方法と、同じ金額の入札がある場合の問題解決方法を教えてください。

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

ざっと書いてみましたが、以下のような感じ: Option Explicit Function sum_array(a As Variant) As Long Dim k As Variant sum_array = 0 For Each k In a sum_array = sum_array + k Next End Function Public Sub distribute(ByVal num_item As Long, orders_list As Variant) Dim it As Variant, unitprice As Long, orders As Variant, sum_order As Long Dim allot_ratio As Double For Each it In orders_list unitprice = it(0) orders = it(1) sum_order = sum_array(orders) If sum_order > num_item Then allot_ratio = CDbl(num_item) / sum_order sum_order = num_item Dim k As Long For k = UBound(orders) To LBound(orders) Step -1 orders(k) = Int(orders(k) * allot_ratio + 0.5) If orders(k) < 1 Then orders(k) = sum_order sum_order = sum_order - orders(k) Next sum_order = sum_array(orders) End If Debug.Print unitprice; "円 数量="; Join(orders, ", ") num_item = num_item - sum_order If num_item <= 0 Then Exit For Next End Sub Public Sub test() Dim OrderList As Variant OrderList = Array(Array(50, Array(20, 80)), Array(100, Array(10, 20, 30))) distribute 100, OrderList End Sub 実行すると、次のような出力が得られます: test 50 円 数量=20, 60 100 円 数量=3, 7, 10 ここでは、入札に関する情報を、 [単価、入札数のリスト] の配列で表現してます(サブルーチンdistributeの第2引数)。 実用上は入札者の名前とかを保持するために、別途クラスを作って、データを表現するようにしたほうが良いと思いますが、サンプルなので手を抜いてます。 あと、案分するところの境界値テストが甘いかも。

bab
質問者

お礼

ありがとうございました 早速 やってみようと思います まだまだエクセルは勉強することがたくさんありそうです

関連するQ&A