一組數據需要從原始的數據轉換成要求的數據格式。
這個問題初看起來,只是一個行列轉置的問題。但是細看起來,又好像沒那麼簡單。原始有四列,而且還有空白的單元格。這樣的話我們就需要運算一下,把四列的數據轉換成兩列數據,並刪掉空白單元格的數據。然後在於要求數據格式就行對比,填入相應的分數數據就可以。具體思路如下:
按照上述的思路,我首先想到了使用數據的方式,然後再進行判斷寫入數據。過程及代碼如下:
代碼如下:
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的值,同樣可以達到目的。運行結果如下:
代碼如下:
我總結了一下,就本例而言,數據及字典的情況:
就是因為arr(i,1)與arr(i,2)是一一對應。對比了arr(i,1),就提取arr(i,2)。同樣對比了字典的key值,從而提取item的值。
閱讀更多 浮雲Excel分享 的文章