返回列表 上一主題 發帖

[發問] 加總問題

[發問] 加總問題

請教大大加總問題,見附件如何改寫VBA,謝謝!
testa2.rar (16.35 KB)

回復 12# luhpro

可以了,謝謝大大!

TOP

回復 11# donod
電腦這幾天又掛了,到今天程式才弄出來.
你看看是否OK, 程式如下:
  1. Sub nn()
  2.   Dim iCol%, iCols%, iNum%, iIdx%, iI%, iJ%
  3.   Dim lRow&, lRows&, lSum&(0 To 1)
  4.   Dim bChk(0 To 1, 0 To 1) As Boolean

  5.   lSum(0) = 0
  6.   lSum(1) = 0
  7.   For lRow = 9 To 11
  8.     For iI = 0 To 1
  9.       For iJ = 0 To 1
  10.         bChk(iI, iJ) = False
  11.       Next
  12.     Next
  13.     For iCol = 2 To 18
  14.       With Cells(lRow, iCol)
  15.         If Not .Value = "" Then ' 無數字不處理
  16.           iIdx = IIf(.Interior.ColorIndex = 43, 1, 0)
  17.           If Left(.Value, 1) = "[" Then
  18.             bChk(iIdx, 0) = True
  19.             iNum = Val(Mid(.Value, 2, Len(.Value) - 2))
  20.           Else
  21.             bChk(iIdx, 0) = False
  22.             iNum = Val(.Value)
  23.           End If
  24.          
  25.           If Not bChk(iIdx, 0) And bChk(iIdx, 1) Then
  26.             bChk(iIdx, 1) = False
  27.           ElseIf iNum >= Cells(5, 2 + iIdx * 2) Then
  28.             lSum(iIdx) = lSum(iIdx) + Cells(5, 2 + iIdx * 2)
  29.             If bChk(iIdx, 0) Then bChk(iIdx, 1) = True
  30.           ElseIf iNum <= Cells(5, 3 + iIdx * 2) Then
  31.             lSum(iIdx) = lSum(iIdx) + Cells(5, 3 + iIdx * 2)
  32.             If bChk(iIdx, 0) Then bChk(iIdx, 1) = True
  33.           Else
  34.             If Not bChk(iIdx, 0) Then
  35.               lSum(iIdx) = lSum(iIdx) + iNum
  36.               bChk(iIdx, 1) = False
  37.             End If
  38.           End If
  39.         End If
  40.       End With
  41.     Next iCol
  42.   Next lRow
  43.   MsgBox "綠色格總數為 : " & lSum(1) & Chr(10) & Chr(10) & Chr(10) & "無色格總數為 : " & lSum(0)
  44. End Sub
複製代碼

TOP

回復 10# luhpro
是小的說不清楚,計算過程如下:
第 1 行 - ( D5=33 , E5=-91 )
※ C9=[-100] 和=-91 (條件5 - 如果綠色格內有[]的數值<=E5,只當E5的值,不需計算其右邊無[]的數值, 觸發)
※ D9=33     (條件5 - 略過)
※ G9=[35]   和=-91+33=-58 (條件4 - 如果綠色格內有[]的數值>=D5,只當D5的值,不需計算其右邊無[]的數值)
※ H9=-110   (條件5 - 略過)
※ I9=[32]   (不在條件內 - 沒有計算)
※ J9=-102   和=-91+33-91=-149 (條件3:如果綠色格內的數值<=E5,只當E5的值)

第 2 行 -
※ F10=[-27] (不在條件內 - 沒有計算)
※ G10=135   和=-149+33=-116 (條件1:如果綠色格內的數值>=D5,只當D5的值)
※ M10=[-30] (不在條件內 - 沒有計算)
※ N10=-2   和=-116-2=-118  (條件2:如果綠色格內的數值<D5及>E5,只當格內的值)

第 3 行 -
※ B11=[-61]  (不在條件內 - 沒有計算)
※ C11=-60    和=-118+-60=-178 (條件2)
※ O11=[-9]   (不在條件內 - 沒有計算)
※ P11=20     和=-178+20=-158 (條件2)

TOP

回復 9# donod
看起來我可能還有點誤會,
改了幾次程式結果都不對.

你可不可以像 6# 這樣人工跑一遍流程,
並詳細敘述和的變化情形及每一步驟適用的條件.
以便於確認並釐清程式到底應該如何修改.

TOP

回復  donod
※ N10=-2    (條件4 - 略過)
會註明 條件4 - 略過 是因為之前的 ※ G10=135   和=-58+33=- ...
luhpro 發表於 2013-10-31 20:03

謝謝大大回覆!
M10=[-30]
N10=-2
條件4:如果綠色格內有[]的數值>=D5(>=33),只當D5的值,不需計算其右邊無[]的數值
所以N10要計算

TOP

本帖最後由 luhpro 於 2013-10-31 20:06 編輯

回復 7# donod
※ N10=-2    (條件4 - 略過)
會註明 條件4 - 略過 是因為之前的 ※ G10=135   和=-58+33=-25 (條件4, 觸發)   觸發了條件4,
而條件4 的說明是 : 如果綠色格內有[]的數值>=D5,只當D5的值,不需計算其右邊 無[] 的數值
所以觸發此條件後, 其右邊無[]的值就不再列入計算範圍內而被直接略過了.
此條件不是這個意思的嗎?

msgbox 那一行 改為
[A1]=lSum(0)
[B1]=lSum(1)
[C1]=lSum(0)+lSum(1)

TOP

回復 6# luhpro
再謝謝大大指教,條件4,條件5如下:
※ M10=[-30] (條件2 - 有[]要略過)
※ N10=-2    (條件4 - 略過)
條件4:如果綠色格內有[]的數值>=D5(即>=33),只當D5的值,不需計算其右邊無[]的數值

※ I9=[32]   (條件2 - 有[]要略過)
※ J9=-102   (條件5 - 略過)
條件5:如果綠色格內有[]的數值<=E5(即<=-91),只當E5的值,不需計算其右邊無[]的數值

再請教大大,綠色,無色及兩者總和的結果,可否分別顯示在指定格內,謝謝!

TOP

回復  luhpro
再謝謝大大指教!
條件2:如果綠色格內的數值E5,只當格內的值
是指沒有[ ]的數值,不包括有 ...
donod 發表於 2013-10-30 00:35

那就只要改第 27 行的 :
lSum(iIdx) = lSum(iIdx) + iNum
為
If Left(.Value, 1) <> "[" Then lSum(iIdx) = lSum(iIdx) + iNum
即可.

不過算出來的答案是 -65 與 -1 還是與你的不同.

計算過程如下:
第 1 行 - ( D5=33 , E5=-91 )
※ C9=[-100] 和=-91 (條件5 - 如果綠色格內有[]的數值<=E5,只當E5的值,不需計算其右邊無[]的數值, 觸發)
※ D9=33     (條件5 - 略過)
※ G9=[35]   和=-91+33=-58 (條件4 - 如果綠色格內有[]的數值>=D5,只當D5的值,不需計算其右邊無[]的數值)
※ H9=-110   (條件5 - 略過)
※ I9=[32]   (條件2 - 有[]要略過)
※ J9=-102   (條件5 - 略過)

第 2 行 -
※ F10=[-27] (條件2 - 有[]要略過)
※ G10=135   和=-58+33=-25 (條件4, 觸發)
※ M10=[-30] (條件2 - 有[]要略過)
※ N10=-2    (條件4 - 略過)

第 3 行 -
※ B11=[-61]  (條件2 - 有[]要略過)
※ C11=-60    和=-25+-60=-85 (條件2)
※ O11=[-9]   (條件2 - 有[]要略過)
※ P11=20     和=-85+20=-65 (條件2)

TOP

回復 4# luhpro
再謝謝大大指教!
條件2:如果綠色格內的數值<D5及>E5,只當格內的值
是指沒有[ ]的數值,不包括有[ ]的數值。

TOP

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