Excel VBA 按照要求提取數據,數據及字典法

一組數據需要從原始的數據轉換成要求的數據格式。

Excel VBA 按照要求提取數據,數據及字典法

這個問題初看起來,只是一個行列轉置的問題。但是細看起來,又好像沒那麼簡單。原始有四列,而且還有空白的單元格。這樣的話我們就需要運算一下,把四列的數據轉換成兩列數據,並刪掉空白單元格的數據。然後在於要求數據格式就行對比,填入相應的分數數據就可以。具體思路如下:

Excel VBA 按照要求提取數據,數據及字典法

按照上述的思路,我首先想到了使用數據的方式,然後再進行判斷寫入數據。過程及代碼如下:

Excel VBA 按照要求提取數據,數據及字典法

代碼如下:

Sub tjcj()

Dim arr, i%, k%, kk%, brr()

t = Timer

Application.ScreenUpdating = False

nRow = Sheets("sheet1").Range("a" & Rows.Count).End(3).Row

For kk = 1 To nRow Step 9

With Sheets("sheet1")

arr = .Range("a" & kk).Resize(9, 4)

nArr = UBound(arr)

ReDim brr(1 To 20, 1 To 2)

For i = 1 To nArr

brr(i, 1) = arr(i, 1)

brr(i, 2) = arr(i, 2)

Next i

For i = nArr + 1 To 2 * nArr

brr(i, 1) = arr(i - nArr, 3)

brr(i, 2) = arr(i - nArr, 4)

Next i

End With

With Sheets("sheet2")

nrow1 = Range("a" & Rows.Count).End(3).Row + 1

For i = 1 To UBound(brr)

For j = 1 To UBound(brr)

If Cells(1, i) = brr(j, 1) Then Cells(nrow1, i) = brr(j, 2)

Next j

Next i

End With

Next kk

Application.ScreenUpdating = True

MsgBox "本程序運行時間" & Format(Timer - t, "0.000")

End Sub

但是運行的時候,發現速度過慢,54行的數據處理,需要0.7s。讓我想起了試一試用字典的方式。字典可以裝入key值,以及與之對應的item值。要求數據的標題欄與key值對比,然後提取item的值,同樣可以達到目的。運行結果如下:

Excel VBA 按照要求提取數據,數據及字典法

代碼如下:

Excel VBA 按照要求提取數據,數據及字典法

我總結了一下,就本例而言,數據及字典的情況:

Excel VBA 按照要求提取數據,數據及字典法

就是因為arr(i,1)與arr(i,2)是一一對應。對比了arr(i,1),就提取arr(i,2)。同樣對比了字典的key值,從而提取item的值。


分享到:


相關文章: