返回列表 上一主題 發帖

樞紐分析表-排序

樞紐分析表-排序

請問如何將該表格用樞紐分析表做成圖2?

年份 = 可以根據源數據堛漲~份選擇
選擇年份后
會左邊按照該年份的GDP金額自動排序頭10個。
然後右邊根據左邊的表格自動生成棒形圖
2.jpg

2.zip (16.12 KB)

樞紐分析表幾乎沒用到, 複製再排序即可
Xl0000096.rar (19.64 KB)

TOP

樞紐分析表幾乎沒用到, 複製再排序即可
准提部林 發表於 2023-11-5 14:54


請問有沒有比較簡單的方法來表達出結果?
另外有沒有功能是當REPORT 堶悸"B1" 年份更改后,自動運行VBA, 不用再去按RUN?

Sub Report()
Dim I As Integer, Last As Integer
Dim Frng As Range, Rng As Range
    Sheets("Data").Select
    Columns("N:CE").Select
    Selection.ClearContents
  
   
    Sheets("Data").Select
    Range("A1:L50").Select
    Selection.Copy
    Sheets("Data").Select
    Range("N2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
         With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    Sheets("Data").Select
    Columns("A:A").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Report").Select
    Columns("E:E").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Report").Select
    Range("F2").Select
    Application.CutCopyMode = False
   
    Last = Sheets("Report").Range("E1").CurrentRegion.Rows.Count
   
    For I = 2 To Last
   
Sheets("Report").Range("F" & I).Value = Application.VLookup(Range("B1"), Sheets("Data").Range("N:CC"), I, False)
    Next I
     Columns("E:F").Select
    ActiveWorkbook.Worksheets("Report").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Report").Sort.SortFields.Add2 Key:=Range("F2:F52") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Report").Sort
        .SetRange Range("E1:F52")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("E12:F500").Select
    Selection.ClearContents
    Range("B1").Select
        
End Sub

图表源数据VBA动态图.rar (40.86 KB)

TOP

樞紐分析表幾乎沒用到, 複製再排序即可
准提部林 發表於 2023-11-5 14:54



感謝,請問能不能根據年份在圖表上加插年份?如附圖
另外可否輸入年份后,自己運行VBA?
1.jpg

TOP

回復 1# 198188
回復 2# 准提部林


    謝謝 198188前輩發表此主題與範例,謝謝 准提部林前輩指導
後學學習心得如下,請前輩再指導

清除舊資料:
20231106-1.jpg
2023-11-6 08:05


執行結果:
20231106-2.jpg
2023-11-6 08:05



Sub Test_A1()
Dim R&, C
'↑宣告變數:R是長整數,C是通用型變數
C = Application.Match([c1], Sheet1.[1:1], 0)
'↑令C這通用型變數是 以Match()方法回傳[C1]儲存格值 在Sheet1(源數据)表.[1:1]的位置
https://learn.microsoft.com/zh-t ... sheetfunction.match
If IsError(C) Then Exit Sub
'↑如果以IsError 函數判斷 C變數回傳(TRUE):是錯誤值,就結束程式執行
R = Sheet1.[a65536].End(3).Row - 1
'↑令R這長整數變數是 Sheet1(源數据)A欄最後一個有內容儲存格列號-1
With [c4].Resize(R, 2)
'↑以下是關於 [C4]儲存格擴展向下R變數列,擴展向右2欄範圍儲存格的程序
     .Columns(1) = Sheet1.[a2].Resize(R).Value
     '↑令該範圍儲存格第1欄儲存格值是 Sheet1(源數据)表.[A2]擴展向下R變數列儲存格值
     .Columns(2) = Sheet1.Cells(2, C).Resize(R).Value
     '↑令該範圍儲存格第2欄儲存格值是 Sheet1(源數据)表第 C變數欄/第2列儲存格,
     '向下R變數列儲存格值

     .Sort Key1:=.Item(2), Order1:=xlDescending, Header:=xlNo
     '↑令該範圍以第2欄做沒有標題的漸減排序
     .Rows(11).Resize(R).ClearContents
     '↑令該區域第11列開始擴展向下R變數列的範圍儲存格內容清除
End With
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

本帖最後由 Andy2483 於 2023-11-6 08:40 編輯

回復 4# 198188


    後學建議以下方法
1.在圖表插入文字方塊,插入函數 =$C$1 作為文字方塊內容
2.觸發[C1]儲存格時自動執行程式碼

1.
20231106-3.jpg
2023-11-6 08:38


2.
20231106-4.jpg
2023-11-6 08:38



Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "C1" Then Call Test_A1
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

回復 5# Andy2483


    感謝前輩指導解惑

TOP

        靜思自在 : 我們要做好社會的環保,也要做好內心的環保。
返回列表 上一主題