他山之石 使用VBA字典 Part3

2021-08-20 22:43:34 字數 1869 閱讀 3293

這部分算是vba字典的高階用法了,竟然可以實現透視表功能,確實很強大!

sub 下棋法之多列彙總()

dim 棋盤(1 to 10000, 1 to 3)

dim 行數

dim arr, x, k

dim d as new dictionary

arr = range("a2:c" & range("a65536").end(xlup).row)

for x = 1 to ubound(arr)

if d.exists(arr(x, 1)) then

行數 = d(arr(x, 1))

棋盤(行數, 2) = 棋盤(行數, 2) + arr(x, 2)

棋盤(行數, 3) = 棋盤(行數, 3) + arr(x, 3)

else

k = k + 1

d(arr(x, 1)) = k

棋盤(k, 1) = arr(x, 1)

棋盤(k, 2) = arr(x, 2)

棋盤(k, 3) = arr(x, 3)

end if

next x

range("f2").resize(k, 3) = 棋盤

end sub

sub 下棋法之多條件多列彙總()

dim 棋盤(1 to 10000, 1 to 4)

dim 行數

dim arr, x as integer, sr as string, k as integer

dim d as new dictionary

arr = range("a2:d" & range("a65536").end(xlup).row)

for x = 1 to ubound(arr)

sr = arr(x, 1) & "-" & arr(x, 2)

if d.exists(sr) then

行數 = d(sr)

棋盤(行數, 3) = 棋盤(行數, 3) + arr(x, 3)

棋盤(行數, 4) = 棋盤(行數, 4) + arr(x, 4)

else

k = k + 1

d(sr) = k

棋盤(k, 1) = arr(x, 1)

棋盤(k, 2) = arr(x, 2)

棋盤(k, 3) = arr(x, 3)

棋盤(k, 4) = arr(x, 4)

end if

next x

range("g2").resize(k, 4) = 棋盤

end sub

sub 下棋法之資料透視表式彙總()

dim d as new dictionary

dim 棋盤(1 to 10000, 1 to 7)

dim 行數, 列數

dim arr, x, k

arr = range("a2:c" & range("a65536").end(xlup).row)

for x = 1 to ubound(arr)

列數 = (instr("1月2月3月4月5月6月", arr(x, 2)) + 1) / 2 + 1

if d.exists(arr(x, 1)) then

行數 = d(arr(x, 1))

棋盤(行數, 列數) = 棋盤(行數, 列數) + arr(x, 3)

else

k = k + 1

d(arr(x, 1)) = k

棋盤(k, 1) = arr(x, 1)

棋盤(k, 列數) = arr(x, 3)

end if

next x

range("f2").resize(k, 7) = 棋盤

end sub

他山之石 使用VBA字典 Part1

工作中經常要進行資料集間的主鍵查詢,滿足字典的要求 key列不允許有重複元素 所以,以後可考慮使用字典來實現一些查詢需求,以獲取更快的速度。1 什麼是vba字典?字典 dictionary 是乙個儲存資料的小倉庫。共有兩列。第一列叫key 不允許有重複的元素。第二列是item,每乙個key對應乙個i...

他山之石 使用VBA字典 Part2

這裡講的三個字典的應用,都挺新鮮的,有機會可以實踐一下。sub 提取不重複的產品 dim d as new dictionary dim arr,x arr range a2 a12 for x 1 to ubound arr d arr x,1 next x end sub sub 彙總 dim ...

他山之石 VBA自定義函式

vba自定義函式自己是最近才開始使用的。其好處是可在工作表中直接呼叫,很方便。這裡,這位老師總結的很好,學習了!1 什麼是自定義函式?在vba中有vba函式,我們還可以呼叫工作表函式,我們能不能自已編寫函式呢?可以,這就是本集所講的自定義函式 2 怎麼編寫自定義函式?我們可以按下面的結構編寫自定義函...