返回列表 上一主題 發帖

如何判斷為同一組(進階問題)

請問版主:用vlookup一定要排序,若要工作表acc 中a欄要加入排序功能該如何寫?
希望支持!

TOP

本帖最後由 准提部林 於 2018-8-14 20:23 編輯

回復 11# s7659109


VLOOKUP不用排序
原公式會需要排序, 是省了第四個參數(TRUE/FALSE)
VLOOKUP(找查值, 區域, 欄位, TRUE/FALSE)  用FALSE就不須排序(精確比對)

VLOOKUP(C2,accnum,2,FALSE)
VLOOKUP(C2,accnum,2,0)
VLOOKUP(C2,accnum,2,)
三個公式道理相同

TOP

If TC = "" Then xD(T) = "|" & Arr(i, 4): GoTo 101
    If TC <> "|" & Arr(i, 4) Then xD(T) = "異常"
這一段不太懂,可否說明
希望支持!

TOP

謝謝但下面那句,可否說明,多學一點
希望支持!

TOP

回復 13# s7659109

TC = xD(T)  
>> 取字典檔的 ITEM 值給 TC

If TC = "" Then xD(T) = "|" & Arr(i, 4): GoTo 101  
>> 如果TC是空值, 表示尚未帶入xD, 則給予D欄的值為ITEM,
    D欄文字前加"|", 是考慮D欄可能是空白的,  就會與 IF TC = "" 又產生循環

If TC <> "|" & Arr(i, 4) Then xD(T) = "異常"
>> 比較 TC 與 當前列D欄文字, 若不相同, 即是異常

TOP

謝謝版主,又長進了
希望支持!

TOP

接續問題:當soure有更新資料,工作表1會自動載入新資料進來
        當次月系統日期15日時,上個月辦理過帳(每個月)不得更動了[attach]29223[/attach]

1070815.zip (22.55 KB)

希望支持!

TOP

回復 8# 准提部林


    謝謝論壇,謝謝前輩
後學藉此帖學習前輩的方案,方案學習心得註解如下,請前輩在指導

執行前:


執行結果:



Option Explicit
Sub NumberCode()
Dim Arr, i&, xD, T$, TC$
'↑宣告變數
Set xD = CreateObject("Scripting.Dictionary")
'↑令xD變數是字典
Arr = Range([D2], [A65536].End(3))
'↑令Arr變數是 二維陣列,以A~D欄第2列以下儲存格值帶入陣列中
For i = 1 To UBound(Arr)
'↑設順迴圈!
    T = Arr(i, 1) & Arr(i, 2):  TC = xD(T)
    '↑令T變數是 第1欄與第2欄陣列值所組成的新字串,
    '令TC變數是 以T變數查xD字典回傳item值

    If TC = "" Then xD(T) = "|" & Arr(i, 4): GoTo 101
    '↑如果TC變數是空的!就令T變數當key,item是"|"字元連接第4欄陣列值,
    '所組成的新字串,然後就跳到101標示位置繼續執行

    If TC <> "|" & Arr(i, 4) Then xD(T) = "異常"
    '↑如果TC變數值不同於 "|"連接第4欄Arr陣列值?
    '就令T變數在xD字典裡的item值換為 "異常"字串

101: Next i
For i = 1 To UBound(Arr)
'↑設順迴圈!
    T = Arr(i, 1) & Arr(i, 2): Arr(i, 1) = ""
    '↑令T變數是 第1欄與第2欄陣列值所組成的新字串,
    '清除掉Arr陣列第1欄的值

    If xD(T) = "異常" Then Arr(i, 1) = "x"
    '↑如果以T變數查xD字典回傳item值是 "異常",
    '就令當列Arr陣列第1欄的值是 "x"

Next i
[G2].Resize(UBound(Arr)) = Arr
'↑令Arr陣列值從[G2]儲存格開始寫入,超過此範圍的陣列值忽略
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列語字典,學習方案如下,請各位前輩指教

Option Explicit
Sub TEST()
Dim Brr, Y, i&, T$, T4$
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = Range([D2], Cells(Rows.Count, 1).End(xlUp))
'↑令Brr變數是 二維陣列,以A~D欄第2列以下儲存格值帶入陣列中
For i = 1 To UBound(Brr)
'↑設順迴圈
   T = Brr(i, 1) & Brr(i, 2): T4 = Brr(i, 4) & "|"
   '↑令T變數是 第1欄與第2欄陣列值所組成的新字串,
   '令T4變數是 第4欄陣列值連接 "|"符號所組成的新字串

   If Y(T) <> T4 And Y(T) <> "" Then Y(T & "|") = "X" Else Y(T) = T4
   '↑如果T變數查Y字典得item值與 T4變數不同,而且
   '且T變數查Y字典得item值不是初始值!就令T變數連接"|"組成的新字串當key,
   'item是"X",納入Y字典中,
   '否則就令T變數當key,item是T4變數納入Y字典中

Next
For i = 1 To UBound(Brr)
'↑設順迴圈
   Brr(i, 1) = Y(Brr(i, 1) & Brr(i, 2) & "|")
   '↑令Brr陣列第1欄寫入 第1欄與第2欄陣列值連接"|"組成的新字串,
   '查Y字典回傳item值

Next
[G2].Resize(UBound(Brr)) = Brr
'↑令從[G2]儲存格開始寫入Brr陣列值,超過此範圍的陣列值忽略
Set Y = Nothing: Erase Brr
'↑令釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

H2=REPT("X",COUNTIFS(A:A,A2,B:B,B2,D:D,D2)<>COUNTIFS(A:A,A2,B:B,B2))
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

        靜思自在 : 人要自愛,才能愛普天下的人。
返回列表 上一主題