有關Excel問題想請教!!

2009-06-16 6:57 am
本人正在研究貨物管理的資料處理, 內容如下:

在試算中輸入不同貨品的數量, 再輸入要求的總和, 就能自動篩選出來, 例:

500
1000
1000
2000
2000
3000
4000
5000
5500
6500

要求總和 : 9500

能否自動列出總和是 9500 的組合?

多謝幫忙!!

回答 (4)

2009-06-16 9:18 pm
✔ 最佳答案
你需要用巨集(Macro)幫忙:

http://www.funp.net/249848

Download "Combination.xls" 後在黃格輸入你的數字,按"分析"數字便會出現.
注:如果只有十個數字,電腦要考慮1023個組合,如果有20個數字,則要考慮1048575個組,所以我的巨集只容許20個數字,但分析時間已經很長.

另分析前我會先把數字由小到大排列好,避免有重覆組合出現.

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 6/16/2009 by yun
'
Cells(5, 5).Value = "Analysing..."

Range("B3:B22").Select
Selection.Sort Key1:=Range("B3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Cells(1, 1).Select

r = 6
While Cells(r, 5).Value <> Empty
Cells(r, 5).Value = ""
r = r + 1
Wend

N = Cells(4, 5).Value
RSum = Cells(2, 5).Value
r = 6
For i = 0 To 2 ^ N - 1
Sum = 0
For j = 0 To N - 1
If (i And 2 ^ j) Then Sum = Sum + Cells(j + 3, 2).Value
Next j
If Sum = RSum Then
t$ = ""
For j = 0 To N - 1
If (i And 2 ^ j) Then
If t$ <> "" Then t$ = t$ & " + "
t$ = t$ & Cells(j + 3, 2).Value
End If
Next j
exist = False
For k = 6 To r - 1
If t$ = Cells(k, 5).Value Then exist = True
Next k
If exist = False Then
Cells(r, 5).Value = t$
r = r + 1
End If
End If
Next i

Cells(5, 5).Value = "Analysis completed!"

'
End Sub

2009-06-16 15:24:20 補充:
糾正了一點錯誤:
http://www.funp.net/501831

2009-06-17 09:29:23 補充:
在Excel,True是非0,False是0.
另AND是二進制bitwise AND,例:
9 AND 4的意思是1001 AND 0100 = 0000 (False)
13 AND 4的意思是1101 AND 0100 = 0100 (True)
2009-06-17 10:43 pm
已完成了 sample file, 可上網 download
http://www.geocities.com/shin_bingo_dog/Random_addition_10.xls
然後執行 macro1 就ok 了.
在一秒內已輸出答案. 非常快速.
program 如下:


2009-06-17 14:49:05 補充:
可在 excel file 的
工具 --> 巨集 --> macro1 --> 編輯
在 screen 上印出 program
2009-06-17 7:44 am
看完Nelson的代碼, 高! 佩服
但有一點不太明白, 是否能解釋,
If (i And 2 ^ j) Then 是如何判斷 true/false
先謝

2009-06-17 13:55:41 補充:
感謝Nelson解釋, 原來VBA 的 And (Or 亦應一樣)有此種二進制的邏輯, 現時大概明白。
9 And 4 = 0 為 false
13 And 4 = 2^2 = 4 為 true
25 And 23 = 16 + 1 = 17 為 true
此種VBA邏輯與worksheetfunction的And常規有所不同:
=and(9,4) 為true
=and(13,4) 為true
以後在VBA用And要小心 0與1以外的數字, 否則true 會變成 false
學到新知識, 感恩!
2009-06-16 7:14 am
應該係用IF ...THEN....那個功能

先把9500 放在指定的儲存格中,

我無估錯的話,你是否佢找出那幾樣貨品相加是=9500呢 ?

從你以上的例子,是否要找出1000+3000+5500=9500

或者係1000+1000+2000+2000+3000+500=9500 嗎 ?

其實係好難講的。


收錄日期: 2021-04-23 23:20:52
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090615000051KK02276

檢視 Wayback Machine 備份