2024年4月22日 星期一

PivotTable樞鈕分析表,搭配Formula公式運用,詳列出⌈廠牌型號⌋,在各個" 部門別"之擁有 台數 報表產製

EXCEL資料表,分別有 財產設備大分類、廠牌型號、部門別、數量 等4欄位,
        A                                  B                       C                 D
1    財產設備大分類        廠牌型號              部門別           數量
2    個人電腦           HP Pro SFF 400 G9    人事               2
3    個人電腦           HP Pro SFF 400 G9     財務              2
4    個人電腦           HP Pro SFF 400 G9    行政               2
5    個人電腦           HP Pro SFF 400 G9     銷售              2
6    個人電腦           ASUS S500TE             研發               1
7    個人電腦           HP Pro SFF 400 G9     研發               1
8    個人電腦           HP Pro SFF 400 G9     資訊               2


公司部門,有人事、財務、行政、銷售、研發、資訊等6部門別

有1份報表,需臚列出  財產設備大分類,其各⌈廠牌型號⌋,分配到公司,各個部門之台數(如下方產出的結果)

,####################################################################################
以下是個人作法,先用「樞紐分析表」,將EXCEL資料 預做梳理,
 

在以下區域之間拖曳欄位:

💛篩選  拖曳  財產設備大分類、    (因為有數個「財產設備大分類」項目,如:個人電腦、筆電)
💜欄    拖曳  部門別、                    (方便掌握 各部門別,可逐欄一一列出)
💜列    拖曳   廠牌型號、              (各廠牌型號,以此例「個人電腦」大分類,呈現會有2列,

                                                   分別  為HP Pro SFF 400 G9 及 ASUS S500TE    等2類桌機
💜值    拖曳    數量                        (可幫忙預先加總,列出各部門別,各廠牌型號 電腦之台數)
'=====================================================================
💙'T1欄及O1欄,公式手動設定好
💛B1欄,為PivotTable樞鈕分析表之 大分類「財產設備大分類」,個人電腦、筆電等可供下拉(此欄位值,即為上面  篩選  拖曳,自動產生),只要下拉變動不同之大分類,樞鈕分析表之欄及列 資料,也會隨之變動。

💙T1欄(=COUNTA(4:4)),為PivotTable樞鈕分析表之總欄數   ,因為第4列為PivoteTable部門別,逐欄一一列出,此T1欄的值,為手動填入COUNTA公式
此公式之目的主要為讓後續VBA程式,清楚掌握「個人電腦」大分類中,共有多少 部門別?在PivotTable中,如該部門別沒有分配到大分類資源者,將不會列出部門別,故此欄會隨著大分類之不同,而做變動。


💙O1欄(=COUNTA(A:A)+1),為PivotTable樞鈕分析表之總列數  ,因為A欄為PivoteTable廠牌型號,逐列一一呈現,此O1欄的值,為手動填入COUNTA公式
此公式之目的主要為讓後續VBA程式,清楚掌握「個人電腦」大分類中,共有多少項?廠牌型號,此欄會隨著大分類之不同,而做變動(total_Rows)。

'####################################################################################

Sub ApplyFormula()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim total_Rows As Long
    Dim formulaRange As Range
    Dim i As Long
    
    '來源4個欄位,經過「樞紐分析表」,將資料預做梳理後,工作表名稱指定為Pivot_1
    Set ws = ThisWorkbook.Sheets("Pivot_1")
    
    '因「樞紐分析表」精靈產出後,上半段前3列已固定做標題列用途,故要扣除3後,每次下拉💛B1「財產設備大分類」後,才是實際⌈廠牌型號⌋之資料筆數。
    total_Rows = ws.Range("O1").Value - 3
    
    Sheets("Pivot_1").Select
    Columns("P:P").Select        '清空P欄,因為在下拉⌈財產設備大分類⌋,會貼不同的Formula
    Selection.ClearContents
     
    ' 預訂放置公式的起始處,預訂每次均由P5欄開始放置
    Set formulaRange = ws.Range("P5")
    
    
    ' 各列⌈廠牌型號⌋,詳列出 各個 "部門別"擁有之台數,逐一詳列出來
    For i = 1 To total_Rows    ' 第一列開始,直到最後一列
        '搭配Range & Formula ,方便每次於💛B1下拉「財產設備大分類,每列最後貼上公式
        formulaRange.Offset(i - 1, 0).Formula = "=IF($B" & i + 4 & ">0, $B$4&$B" & i + 4 & "&""台, "", """")" & _
                                                "&IF($C" & i + 4 & ">0, $C$4&$C" & i + 4 & "&""台, "", """")" & _
                                                "&IF($D" & i + 4 & ">0, $D$4&$D" & i + 4 & "&""台, "", """")" & _
                                                "&IF($E" & i + 4 & ">0, $E$4&$E" & i + 4 & "&""台, "", """")" & _
                                                "&IF($F" & i + 4 & ">0, $F$4&$F" & i + 4 & "&""台, "", """")" & _
                                                "&IF($G" & i + 4 & ">0, $G$4&$G" & i + 4 & "&""台, "", """")" & _
                                                "&IF($H" & i + 4 & ">0, $H$4&$H" & i + 4 & "&""台, "", """")"
                                '最後一列,為該大分類,各部門別彙整後之小計台數 (因為PivotTable樞鈕分析表已預先產製好)  ;最前方IF判斷式>0,即 台數>0,則顯示 部門別及台數。                                                                                                             
    Next i      
End Sub

 '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

產出的結果 ( 💛B1欄「財產設備大分類」,下拉選擇⌈個人電腦⌋)

列標籤                 人事    財務   行政   銷售   研發    資訊

HP Pro SFF 400 G9     2         2         2        2         1          2  ,人事2台,財務2台....研發1台....(略)

ASUS S500TE                                           1               ,研發1台

 總計                     2         2         2        2         2          2  ,人事2台....................研發2台,資訊2台


'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

PROMPT提示詞下法如下: (可將下面提示詞,貼至AI神器去詢問,取得VBA程式碼參考資訊)
處理前之樞鈕分析表,計有4欄位

篩選  拖曳  財產設備大分類、
欄    拖曳  部門別、
列    拖曳   廠牌型號、
值    拖曳    數量


經過「樞紐分析表」處理後,工作表名稱指定為Pivot_1
B1欄,為樞鈕分析表之篩選  財產設備大分類

excel表中,第4列為標題列,分別為 A4 廠牌型號、B4 人事、C4 財務、D4 行政、E4 銷售、F4 研發、G4 資訊H4 ,

T1欄,公式已設好  =COUNTA(4:4),為樞鈕分析表之總欄數
O1欄,公式已設好  =COUNTA(A:A)+1,為樞鈕分析表之總列數

下面公式為全數設備型號,我已將每列總數 放於 P5開始放置公式, 因為台數為0 ,就無需放入,請參考下面公式,寫VBA程式
    
    total_Rows = ws.Range("O1").Value - 3
    
    Sheets("Pivot_1").Select
    Columns("P:P").Select       
    Selection.ClearContents
     
    Set formulaRange = ws.Range("P5")
    
    For i = 1 To total_Rows    ' 第一列開始,直到最後一列
        '搭配Range & Formula ,方便每次於💛B1下拉「財產設備大分類,每列最後貼上公式
        formulaRange.Offset(i - 1, 0).Formula = "=IF($B" & i + 4 & ">0, $B$4&$B" & i + 4 & "&""台, "", """")" & _
                                                "&IF($C" & i + 4 & ">0, $C$4&$C" & i + 4 & "&""台, "", """")" & _
                                                "&IF($D" & i + 4 & ">0, $D$4&$D" & i + 4 & "&""台, "", """")" & _
                                                "&IF($E" & i + 4 & ">0, $E$4&$E" & i + 4 & "&""台, "", """")" & _
                                                "&IF($F" & i + 4 & ">0, $F$4&$F" & i + 4 & "&""台, "", """")" & _
                                                "&IF($G" & i + 4 & ">0, $G$4&$G" & i + 4 & "&""台, "", """")" & _
                                                "&IF($H" & i + 4 & ">0, $H$4&$H" & i + 4 & "&""台, "", """")"                                                                                                      
    Next i      



相關參考資訊:

EXCEL VBA 

樞鈕分析表查詢運用