VBA實現EXCEL透視表功能(彙總 計數)

2021-08-21 02:21:18 字數 2590 閱讀 5371

enum 數值

計數求和

end enum

enum 總計

對行列禁用

對行列啟用

僅對行啟用

僅對列啟用

end enum

sub 呼叫()

y = 透視(sheets(1).range("a1:d15"), true, 2, 3, 數值.求和, 總計.對行列啟用, sheets(1).[a21], 1)

msgbox "透視" & iif(y, "成功", "失敗")

end sub

function 透視(資料來源 as range, 首行為標題 as boolean, 列標籤所在列號 as integer, 計數求和列所在列號 as integer, 彙總方式, 總計方式, 結果起始單元格 as range, paramarray 行標籤所列號()) as boolean

on error goto errprocess

sp1 = "|_|"

dim re()

arr = 資料來源

資料起始行 = iif(首行為標題, 2, 1)

資料結束行 = ubound(arr)

set d = createobject("scripting.dictionary")

set d1 = createobject("scripting.dictionary")

for i = 資料起始行 to 資料結束行

d(arr(i, 列標籤所在列號)) = ""

next

列標籤 = d.keys

d.removeall

for i = 資料起始行 to 資料結束行

鍵 = ""

列數 = 0

for each t in 行標籤所列號

if t <> 列標籤所在列號 and t <> 計數求和列所在列號 then

列數 = 列數 + 1

鍵 = 鍵 & arr(i, t) & sp1 '作為列標籤,則不能為行標籤

end if

next

d1(鍵) = ""

鍵 = 鍵 & arr(i, 列標籤所在列號)

if 彙總方式 = 數值.計數 then

d(鍵) = d(鍵) + 1

elseif 彙總方式 = 數值.求和 then

d(鍵) = d(鍵) + arr(i, 計數求和列所在列號) * 1

end if

next

maxr = d1.count + 2

maxc = ubound(列標籤) + 列數 + 2

redim re(1 to maxr, 1 to maxc)

列數 = 0

for each t in 行標籤所列號

if t <> 列標籤所在列號 and t <> 計數求和列所在列號 then

列數 = 列數 + 1

re(1, 列數) = iif(首行為標題, arr(1, t), "")

end if

next

re(1, maxc) = "總計"

re(maxr, 1) = "總計"

for i = 0 to ubound(列標籤)

re(1, maxc - 1 - i) = 列標籤(ubound(列標籤) - i)

next

rekey = d1.keys

for i = 2 to maxr - 1

tmp = split(rekey(i - 2), sp1)

for j = 0 to ubound(tmp) - 1

re(i, j + 1) = tmp(j)

next

for j = 0 to ubound(列標籤)

re(i, maxc - 1 - j) = d(rekey(i - 2) & 列標籤(ubound(列標籤) - j))

re(maxr, maxc - 1 - j) = re(maxr, maxc - 1 - j) + re(i, maxc - 1 - j)

re(i, maxc) = re(i, maxc) + re(i, maxc - 1 - j)

next

s = s + re(i, maxc)

next

re(maxr, maxc) = s

select case 總計方式

case 總計.對行列禁用: maxr = maxr - 1: maxc = maxc - 1

case 總計.對行列啟用 '預設

case 總計.僅對行啟用: maxr = maxr - 1

case 總計.僅對列啟用: maxc = maxc - 1

end select

結果起始單元格.resize(maxr, maxc) = re

結果起始單元格.resize(maxr, maxc).interior.color = 16051688

透視 = true

exit function

errprocess:

set d = nothing

set d1 = nothing

透視 = false

end function

Python 實現秒錶功能

python 實現秒錶功能 以下例項使用 time 模組來實現秒錶功能 例項 import time print 按下回車開始計時,按下 ctrl c 停止計時。while true try input 如果是 python 2.x 版本請使用 raw input starttime time.ti...

C語言順序表功能實現

include include include typedef int datetype typedef struct seqlist seqlist void seqlistinit seqlist ps 初始化函式 void seqlistcheck seqlist ps 檢查容量函式,不夠擴容...

VBA 通過VBA實現EXCEL真正的全屏顯示

說明 通過vba實現真正的全屏顯示excel介面。測試 private sub commandbutton1 click if commandbutton1.caption 全屏顯示 then displayfullscreen true 基本全屏 commandbars 1 enabled fal...