返回列表 上一主題 發帖

[發問] 請問有msgbox用"物件查詢"巨集能幫小弟解決問題嗎?

回復 2# Hsieh
剛剛忘了用回復功能

提供的範例問題與Excel很好看出答案,因為真實數據上百筆關係到案例公司機密
所以只能用部分數據在此詢問感謝能提供指令讓小弟能順利執行。

TOP

首先,感謝Hsieh為小弟抽空相助,抱歉表達得不夠詳細,在下面補充說明!

第一題的部分因為excel稍做修正,word檔忘記更變答案,抱歉。

第二題的部分說明A至H元件在各汙染環境的影響%數,題目中所述之詢問
若使用者想找元件A至H"溫室效應"影響最嚴重的元件,則VBA給出的答案為"C元件"
若使用者想找元件A至H"重金屬"影響最嚴重的元件,則VBA給出的答案為"E元件"

第三題承接第二題,假如使用者在第二題詢問"溫室效應"影響最嚴重的元件
答案給出"C元件"
從第二題可以知道C元件是該產品元件中對"溫室效應"帶來的影響最大
所以使用者會去尋找可以替代"C元件"的元件,這也是第三題的論述
使用者從原先"C元件"與可以用來替代C元件的"元件C-1"、"元件C-2"
因為這些替代元件在"溫室效應"都比原先的低,所以使用者在第三題會比較這三個元件
對"整個環境汙染總權重值(也就是Z欄位的值)",尋找車Z欄位值最低的元件為C-2
代表元件C-2是可以用來替代原先C元件的替代性元件。

不知道這樣敘述有沒有比較清楚,感謝花費時間幫忙。

TOP

回復 1# joey77373
你舉例的答案似乎與檔案內容不符
第一題若是以20%為基準應該只有C、E

第二題是要找出L:Q的最大值嗎?那應該是C元件的致癌性%數
  1. Public Rng As Range
  2. Sub 第一題()
  3.     Dim myInput, i As Integer, Ar As Variant, MyMax#, MyStr
  4.     Dim Str As String, Dic As Object
  5.     myInput = InputBox("請輸入總汙染門檻值(%):")
  6.     Set Dic = CreateObject("Scripting.Dictionary")
  7.     For i = 2 To 9
  8.     If Not IsNumeric(Cells(i, 9)) Then MsgBox "I" & i & "請輸入數字": Exit Sub
  9.       If Cells(i, 9) >= (myInput / 1) Then
  10.          Dic(Cells(i, 1).Value) = Array(Cells(i, 9), Cells(i, 1))
  11.          If Rng Is Nothing Then Set Rng = Cells(i, "L").Resize(, 6) Else Set Rng = Union(Rng, Cells(i, "L").Resize(, 6))
  12.       End If
  13.     Next i
  14.     If Dic.Count = 0 Then MsgBox "沒有符合條件的元件": Set Rng = Nothing: Exit Sub
  15.     TestStr = Join(Dic.keys, ",")
  16.     Do Until Dic.Count = 0
  17.      Ar = Application.Transpose(Application.Transpose(Dic.items))
  18.      MyMax = Application.Max(Application.Index(Ar, , 1))
  19.      MyStr = Application.VLookup(MyMax, Ar, 2, 0)
  20.      MsgBox "元件  " & MyStr & "  " & MyMax
  21.      Dic.Remove MyStr
  22.     Loop
  23. End Sub
複製代碼
  1. Sub 第二題()
  2. Dim MyMax#, MyStr$, MyTital$
  3. If Rng Is Nothing Then MsgBox "未有符合之元件,請先執行第一題": Exit Sub
  4. If Application.Count(Rng) <> Rng.Count Then MsgBox Rng.SpecialCells(xlCellTypeConstants, 2).Address & "為非數值資料": Exit Sub
  5. MyMax = Application.Max(Rng)
  6. MyStr = Cells(Rng.Find(MyMax, lookat:=xlWhole).Row, "A")
  7. MyTital = Cells(1, Rng.Find(MyMax, lookat:=xlWhole).Column)
  8. MsgBox "元件  " & MyStr & MyTital & "  " & Format(MyMax, "0.00%")
  9. End Sub
複製代碼
第三題就看不出與第一、二題有何關聯性,請詳細說明之
學海無涯_不恥下問

TOP

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題