返回列表 上一主題 發帖

『已解決』陣列比較,找出差異的儲存格

回復 1# ko310kmo
就用你的邏輯
  1. Dim ar
  2. Private Sub Worksheet_Calculate()
  3. If IsEmpty(ar) Then ar = [B2:D13]: Exit Sub
  4. Set rng = [B2:D13]
  5. For I = 1 To UBound(ar, 1)
  6.     If ar(I, 2) & ar(I, 3) <> rng(I, 2) & rng(I, 3) Then
  7.        With Sheets(CStr(ar(I, 1)))
  8.           Set a = .[H65536].End(xlUp).Offset(1)
  9.           a = rng(I, 1): a.Offset(, 1) = rng(I, 2): a.Offset(, 3) = rng(I, 3)
  10.        End With
  11.     End If
  12. Next
  13. ar = rng
  14. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 4# ko310kmo
Dim ar  '宣告一個靜態陣列變數
Private Sub Worksheet_Calculate()
If IsEmpty(ar) Then ar = [B2:D13]: Exit Sub
如果是空值ar = [B2:D13],否則就結束sub的意思嗎?  '如果這個靜態陣列還沒建立,表示開啟檔案後第一次重算時,所以不必做任何比較就退出程序

Set rng = [B2:D13]    是設成陣列的意思嗎? rng是range的意思嗎? 還是是代號而已?]  '這個rng變數是個Range型態的變數,就是指向你DDE公式所在的範圍

For I = 1 To UBound(ar, 1)   '當靜態陣列有被寫入元素的值才會進到此循環
    If ar(I, 2) & ar(I, 3) <> rng(I, 2) & rng(I, 3) Then  '比較陣列跟範圍的值是否一樣
   為什麼會知道ar、rng是變動前後的陣列?
因為ar是程序最後把rng的值反過來設給ar,所以ar就變成前一次rng的值
       With Sheets(CStr(ar(I, 1)))
          Set a = .[H65536].End(xlUp).Offset(1)
所屬工作表的h欄最後一筆有資料的欄位的下一列。 是這意思對吧!!   但它的下一行不是空白嗎?
'是資料尾的下一列空白沒錯,你不是要把這些紀錄寫到對應的工作表內嗎?

          a = rng(I, 1): a.Offset(, 1) = rng(I, 2): a.Offset(, 3) = rng(I, 3)
       End With
    End If
Next
ar = rng   '將rng的值設給ar ,做下一次重算的比對基礎
End Sub
學海無涯_不恥下問

TOP

        靜思自在 : 看別人不順眼,是自己修養不夠。
返回列表 上一主題