- ベストアンサー
エクセルで出来ますか?
エクセルを使い以下の様な事が出来ますか? AとBが物々交換する時に A:○○円X△個=a1 △○円X△個=a2 a1+a2+・・・・・=A B: ○円X△個=b1 ○○円X△個=b2 b1+b2・・・・ =B と成った場合、A-BもしくはB-Aが限りなく0に成るように 自動的に個数を発生させるような事出来ませんか? それぞれの品数は5品目以下位で十分です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
品物 5種類以下 各品物の個数 20個以下 金額の合計 数百万円以内 上のように問題を小規模なものに限定すれば単純なループ処理でも可能かと思われます。 (5種類,20個だと20^5=3200000回ループが必要) 使い方 A列1行目からAの各品物の値段を入力する B列1行目からBの各品物の値段を入力する Private Sub a_b()を実行する 以上 C,D,Eに結果が出力されます。 エラー処理はほとんどしていません。プログラムが暴走した場合はEscで中断する等ご自身で判断してください。 Option Explicit Dim acnt As Long, bcnt As Long, lmt As Long, g As Long Dim ap() As Long, bp() As Long, sumP() As Byte Dim col As New Collection Private Sub a_b() Dim i As Long, j As Long, k As Long acnt = InputBox("Aの品数を入力してください", Default:=5) bcnt = InputBox("Bの品数を入力してください", Default:=5) lmt = InputBox("品数の上限を入力してください", Default:=5) ReDim ap(acnt - 1) ReDim bp(acnt - 1) For i = 0 To acnt - 1 ap(i) = Cells(i + 1, 1) j = j + ap(i) * lmt Next i For i = 0 To bcnt - 1 bp(i) = Cells(i + 1, 2) k = k + bp(i) * lmt Next i i = j: If j < k Then i = k k = (10 ^ 6) * 5 If lmt ^ acnt > k Or lmt ^ bcnt > k Or i > k Then MsgBox "データが大きすぎるので処理を中止します", vbOKOnly: End ReDim sumP(i) Range("C1:E" & Rows.Count).ClearContents: g = 0 getab 0, ap(), 0, "", acnt, True getab 0, bp(), 0, "", bcnt, False Set col = Nothing End End Sub Private Sub getab(ix As Long, pary() As Long, p As Long, s As String, lst As Long, flga As Boolean) Dim i As Long If ix <> lst Then For i = 1 To lmt getab ix + 1, pary(), p + pary(ix) * i, s & CStr(i) & ",", lst, flga Next i Else If flga Then geta p, s If Not flga Then getb p, s End If End Sub Private Sub geta(p As Long, s As String) If sumP(p) = 0 Then sumP(p) = 1: col.Add s, CStr(p) End Sub Private Sub getb(p As Long, s As String) If sumP(p) = 1 Then g = g + 1: Cells(g, 3) = col.Item(CStr(p)): Cells(g, 4) = s: Cells(g, 5) = p End If End Sub
その他の回答 (3)
- warumx
- ベストアンサー率0% (0/9)
- imogasi
- ベストアンサー率27% (4737/17069)
どの項目が決っていて、どの項目を選択できるのか質問に書かないとダメでは。 品物は一定の中から選択可能か。 AグループとBグループの手持ちは、品物が決っているのだよね。1以上か? 単価はそれら品物に付随した既定条件だろう。 個数が選択できるのかな。1以上か? === 一般にこのような問題は、エクセルの問題ではない。処理ロジックとかを考えるのは、数学的素養のはず。数学の関連カテに質問すべきだ。そろばんを使うからといってそろばんの問題ではないように エクセルの問題ではないよ。線形計画とかに関連するのかな。とかく 決った式で値を計算するだけのエクセルの問題ではない。 === エクセルにも、ソルバーやゴールシークなどあるが、多分無理ではないかな。 ソルバーでの問題 http://www-cc.gakushuin.ac.jp/~e931039/solver.htm と、質問の課題は共通点があるかな。
補足
有難うございました。 データ等の補足です。 最初にAさん、Bさん共に同じデータベースを使用して交換する物を 選択します、価格は決まっており、(選択はおそらく5種類位) 単価はそれらの品物に付随している。 個数は整数で1以上。 これくらいが条件ですが
- 135ok
- ベストアンサー率34% (26/75)
お礼
有難うございました。 何とか成りそうですので使わせていただきます。 御礼が遅くなり申し訳ありませんでした