Excel VBA 根據單據號核銷定金

今天遇到的問題,應該是財務人員經常會遇到的問題。

問題如下:

Excel VBA 根據單據號核銷定金

此數據,提供的時候就有2000行的數據,實際數據據說有數萬行。

解決的思路如下:

Excel VBA 根據單據號核銷定金

運行的結果如下:

Excel VBA 根據單據號核銷定金

代碼如下:

Excel VBA 根據單據號核銷定金

源代碼(加代碼解析)如下:

Sub 刪除數值()

Dim nRow, arr

'讀取f列的最後一個非空單元格

nRow = Range("f" & Rows.Count).End(3).Row

'把F與H列的數據放在數組

arr = Range("f1:h" & nRow)

'轉換數據格式

For i = 1 To UBound(arr)

arr(i, 1) = "'" & arr(i, 1)

Next i

'先讀取退訂金的數據

For i = UBound(arr) To 1 Step -1

'判斷是否為非空

If arr(i, 2) <> "" Then

'先讀取收訂金的數據

For j = UBound(arr) - 1 To 1 Step -1

'數據比較

If arr(i, 1) = arr(j, 1) And arr(i, 2) = arr(j, 3) Then

'行刪除

Rows(i).Delete

Rows(j).Delete

End If

Next j

End

If

Next i

End Sub

本例在寫本文章的時候,突然有一個更好的方案:就是讀取G列的最後一個非空單元格。然後把數據裝入相應的數組。這樣可能會減少判斷退訂金為非空單元格的次數。大家覺得呢?


分享到:


相關文章: