返回列表 上一主題 發帖

Range 內容指定的語法要如何撰寫。

Range 內容指定的語法要如何撰寫。

問題
想要比對多張資料表,相同位置的內容是否相同,用 Range 要如何寫。
例如:要比對E6:E12,在「22」這張 Sheet 與「參考表格」,2者是否相同。

同張表格,不同 Range 可以解決
Set Range_Area1 = Range("E6:E12")
Set Range_Area2 = Range("H6:H12")
Range_Area1.FormulaArray = Range_Area2.FormulaArray

但不同 Sheet 的比對要如何寫
已嘗試過
    '1.Range_X = Range_Area1
    '2.Range_X.Value = Range_Area1.Value
    '3.Range_X.FormulaArray = Range_Area1.FormulaArray
    '4.Range_X = Sheets("參考表格").Range_Area1

[緣故]
因為現場的小姐不會用資料庫,把 Excel 當做是Word 在處理。
因為要整理成資料庫,想要用巨集寫,用以抓資料。
但要先行比對,輸入資料的「單位數」是否相同。
整個「報表格式」是否相同
Macro_Rng_Test.zip (12.11 KB)

回復 1# Baracuda


    FormulaArray
   傳回或設定範圍的陣列公式
如果指定範圍不包含陣列公式,本屬性傳回 Null
所以妳的做法是比對不出來的
  1. Sub nn()
  2. myaddress = "E6:E12"
  3. mystr = Join(Application.Transpose(Sheets("22").Range(myaddress).Value))
  4. mystr1 = Join(Application.Transpose(Sheets("參考表格").Range(myaddress).Value))
  5. MsgBox IIf(mystr = mystr1, "相同", "不同")
  6. End Sub
複製代碼
學海無涯_不恥下問

TOP

謝謝你﹗超級版主。
語法大概可以猜出你寫的邏輯。
「指定範圍不包含陣列公式,本屬性傳回 Null」這一段,看不太懂。
1.因為同張 Sheet 時可以用(意思是 包含陣列公式)。
2.不同張Sheet 時,就變成 不包含陣列公式。
不過這個應該不影響整個VBA 的進度。先拿來做再說。

TOP

回復 3# Baracuda

Null 關鍵字是一種 Variant 次型態。意指變數 中未含正確的資料。
所以表示說若你指定範圍內沒有陣列公式存在時就會傳回沒有值

依照你檔案內容來看,儲存格內並未含有陣列公式傳回的當然都是NULL
注意的是不同工作表範圍寫法,只是指定清楚工作表名稱罷了
學海無涯_不恥下問

TOP

        靜思自在 : 不怕事多,只怕多事。
返回列表 上一主題