輸入:
我必須計算每列中“1”和“0”的數量,如下所示:
Excel/巨集有什麼辦法可以做到這一點嗎?
答案1
如果我們說列從 開始"D1"
並列印到"A3"
,它可能看起來像這樣:
Sub countAndTranspose()
Dim section As Range, count As Range, entry As Range, sectionPrint As Range
Set section = Range("D1", Cells(1, Columns.count).End(xlToLeft)) 'All headers
For Each entry In section
Set sectionPrint = Cells(Rows.count, 1).End(xlUp) 'Last row in "A"
Set count = Range(Cells(entry.Row + 1, entry.Column), Cells(Rows.count, entry.Column).End(xlUp))
sectionPrint.Offset(1).Value = entry.Value 'Print header below last row in A
sectionPrint.Offset(1, 1).Value = WorksheetFunction.CountIf(count, 1) 'Print sum of 1
sectionPrint.Offset(1, 2).Value = WorksheetFunction.CountIf(count, 0) 'Print sum of 0
Next entry
End Sub
我們首先定義列的範圍,從行的遠光開始"D1"
並一直到該行的遠光處。
然後我們循環遍歷這個範圍,選擇列印列名稱的位置(A3及以下應為空)
答案2
Excel 電力查詢解決方案
對於專業人士- 完整程序:
let
Source = Excel.CurrentWorkbook(),
#"Expanded Content" = Table.ExpandTableColumn(Source, "Content", {"OPERATION", "MEDIA", "IT"}, {"OPERATION", "MEDIA", "IT"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Content",{"Name"}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Removed Columns", {}, "Attribute", "Value"),
#"Grouped Rows" = Table.Group(#"Unpivoted Columns", {"Attribute", "Value"}, {{"Count", each Table.RowCount(_), type number}}),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Grouped Rows", {{"Value", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Grouped Rows", {{"Value", type text}}, "en-US")[Value]), "Value", "Count", List.Sum),
#"Replaced Value" = Table.ReplaceValue(#"Pivoted Column",null,0,Replacer.ReplaceValue,{"Attribute", "1", "0"})
in
#"Replaced Value"
為他人- 詳細步驟。
選擇您的輸入資料表(包括標題)。
插入->表格
好的
點擊“內容”旁邊的雙箭頭
取消選中使用原始列名作為前綴
好的
右鍵單擊列“名稱”-> 刪除
選擇整個表
“轉換”->“逆透視列”
首頁 -> 分組依據
好的
選擇列“值”
轉換 -> 將列透視
為值列選擇“計數”
好的
選擇整個表
Transform -> Replace Values
填寫如下:
好的
首頁 -> 關閉並加載
答案3
在「操作」、「媒體」和「IT」列條目下方,請輸入兩個公式:
COUNTIF ( A2:A10, 1 )
為 1
COUNTIF ( A2:A10, 0 )
為 0。
複製 MEDIA 和 IT 下面的公式。
答案4
對於非 VBA 解決方案,如果您有 Excel 2016 或 Microsoft 365,則可以利用 LET。
=LET( array, A1:E4,
hdr, INDEX( array, 1, ),
rSeqBody, SEQUENCE( ROWS( array ) - 1 ),
cSeq, SEQUENCE( 1, COLUMNS( array ) ),
body, INDEX( array, rSeqBody + 1, cSeq ),
onesCount, MMULT( TRANSPOSE( SIGN( rSeqBody ) ), body ),
t1s, IFERROR( INDEX( TRANSPOSE( hdr ), TRANSPOSE( cSeq ), {1,2} ), TRANSPOSE( onesCount ) ),
t10s, IFERROR( INDEX( t1s, TRANSPOSE( cSeq ), {1,2,3} ), ROWS( body ) - TRANSPOSE( onesCount ) ),
t10s )
其中輸入是數組,包括帶有字段名稱的標題行,輸出是一個動態數組,該數組溢出到下面的單元格和右側的一列。
怎麼運作的
它首先獲取字段名稱並將它們放入一個名為的數組中人類發展報告。然後,它創建行和列序列來計算和調整輸出。然後它會建立一個包含 1 和 0 的數組,稱為身體。然後按列對 1 求和個數使用矩陣乘法。
這還不算1。它利用了它們可以相加的事實。如果它是一個符號,例如“x”,則它將不起作用。同樣,零也不會被計算在內,而只是根據 1 進行計算。
為了提供結果,它縫合了 hdr(轉置)到個數上(轉置)透過對轉置 hdr 的列進行過度索引以強制每行的第 2 列中出現錯誤,然後使用 IFERROR 將 !REF# 錯誤替換為轉置的 onesCount。
再重複一次以新增 0 的計數列,該列是透過從行數中減去 1 的計數來計算的。身體。
如果您想要 1COUNT 和 0COUNT 標題,您也可以將其縫合,但用您想要的任何措辭將其寫入工作表可能會更容易。
不用 LET 也是可以的,但是比較混亂且難以調試。 LET 提供了清晰度並消除了對輔助細胞的需求。