返回列表 上一主題 發帖

[發問] 開啟2個Excel做資料比對

回復 2# faye59
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, D As Object, E As Range
  4.     With Sheets("Form")
  5.         Set Rng = .Range(.[d2], .Range("d" & .[a2].End(xlDown).Row))  '符合運動時間的列位
  6.     End With
  7.     Rng = "=IF(rc[-1]-rc[-2]>=TIMEVALUE(""02:00:00""),""符合"",""不符合"")"  '寫上公式 (健身房離開時間-健身房進入時間>=02:00:00)
  8.     Rng.Value = Rng.Value  '公式轉為值
  9.     Set D = CreateObject("Scripting.Dictionary")   '字典物件
  10.     For Each E In Rng       'Rng.Cells 的迴圈
  11.         D(E.Offset(, -3).Text) = E.Text  '關鍵字-> E.Offset(, -3)為姓名帶入 (符合/不符合)
  12.     Next
  13.     '重設Rng變數
  14.     Set Rng = Workbooks.Open("\\Test\B.xlsx").Sheets("Time").Range("A:A").SpecialCells(xlCellTypeConstants)
  15.    
  16.     For Each E In Rng
  17.         If D.EXISTS(E.Text) Then E.Offset(, 1) = D(E.Text)  'E為A欄 -> E.Offset(, 1)= B欄
  18.         '字典物件的Exists 方法 :字典物件的關鍵字存在時為TTrue, 執行(Then  .... )
  19.     Next
  20.     Rng.Parent.Parent.Close False
  21.     'Rng.Parent 是Sheets("Time")
  22.     'Rng.Parent.Parent為Workbook
  23. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# faye59
  1. Option Explicit
  2. Sub Ex()
  3.     Dim  D As Object, i As Integer , xTime As Date
  4.     Set D = CreateObject("Scripting.Dictionary")   '字典物件
  5.     With Workbooks.Open("\\Tank\Access\B.xlsx").Sheets("Time").Range("A:A")
  6.         i = 2
  7.         Do While .Cells(i) <> ""
  8.         If Not IsDate(.Cells(i, "B")) Then MsgBox .Cells(i) & " - " & .Cells(i, "B") & " 不是正確時間 ": End
  9.             D(.Cells(i).Text) = Application.Text(.Cells(i, "B"), "HH:MM")
  10.             i = i + 1
  11.         Loop
  12.     End With
  13.     With Sheets("Form").Range("A:A")
  14.         i = 2
  15.         Do While .Cells(i) <> ""
  16.             If D.EXISTS(.Cells(i).Text) Then
  17.                 .Cells(i, "E") = D(.Cells(i).Text)
  18.                 xTime = Application.Text(.Cells(i, "C") - .Cells(i, "B"), "HH:MM")
  19.                 If xTime >= D(.Cells(i).Text) Then
  20.                     .Cells(i, "D") = "足夠"
  21.                 Else
  22.                     .Cells(i, "D") = "不足夠"
  23.                 End If
  24.             Else
  25.                 .Cells(i, "d") = "沒會員"
  26.             End If
  27.             i = i + 1
  28.         Loop
  29.     End With
  30. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2018-8-9 08:11 編輯

回復 6# faye59
If Not IsDate(.Cells(i, "B"))      **檢查  .Cells(i, "B")是否為 有效日期**
'**如果運算式是一個日期,或是像有效日期一樣可識別的,IsDate 會傳回True;否則它會傳回 False**

是在檢查B.xlsx的運動時間是否輸入正確的時間數值
B.xlsx的工作表TIME, C2=ISNUMBER(B2) 傳回False  **不是數值
B.xlsx的工作表TIME, C2=ISTEXT(B2)        傳回True  **是文字

B.xlsx的工作表TIME, C3=ISNUMBER(B3)  傳回True  **是數值
B.xlsx的工作表TIME, C3=ISTEXT(B3)          傳回False  **不是文字
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題