Board logo

標題: [發問] 比對(數組) [打印本頁]

作者: s7659109    時間: 2018-10-30 11:39     標題: 比對(數組)

問題:
比對條件:a1&b1&c1
當匯入工作表與data比對,相同者,不匯入,不同者才匯入
並不定期更新
請以數組方式撰寫
並增加過帳功能,如c欄1(第1次月考)確定分數不更動時,2列至51列就鎖住
不在更動,以此類推
作者: 准提部林    時間: 2018-10-31 09:47

看不懂需求及要處理的流程~~
[匯入]及[更新]是不同的,
[過帳]又是怎判定??
作者: s7659109    時間: 2018-10-31 10:45

回復 2# 准提部林
回應問題:
1.第1次第2列無資料時,匯入;當列數>2時,以更新方式貼上
(判斷來源工作表data!A欄&b欄&c欄與工作表匯總!A欄&b欄&c欄比對,相同者,不更新,
不同者,在工作表匯總!最後1列+1,接續匯入)
2.當本工作表資料,已匯入工作表匯總!時,過帳欄(k欄)一併打v,並鎖住已打v之儲存格(如a2:k51),以此類推
作者: 准提部林    時間: 2018-10-31 15:02

回復 3# s7659109


既然K欄已有〔註記〕,即可憑此略過匯入,何必再用A&B&C去比對???

所謂的〔鎖住〕,是指〔保護工作表〕???
作者: s7659109    時間: 2018-10-31 15:21

希望以A&B&C去比對,而不是k欄對註記做為匯入更新依據,因data為來源資料,裡面不同條件需求,是為以後各別表拆分準備
另外〔鎖住〕,是指〔保護工作表〕中已過帳資料(excel 可以保護部分儲存格嗎? )
作者: 准提部林    時間: 2018-10-31 15:45

回復 5# s7659109
Sub 匯入()
Dim Arr, Brr, xD, r&, i&, j%, T$, xU As Range, N&
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([匯總!C1], [匯總!A65536].End(xlUp))
For i = 2 To UBound(Arr)
    xD(Arr(i, 1) & Arr(i, 2) & Arr(i, 3)) = 1
Next i
Application.ScreenUpdating = False
With Sheets("data")
     .Unprotect
     .[A:K].Locked = False
     Set xU = .[A1:K1]
     r = .[A65536].End(xlUp).Row
     Arr = .Range("A1:J" & r)
     Brr = .Range("K1:K" & r)
     For i = 2 To r
         If Val(xD(Arr(i, 1) & Arr(i, 2) & Arr(i, 3))) <> 1 Then
            N = N + 1
            For j = 1 To 10: Arr(N, j) = Arr(i, j): Next
         End If
         Brr(i, 1) = "v"
         Set xU = Union(xU, .Cells(i, 1).Resize(1, 11))
     Next i
     .[K1].Resize(r) = Brr
     xU.Locked = True
     .EnableAutoFilter = True
     .Protect Contents:=True, UserInterfaceOnly:=True
End With
If N = 0 Then Exit Sub
[匯總!B:B].NumberFormatLocal = "@"
[匯總!A65536].End(xlUp)(2).Resize(N, 10) = Arr
End Sub

[attach]29610[/attach]
作者: s7659109    時間: 2018-10-31 15:58

ok
但 If Val(xD(Arr(i, 1) & Arr(i, 2) & Arr(i, 3))) <> 1中Val(xD())<>1不了解意思?val 又有何用意?
作者: 准提部林    時間: 2018-10-31 16:24

回復 7# s7659109

值轉值 或 文字轉值
val(1)=1
val("1")=1
val("")=0
val("a")=0
作者: s7659109    時間: 2018-11-1 11:34

回復 8# 准提部林
問題反應:
A、B、C欄匯入為字串,D~J為數值,且加千分位,如何修正?
作者: 准提部林    時間: 2018-11-1 12:03

回復 9# s7659109

[匯總!B:B].NumberFormatLocal = "@"
即是[格式]設定, 自行用[錄製]即可取得格式,
或手動預先[整欄]設定!!!

話說, 貴 提問帖也發了不少, 看那麼多別人寫的程式碼,
這種簡單的vba, 也應自己可以做出來~~~

提供程式碼, 是希望給人學習再套用至類似需求上,
否則僅是[客製化]的用途,用完即丟 ~~乾脆接案去了~~~
作者: s7659109    時間: 2018-11-1 15:33

謝謝,了解




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)