返回列表 上一主題 發帖

[發問] 跳列統計有顯示"0"的儲存格之總個數

[發問] 跳列統計有顯示"0"的儲存格之總個數

跳列統計有顯示0的儲存格之總個數.rar (23.4 KB)
C26 =從47列起始,每跳17列統計有顯示"0"的儲存格之個數加總。

請問:C26公式要怎麼修正?
謝謝!

回復 1# ziv976688

請測試看看,謝謝
另外,為什麼都沒有0時參考答案有0和空白?

Sub test()
Dim Arr, n%, i&, j&
R = [b65536].End(3).Row
Arr = Range("c47:ay" & R)
For j = 1 To UBound(Arr, 2)
    For i = 1 To UBound(Arr) Step 17
        If Arr(i, j) = "" Then GoTo 99
        If Arr(i, j) = 0 Then n = n + 1
99: Next i
    Arr(1, j) = n: n = 0
Next j
Range("c26").Resize(1, 49) = Arr
End Sub

TOP

本帖最後由 ziv976688 於 2021-9-28 15:23 編輯

回復 2# samwang
答案正確
謝謝您的耐心指導~感恩
================================
另外,為什麼都沒有0時參考答案有0和空白?
因為目前所有基本需求都已完成~所以在實際操作後,會有一些細項必須補充~
EX : 在C26補充每跳17列統計有顯示"0"的個數~因為"最小的數字不一定是"0"~將"O"統計出個數比對。個數愈多的C1:AY1對應號碼~不開出的機率愈大。
細項補足後~就整理歸檔存底。
====================================
因為擔心日後需求有變動,而末學如又不會自行修改程式(這類需求的程式碼,爬文是不可能找到)~
所以這一題~小弟還是希望有函數解(EXCEL2003版)~
目前的C26有爬文找到類似函數解~非空白的儲存格個數加總~
=IF(SUMPRODUCT(SUBTOTAL(3,OFFSET(C47,ROW($1 : $1026)*17-17,)))>0,SUMPRODUCT(SUBTOTAL(3,OFFSET(C47,ROW($1 : $1026)*17-17,))),"")
只是要再加上單獨計算有顯示"0"的儲存格個數條件~如想以COUNTIF或SUMIF再配合~但一直寫不出來~正在努力爬文中

以上  再次謝謝您的指導和幫忙

TOP

C26
=IF(SUMPRODUCT(SUBTOTAL(2,OFFSET(C47,ROW($1:$1026)*17-17,)))>0,SUMPRODUCT(SUBTOTAL(2,OFFSET(C47,ROW($1:$1026)*17-17,))*(N(OFFSET(C47,ROW($1:$1026)*17-17,))=0)),"")
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

本帖最後由 ziv976688 於 2021-9-28 21:52 編輯

回復 4# ML089
答案完全符合需求~感恩

請教版主 :
(N(OFFSET(C47,ROW($1 : $1026)*17-17,))=0)
N是什麼意思?

又如果當欄"最小"都沒有顯示"0"的儲存格~
則該C26 : AY26的儲存格顯示""
公式要怎麼修改?
純粹只是公式研習~未雨綢繆~以備後需~
謝謝您:l
ol

TOP

N(OFFSET(....)) 這是N()是搭配OFFSET()使用,一言難盡,上網找 N(OFFSET( 說明吧

如果當欄"最小"都沒有顯示"0"的儲存格~
則該C26 : AY26的儲存格顯示""
不是很懂
最好有模擬答案,比較能了解你的說明
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

本帖最後由 ziv976688 於 2021-9-29 00:46 編輯

回復 6# ML089
1_
有上網找過~沒有找到適當的說明~小弟再繼續找看看~謝謝您

2_
C27=統計C47 : AY1026當欄的各"最小"列~有顯示"0"值的總個數
如當欄的各"最小"列~都無顯示"0"值時~則顯示""       
詳如範例檔C27 :AY27
跳列統計有顯示0的儲存格之總個數_V2.rar (23.99 KB)

請問: C27的函數公式 ?
懇請賜教~謝謝您

TOP

回復 7# ziv976688

如當欄的各"最小"列~都無顯示"0"值時~則顯示""        
>> 不好意思,公式不會,2#程式碼只要多個判斷如下僅供參考,謝謝
Sub test()
Dim Arr, n, i&, j&
R = [b65536].End(3).Row
Arr = Range("c47:ay" & R)
For j = 1 To UBound(Arr, 2)
    For i = 1 To UBound(Arr) Step 17
        If Arr(i, j) = "" Then GoTo 99
        If Arr(i, j) = 0 Then n = n + 1
99: Next i
    If n > 0 Then Arr(1, j) = n: n = 0
Next j
Range("c26").Resize(1, 49) = Arr
End Sub

TOP

回復 7# ziv976688

有關 OFFSET()與 N(OFFSET(....)) 的使用,如果數據源是單元格引用,通常使用N/T+OFFSET組合函式實現。
參考網址如下
https://www.excelhome.net/1436.html
https://club.excelhome.net/forum ... &extra=page%3D1
https://club.excelhome.net/forum ... &extra=page%3D1
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 7# ziv976688


如當欄的各"最小"列~都無顯示"0"值時~則顯示""  
=IF(SUMPRODUCT(SUBTOTAL(3,OFFSET(C47,ROW($1:$1026)*17-17,))*(N(OFFSET(C47,ROW($1:$1026)*17-17,))=0))=0,"",SUMPRODUCT(SUBTOTAL(3,OFFSET(C47,ROW($1:$1026)*17-17,))*(N(OFFSET(C47,ROW($1:$1026)*17-17,))=0)))

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題