Board logo

標題: [發問] SUMPRODUCT函數+OR問提請教 [打印本頁]

作者: KITTYBOY    時間: 2010-7-1 16:28     標題: SUMPRODUCT函數+OR問提請教

本帖最後由 zz5151353 於 2010-7-1 17:15 編輯

DEAR  ALL大大 -
1.小弟寫一程式如下.執行無問題
=SUMPRODUCT(ISNUMBER(SEARCH("CC",$F$1:$F$60000))*ISNUMBER(SEARCH("日立",$G$1:$G$60000))*ISNUMBER(SEARCH("C2",$E$1:$E$60000)),$R$1:$R$60000)
2.但原條件 ISNUMBER(SEARCH("日立",$G$1:$G$60000)) 想加入一 OR  條件為如下  
   2.1 即  G1:G60000  除含有原條件  日立 字元成立外.  想新增條件  = 含有日立 或 MCL  字元均成立.
   2.2 改如下  OR(ISNUMBER(SEARCH("日立",$G$1:$G$60000)),ISNUMBER(SEARCH("MCL",$G$1:$G$60000)))
        無法抓取出統計資料
'=SUMPRODUCT(ISNUMBER(SEARCH("CC",$F$1:$F$60000))*OR(ISNUMBER(SEARCH("日立",$G$1:$G$60000)),ISNUMBER(SEARCH("MCL",$G$1:$G$60000)))*ISNUMBER(SEARCH("C2",$E$1:$E$60000)),$R$1:$R$60000)
3.程式如何修改.煩不吝賜教   THANKS*10000
作者: zz5151353    時間: 2010-7-1 17:23

本帖最後由 zz5151353 於 2010-7-1 17:35 編輯

沒有檔案可測試,請試一試這方法

=SUMPRODUCT(ISNUMBER(SEARCH("CC",$F$1:$F$60000))*ISNUMBER(SEARCH({"日立","MCL"},$G$1:$G$60000))*ISNUMBER(SEARCH("C2",$E$1:$E$60000))*$R$1:$R$60000)
作者: KITTYBOY    時間: 2010-7-2 10:05

回復 2# zz5151353

DERA 大大
  您提供之函數出現BUG如下圖如附檔  煩您再不吝指導. THANKS
作者: victorl    時間: 2010-7-2 12:36

回復 3# KITTYBOY


SUMIF應該就可以了吧, Criteria 設定為"*日立*"(包含"日立")
=SUMIF(B2:B6,"*日立*",D2: D6)   試試看結果就是300喔
作者: zz5151353    時間: 2010-7-2 14:41

E8

=SUMPRODUCT(ISNUMBER(SEARCH("CC",$A$1:$A$60000))*(OR(ISNUMBER(SEARCH($B$1:$B$60000,{"日立";"MCL"}))))*ISNUMBER(SEARCH("C2",$C$1:$C$60000)),$D$1:$D$60000)
作者: KITTYBOY    時間: 2010-7-2 15:05

DEAR  zz5151353 大大-
符合須求.THANKS *10000

DEAR  victorl  大大-
SUMIF 無法符何我多條件之需求.THANKS.
作者: KITTYBOY    時間: 2010-7-2 16:54

回復 6# KITTYBOY

DEAR  ALL大大 -
1.將您指導之程式使用於如附檔案.秀出 0 ????  
    1.1 原日立加總     =RANGE("B1")    10119
          但日立  或 MCL 之加總 =RANGE("B2")    0
          應 >= 10119 才對.
2.煩再不吝賜教.  THANKS
作者: Hsieh    時間: 2010-7-2 19:13

{=SUM(IF((ISNUMBER(FIND("CC",$F$2:$F$6000)))*((ISNUMBER(FIND("日立",$G$2:$G$6000)))+(ISNUMBER(FIND("MCL",$G$2:$G$6000)))),$R$2:$R$6000,))}[attach]1620[/attach]
作者: PD961A    時間: 2010-7-2 19:34

回復 7# KITTYBOY


     '=SUMPRODUCT(ISNUMBER(SEARCH("CC",$F$1:$F$60000))*(OR(ISNUMBER(SEARCH($G$1:$G$60000,{"日立","MCL"}))))*ISNUMBER(SEARCH("C2",$E$1:$E$60000)),$R$1:$R$60000)

[attach]1621[/attach]

試試看...
作者: zz5151353    時間: 2010-7-3 09:47

B1

=SUMPRODUCT(ISNUMBER(SEARCH("C2",$E$1:$E$6000))*ISNUMBER(SEARCH("CC",$F$1:$F$6000))*ISNUMBER(SEARCH($G$1:$G$6000,"日立"))+ISNUMBER(SEARCH($G$1:$G$6000,"MCL")),$R$1:$R$6000)
作者: PD961A    時間: 2010-7-3 19:12

本帖最後由 PD961A 於 2010-7-4 10:01 編輯

請問各位先進
同樣用ISNUMBER(SEARCH
請問在SEARCH($G$1:$G$6000,"MCL")),和("C2",$E$1:$E$6000))
    為什麼位子範圍要顛倒?有特別的用意嗎?
謝謝...
作者: KITTYBOY    時間: 2010-7-5 14:56

回復 10# zz5151353


    DEAR  HSIEH   PD961A  ZZ5151353  ALL  大大 -
       感謝您們之指導.程式TEST後運作正常   THANKS*10000
作者: Andy2483    時間: 2023-3-23 11:27

本帖最後由 Andy2483 於 2023-3-23 11:47 編輯

回復 1# KITTYBOY
回復 8# Hsieh


    謝謝論壇,謝謝前輩
後學藉此帖複習 在同一陣列裡收集結果資料,將局部資料(結果資料)寫入儲存格,
學習的方案如下,請各位前輩指教

原始資料:
[attach]36012[/attach]

執行結果1:
[attach]36013[/attach]

執行結果2:產生一個新活頁簿
[attach]36014[/attach]

Option Explicit
Sub TEST()
Dim Brr, i&, Tr&, TT&, N&, Tf$, Tg$, j%
'↑宣告變數:Brr是通用型變數,(i,Tr,TT,N)是長整數變數,
'(Tf,Tg)是字串變數,j是短整數變數

Brr = Range([R1], Cells(Rows.Count, "E").End(xlUp))
'↑令Brr這通用型變數是 二維陣列,以[R1]到 E欄最後有內容儲存格值帶入
For i = 2 To UBound(Brr)
'↑設順迴圈!i從2到 Brr陣列縱向最大索引列號
   Tf = Trim(Brr(i, 2)): Tg = Brr(i, 3): Tr = Val(Brr(i, 14))
   '↑令Tf這字串變數是 i迴圈列第2欄Brr陣列值去除頭尾空白字元的新字串
   '↑令Tg這字串變數是 i迴圈列第3欄Brr陣列值的新字串
   '↑令Tr這長整數變數是 i迴圈列第14欄Brr陣列值經轉化為數值的整數

   If Tf Like "CC*" Then
   '↑如果Tf變數是以 "CC"字串開頭?
      If Tg Like "*日立*" Or Tg Like "*MCL*" Then
      '↑如果 Tg變數裡包含"日立"字串,或 Tg變數裡包含"MCL"字串?,
      '這兩個其中只要有一個條件成立?

         TT = TT + Tr: N = N + 1
         '↑令TT這長整數變數是 TT變數自身 + Tr變數,
         '令N這長整數變數累加 1  (PS:N變數一開始的初始值是0)

         '(N變數是要指定符合條件的資料要陸續放在Brr陣列的哪個列位)
         For j = 1 To UBound(Brr, 2): Brr(N + 1, j) = Brr(i, j): Next
         '↑設順迴圈!j從1到 Brr陣列橫向最大索引欄號,
         '令(N變數+1)列第j變數欄的Brr陣列值是 i迴圈列第j變數欄的Brr陣列值

      End If
   End If
Next
[B2] = TT
'↑令[B2]儲存格值是 TT變數
Workbooks.Add
'↑令產生一個新的活頁簿
[A1].Resize(N + 1, UBound(Brr, 2)) = Brr
'↑令新活頁簿第1個工作表的[A1]儲存格擴展向下 N變數+1列,
'向右擴展 Brr陣列橫向最大索引欄號數欄,這範圍儲存格值 以Brr陣列值帶入

Cells.Columns.AutoFit
'↑令整個工作表全部欄位 自動調整欄寬
ActiveWindow.Zoom = 75
'↑令視窗顯示75%
'100 表示正常大小、200 表示雙倍大小,依此類推)

MsgBox TT
'↑令跳出提示窗顯示: TT變數值
Erase Brr
End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)