ericks
2002-02-03, 03:26 PM
1.我想在EXCEL呼叫別的EXCEL檔來比對資料,我現在要打開檔案後才能比對,如果不要打開檔案,有什麼參數可以使用嗎?
2.我比對資料粉慢,因為是直接比對,可以用陣列做嗎?
如果可以要怎麼寫?
贊助商連結
2.我比對資料粉慢,因為是直接比對,可以用陣列做嗎?
如果可以要怎麼寫?
贊助商連結
贊助商連結 ericks 2002-02-03, 03:26 PM 1.我想在EXCEL呼叫別的EXCEL檔來比對資料,我現在要打開檔案後才能比對,如果不要打開檔案,有什麼參數可以使用嗎? 2.我比對資料粉慢,因為是直接比對,可以用陣列做嗎? 如果可以要怎麼寫? 贊助商連結 沙拉油 2002-02-04, 09:05 AM 不打開檔就要比對,這我不會 開檔後要比對,通常我會用巨集 ericks 2002-02-04, 03:17 PM 最初由 沙拉油 發表 不打開檔就要比對,這我不會 開檔後要比對,通常我會用巨集 那巨集又怎麼寫? 我是用這樣的:主要是在這一段比對和COPY資料號很多時間。 Windows("aaa.xls").Activate Sheets("a1").Select For I = 13 To 500 Step 1 If Left(Cells(I, 2).Value, 1) = "P" Then Z1 = I End If Next Windows("aaa.xls").Activate Sheets("b1").Select For I = 2 To 500 Step 1 If Left(Cells(I, 3).Value, 1) = "P" Then Z2 = j End If Next For I = 13 To Z1 Windows("aaa.xls").Activate Sheets("a1").Select temp1 = Range("C" & I).Value For j = 2 To Z2 Windows("aaa.xls").Activate Sheets("b1").Select temp2 = Range("D" & j).Value If (temp1 = temp2) Then temp3 = Range("F" & j).Value temp4 = Range("G" & j).Value temp5 = Range("B" & j).Value End If Next Windows("aaa.xls").Activate Sheets("a1").Select Range("D" & I).Value = temp3 Range("E" & I).Value = temp4 Range("A" & I).Value = temp5 Next 沙拉油 2002-02-04, 10:15 PM For I = 13 To 500 Step 1 If Left(Cells(I, 2).Value, 1) = "P" Then Z1 = I End If Next 字元P是列尾還是第500列是列尾 該欄只有一個儲存格內的文字串的首字元為P嗎? 如果是的話你的Z1 = I 的底下再加入一列 Exit For 跳出迴圈,不用再去做無意義的比對 這個巨集一直都只是在aaa.xls裡面執行吧?! 如果你有從其他的檔案執行這個巨集,那底下這一段就應該只需要保留最上面那一行就可以了 Windows("aaa.xls").Activate 還有那幾個開頭為 temp 的變數應該都可以省略 我沒有正規的學過 VBA 或 VB 一切都是自己揣摩的,如果有說錯請高手指導! ericks 2002-02-05, 11:31 AM 最初由 沙拉油 發表 For I = 13 To 500 Step 1 If Left(Cells(I, 2).Value, 1) = "P" Then Z1 = I End If Next 字元P是列尾還是第500列是列尾 該欄只有一個儲存格內的文字串的首字元為P嗎? 如果是的話你的Z1 = I 的底下再加入一列 Exit For 跳出迴圈,不用再去做無意義的比對 這個巨集一直都只是在aaa.xls裡面執行吧?! 如果你有從其他的檔案執行這個巨集,那底下這一段就應該只需要保留最上面那一行就可以了 Windows("aaa.xls").Activate 還有那幾個開頭為 temp 的變數應該都可以省略 我沒有正規的學過 VBA 或 VB 一切都是自己揣摩的,如果有說錯請高手指導! "P"是在儲存格中第一個字元,我用來計算這個資料表中有幾筆資料。 在"a1"和"b1"都有這個欄位的資料,比對資料,主要是要把"a1"和"b1", 相同資料抓出來,然後由"b1"複製到"a1"。 但是這個資料在比對時非常慢,比對時先抓出"a1"的第一筆資料, ,去比對"b1"的每一筆資料。 接著才第2筆、第3比一比一筆比對。 加上我的資料都是好幾百筆,所以我才想找其他方式的寫法。 沙拉油 2002-02-05, 12:29 PM "P"是在儲存格中第一個字元,我用來計算這個資料表中有幾筆資料。 那字首為 "P" 的那個儲存格就是最後一列囉? 如果是那你可以用底下這兩行 Z1 = Sheets("a1").Range("B65536").End(xlUp).Row Z2 = Sheets("b1").Range("C65536").End(xlUp).Row 來取代這一段 Sheets("a1").Select For I = 13 To 500 Step 1 If Left(Cells(I, 2).Value, 1) = "P" Then Z1 = I End If Next Windows("aaa.xls").Activate Sheets("b1").Select For I = 2 To 500 Step 1 If Left(Cells(I, 3).Value, 1) = "P" Then Z2 = j End If Next 可以省掉將近一千次的迴圈 沙拉油 2002-02-05, 12:39 PM 如果以整體來講應該可以改成這樣 Windows("aaa.xls").Activate Z1 = Sheets("a1").Range("B65536").End(xlUp).Row Z2 = Sheets("b1").Range("C65536").End(xlUp).Row For I = 13 To Z1 For j = 2 To Z2 If (Sheets("b1").Range("D" & j) = Sheets("a1").Range("C" & I)) Then Sheets("a1").Range("D" & I) = Sheets("b1").Range("F" & j) Sheets("a1").Range("E" & I) = Sheets("b1").Range("G" & j) Sheets("a1").Range("A" & I) = Sheets("b1").Range("B" & j) End If Next Next 我沒有資料可以詳加測試,你自己試試好了 沙拉油 2002-02-05, 12:46 PM 看齊來很奇怪,底下這段再改一下好了 Sheets("a1").select For I = 13 To Z1 For j = 2 To Z2 If Sheets("b1").Range("D" & j) = Sheets("a1").Range("C" & I) Then Range("D" & I) = Sheets("b1").Range("F" & j) Range("E" & I) = Sheets("b1").Range("G" & j) Range("A" & I) = Sheets("b1").Range("B" & j) End If Next Next 嗯...這樣應該可以省掉一些時間 ericks 2002-02-06, 12:00 AM 最初由 沙拉油 發表 看齊來很奇怪,底下這段再改一下好了 Sheets("a1").select For I = 13 To Z1 For j = 2 To Z2 If Sheets("b1").Range("D" & j) = Sheets("a1").Range("C" & I) Then Range("D" & I) = Sheets("b1").Range("F" & j) Range("E" & I) = Sheets("b1").Range("G" & j) Range("A" & I) = Sheets("b1").Range("B" & j) End If Next Next 嗯...這樣應該可以省掉一些時間 太感謝了,我跑了幾次,用了2千多筆資料去做, 比我之前的方式去做省了大概有1/3的時間。 |
|