Giúp đỡ về Compare Range với vòng For

Liên hệ QC

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
461
Được thích
20
Chào mọi người!

Mong mọi người giúp đỡ về 1 bài toán nho nhỏ của em ạ.

Em có 2 sheet dữ lieu ( sheet1, sheet2 ) trong file. Sheet2 sẽ được tham chiếu dữ lieu từ sheet1... file that bên ngoài của em dữ lieu rất nhiều ( cột và hang lên đến vài nghin ) nên khai báo thông thường dung vòng For thì code chạy rất nặng, nên rất mong mọi ng hỗ trợ giúp em dung Range.

2 sheet có item " mã hang " đc sử dung để làm tham chiếu. Sheet2 sẽ tham chiếu kết quả từ sheet1 dựa trên mã hang. Sheet1 nó sẽ chạy từ hang 11 đến hang 22, tìm xem chỗ nào có text là " Total CD ", " Total CU " thì sẽ đồng bộ sang sheet 2 cột D và F dựa trên " mã hang "

File gôc dữ lieu hang cột rất nhiều nên bắt buộc phải dung Range hay mảng để làm vòng lặp ạ... E lại k có nh kiến thức để làm cái này.

Rất mong nhận đc sự giúp đỡ. Em xin cảm ơn!
 

File đính kèm

Chào mọi người!

Mong mọi người giúp đỡ về 1 bài toán nho nhỏ của em ạ.

Em có 2 sheet dữ lieu ( sheet1, sheet2 ) trong file. Sheet2 sẽ được tham chiếu dữ lieu từ sheet1... file that bên ngoài của em dữ lieu rất nhiều ( cột và hang lên đến vài nghin ) nên khai báo thông thường dung vòng For thì code chạy rất nặng, nên rất mong mọi ng hỗ trợ giúp em dung Range.

2 sheet có item " mã hang " đc sử dung để làm tham chiếu. Sheet2 sẽ tham chiếu kết quả từ sheet1 dựa trên mã hang. Sheet1 nó sẽ chạy từ hang 11 đến hang 22, tìm xem chỗ nào có text là " Total CD ", " Total CU " thì sẽ đồng bộ sang sheet 2 cột D và F dựa trên " mã hang "

File gôc dữ lieu hang cột rất nhiều nên bắt buộc phải dung Range hay mảng để làm vòng lặp ạ... E lại k có nh kiến thức để làm cái này.

Rất mong nhận đc sự giúp đỡ. Em xin cảm ơn!
"Total CD" có 1 hay là nhiều. Nếu nhiều thì sẽ làm thế nao
"Total CU" cũng vậy
 
Upvote 0
Dạ, Total CD và Total CU chỉ có 1 thôi ạ... nó sẽ chạy từ trên xuống dưới xem chỗ nào là Total CD và chỗ nào là Total CU để tham chiếu giá trị từ Sheet1 sang Sheet2 dựa vào thông tin tham chiếu là " mã hang " ạ.
 
Upvote 0
Chào mọi người!

Mong mọi người giúp đỡ về 1 bài toán nho nhỏ của em ạ.

Em có 2 sheet dữ lieu ( sheet1, sheet2 ) trong file. Sheet2 sẽ được tham chiếu dữ lieu từ sheet1... file that bên ngoài của em dữ lieu rất nhiều ( cột và hang lên đến vài nghin ) nên khai báo thông thường dung vòng For thì code chạy rất nặng, nên rất mong mọi ng hỗ trợ giúp em dung Range.

2 sheet có item " mã hang " đc sử dung để làm tham chiếu. Sheet2 sẽ tham chiếu kết quả từ sheet1 dựa trên mã hang. Sheet1 nó sẽ chạy từ hang 11 đến hang 22, tìm xem chỗ nào có text là " Total CD ", " Total CU " thì sẽ đồng bộ sang sheet 2 cột D và F dựa trên " mã hang "

File gôc dữ lieu hang cột rất nhiều nên bắt buộc phải dung Range hay mảng để làm vòng lặp ạ... E lại k có nh kiến thức để làm cái này.

Rất mong nhận đc sự giúp đỡ. Em xin cảm ơn!
Bạn cần làm gì cứ nói rõ. Mô tả sao mà khó hiểu vậy? Kiểu này chắc vài chục bài trao đổi qua lại cũng chưa xong
 
Upvote 0
Bạn cần làm gì cứ nói rõ. Mô tả sao mà khó hiểu vậy? Kiểu này chắc vài chục bài trao đổi qua lại cũng chưa xong

Dạ em xin trính bày lại.

Sheet2 thì cột D, F sẽ đc tham chiếu từ dữ lieu Total CD, total CU từ sheet1 thông qua "mã hang " ạ.

Tức là sheet2 có mã hang nào going với mã hang bên sheet1 thì mình sẽ lấy dữ lieu total CU và Total CD từ Sheet1 đưa sang ạ.

Trong file e cũng đã điền ví dụ dữ lieu trong Sheet2 cột D, F khi đc tham chiếu từ Sheet1 sang đấy ạ.

Giờ e muốn tạo 1 button ở Sheet2, sau khi ấn thì cột D, F sẽ lấy dc dữ lieu từ Total CD, Total CU bên Sheet1 sang. File gốc của em data rất năng ( nhiều hàng nhiều cột ) nên nếu khai báo I, j integer rồi cho chạy trong vòng F thì hơi lâu ạ. Nên e muốn nhờ mọi ng dùng Range giúp để e học .

E xin cảm ơn!
 
Upvote 0
Dạ em xin trính bày lại.

Sheet2 thì cột D, F sẽ đc tham chiếu từ dữ lieu Total CD, total CU từ sheet1 thông qua "mã hang " ạ.

Tức là sheet2 có mã hang nào going với mã hang bên sheet1 thì mình sẽ lấy dữ lieu total CU và Total CD từ Sheet1 đưa sang ạ.

Trong file e cũng đã điền ví dụ dữ lieu trong Sheet2 cột D, F khi đc tham chiếu từ Sheet1 sang đấy ạ.

Giờ e muốn tạo 1 button ở Sheet2, sau khi ấn thì cột D, F sẽ lấy dc dữ lieu từ Total CD, Total CU bên Sheet1 sang. File gốc của em data rất năng ( nhiều hàng nhiều cột ) nên nếu khai báo I, j integer rồi cho chạy trong vòng F thì hơi lâu ạ. Nên e muốn nhờ mọi ng dùng Range giúp để e học .

E xin cảm ơn!
duyệt dữ liệu mà không dùng vòng lặp à khó nhỉ bạn dùng mảng duyệt vòng lặp cũng nhanh mà
 
Upvote 0
duyệt dữ liệu mà không dùng vòng lặp à khó nhỉ bạn dùng mảng duyệt vòng lặp cũng nhanh mà
Dạ k, vẫn dung vòng lặp For nhưng ý em ở đây là phải kết hợp dung them cả khai báo Range.

Nếu file có hang cột lên tới vài nghìn, thì khai báo chạy thông thường kiểu for I = 1 to 10000 , j = 1 to 5000 thì code sẽ chạy khá lâu, nên phải dung Range.

Rất mong dc giúp đỡ ạ!
 
Upvote 0
Dạ em xin trính bày lại.

Sheet2 thì cột D, F sẽ đc tham chiếu từ dữ lieu Total CD, total CU từ sheet1 thông qua "mã hang " ạ.

Tức là sheet2 có mã hang nào going với mã hang bên sheet1 thì mình sẽ lấy dữ lieu total CU và Total CD từ Sheet1 đưa sang ạ.

Trong file e cũng đã điền ví dụ dữ lieu trong Sheet2 cột D, F khi đc tham chiếu từ Sheet1 sang đấy ạ.

Giờ e muốn tạo 1 button ở Sheet2, sau khi ấn thì cột D, F sẽ lấy dc dữ lieu từ Total CD, Total CU bên Sheet1 sang. File gốc của em data rất năng ( nhiều hàng nhiều cột ) nên nếu khai báo I, j integer rồi cho chạy trong vòng F thì hơi lâu ạ. Nên e muốn nhờ mọi ng dùng Range giúp để e học .

E xin cảm ơn!
Nếu đúng thứ tự như ở Sheet1 thì hãy dùng lệnh copy-paste của range (Paste Special - Transpose)
Nếu không biết thì bạn hãy ghi Macro là rõ lệnh thế nào
 
Upvote 0
Nếu đúng thứ tự như ở Sheet1 thì hãy dùng lệnh copy-paste của range (Paste Special - Transpose)
Nếu không biết thì bạn hãy ghi Macro là rõ lệnh thế nào
Gửi bạn.

hiện mình đang dung code như bên dưới. Nhưng code này hơi chậm do có nh file dữ lieu còn nặng hơn nên hơi khó dung.

With Application
.Interactive = False
.EnableEvents = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Dim i, j As Integer
Dim a, b As Integer
For i = 110 To 200
For j = 10 To 200
For a = 1510 To 1530
If Workbooks("ACC.xlsx").Worksheets("Oct.18").Cells(j, 4) = Sheet7.Cells(6, i) Then
If Sheet7.Cells(a, 108) = "Total CD" Then
Workbooks("ACC.xlsx").Worksheets("Oct.18").Cells(j, 16) = Sheet7.Cells(a, i)
End If
If Sheet7.Cells(a, 108) = "Total CU" Then
Workbooks("ACC.xlsx").Worksheets("Oct.18").Cells(j, 10) = Sheet7.Cells(a, i)
End If
End If
Next a
Next j
Next i
MsgBox " Complete "
With Application
.Interactive = True
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
MsgBox " Complete "
End Sub

Nên mong mọi ng xem có thể dung vòng For cho Range để tang tốc độ code lên k thì giúp mình.
 
Upvote 0
Gửi bạn.

hiện mình đang dung code như bên dưới. Nhưng code này hơi chậm do có nh file dữ lieu còn nặng hơn nên hơi khó dung.

With Application
.Interactive = False
.EnableEvents = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Dim i, j As Integer
Dim a, b As Integer
For i = 110 To 200
For j = 10 To 200
For a = 1510 To 1530
If Workbooks("ACC.xlsx").Worksheets("Oct.18").Cells(j, 4) = Sheet7.Cells(6, i) Then
If Sheet7.Cells(a, 108) = "Total CD" Then
Workbooks("ACC.xlsx").Worksheets("Oct.18").Cells(j, 16) = Sheet7.Cells(a, i)
End If
If Sheet7.Cells(a, 108) = "Total CU" Then
Workbooks("ACC.xlsx").Worksheets("Oct.18").Cells(j, 10) = Sheet7.Cells(a, i)
End If
End If
Next a
Next j
Next i
MsgBox " Complete "
With Application
.Interactive = True
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
MsgBox " Complete "
End Sub

Nên mong mọi ng xem có thể dung vòng For cho Range để tang tốc độ code lên k thì giúp mình.
File nhiều là bao nhiêu, hãy đưa file chuẩn lên, còn file kiểu này thì làm khó nhau
 
Upvote 0
File nhiều là bao nhiêu, hãy đưa file chuẩn lên, còn file kiểu này thì làm khó nhau
Xin lõi bạn vì file chuẩn nó chia thành 2 file, 2 file đều có dữ lieu nội bộ k chia sẻ đc mong bạn thông cảm.

Nhưng mình đang muốn hỏi cách tham chiếu dung Range thay vi như cách của mình thì nó chậm với những file lên đến vài nghìn dòng và cột.

Bạn có cách nào tham chiếu khác cách của mình đang làm trên file ví dụ mình có gửi thì giúp đỡ mình nhé.

Mình xin cảm ơn!
 
Upvote 0
Dạ k, vẫn dung vòng lặp For nhưng ý em ở đây là phải kết hợp dung them cả khai báo Range.

Nếu file có hang cột lên tới vài nghìn, thì khai báo chạy thông thường kiểu for I = 1 to 10000 , j = 1 to 5000 thì code sẽ chạy khá lâu, nên phải dung Range.

Rất mong dc giúp đỡ ạ!
bạn dùng code này xem nhanh hơn không nhé
 

File đính kèm

Upvote 0
Xin lõi bạn vì file chuẩn nó chia thành 2 file, 2 file đều có dữ lieu nội bộ k chia sẻ đc mong bạn thông cảm.

Nhưng mình đang muốn hỏi cách tham chiếu dung Range thay vi như cách của mình thì nó chậm với những file lên đến vài nghìn dòng và cột.

Bạn có cách nào tham chiếu khác cách của mình đang làm trên file ví dụ mình có gửi thì giúp đỡ mình nhé.

Mình xin cảm ơn!
Cách tôi chỉ trên rồi đó, Range.copy paste special
Nếu số liệu không chia sẻ được, thì file gửi cũng phải tương tự số dữ liệu , số cột dòng, dữ liệu có thể tự chế ra con số khác,
Còn kiểu giả thế này thì giả quá
 
Upvote 0
bạn dùng code này xem nhanh hơn không nhé
Cảm ơn bạn nhé, mình đã xem qua nhưng hơi khó hiểu do kiến thưc về mảng còn hạn chế. Trong code hình như bạn tham chiếu hơi khác với ý của mình. Mình nói ví dụ cách này bạn xem code giúp mình với nhé:

1. Trong sheet1 khai báo Range ("A1:E4") = a và Range ("A11:A22") = b
2. Trong sheet2 khai báo Range ("A3:F6") = c
3. Cho biến chạy giữa 2 range "a", "c" để tìm cac mã hang going nhau.
4. với các mã hang giong nhau rồi, thì sẽ cho biến chạy hết range "b" ở sheet1 để lấy giá trị " total CD " input sang cột D và "total CU " input sang cột F của Sheet2

Mong bạn giúp đỡ thêm nhé.
Cảm ơn bạn rất nh!
 
Upvote 0
Cảm ơn bạn nhé, mình đã xem qua nhưng hơi khó hiểu do kiến thưc về mảng còn hạn chế. Trong code hình như bạn tham chiếu hơi khác với ý của mình. Mình nói ví dụ cách này bạn xem code giúp mình với nhé:

1. Trong sheet1 khai báo Range ("A1:E4") = a và Range ("A11:A22") = b
2. Trong sheet2 khai báo Range ("A3:F6") = c
3. Cho biến chạy giữa 2 range "a", "c" để tìm cac mã hang going nhau.
4. với các mã hang giong nhau rồi, thì sẽ cho biến chạy hết range "b" ở sheet1 để lấy giá trị " total CD " input sang cột D và "total CU " input sang cột F của Sheet2

Mong bạn giúp đỡ thêm nhé.
Cảm ơn bạn rất nh!
bạn đưa ra fiel đâu là dữ liệu cần xét và đâu là kết quả nhé ko hiểu gì hết
Bài đã được tự động gộp:

bạn đưa ra fiel đâu là dữ liệu cần xét và đâu là kết quả nhé ko hiểu gì hết
bạn xem đúng chưa
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dạ, Total CD và Total CU chỉ có 1 thôi ạ... nó sẽ chạy từ trên xuống dưới xem chỗ nào là Total CD và chỗ nào là Total CU để tham chiếu giá trị từ Sheet1 sang Sheet2 dựa vào thông tin tham chiếu là " mã hang " ạ.
Dùng thử code dưới đây xem ra sao
Mã:
Sub Filter_Transpose()
Dim SArr As Variant
Dim Res As Variant
Dim i As Long, j As Long
Dim RowCD, RowCU
SArr = Sheet1.UsedRange
ReDim Res(1 To UBound(SArr, 2), 1 To 3)
Res(1, 1) = "ma hang"
Res(1, 2) = "CD"
Res(1, 3) = "CU"
For i = 1 To UBound(SArr)
    If SArr(i, 1) = "Total CD" Then RowCD = i
    If SArr(i, 1) = "Total CU" Then RowCU = i
Next i
For j = 2 To UBound(SArr, 2)
    Res(j, 1) = SArr(1, j)
    Res(j, 2) = SArr(RowCD, j)
    Res(j, 3) = SArr(RowCU, j)
Next j
Sheet2.Range("a8").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
 
Upvote 0
bạn đưa ra fiel đâu là dữ liệu cần xét và đâu là kết quả nhé ko hiểu gì hết
Bài đã được tự động gộp:


bạn xem đúng chưa
Gửi bạn.

Bạn có thể giúp mình thực hiện tham chiếu nếu đúng là " Total CD " ở Sheet1 sẽ tham chiếu sang cột D ở Sheet2, và nếu đúng là " Total CU " thi sẽ tham chiếu sang cột F đc k?

Trong code bạn tham chiếu theo " Total " chung chung mình chưa hiểu lắm.

Cảm ơn và làm phiền bạn them nhé.!
Bài đã được tự động gộp:

Dùng thử code dưới đây xem ra sao
Mã:
Sub Filter_Transpose()
Dim SArr As Variant
Dim Res As Variant
Dim i As Long, j As Long
Dim RowCD, RowCU
SArr = Sheet1.UsedRange
ReDim Res(1 To UBound(SArr, 2), 1 To 3)
Res(1, 1) = "ma hang"
Res(1, 2) = "CD"
Res(1, 3) = "CU"
For i = 1 To UBound(SArr)
    If SArr(i, 1) = "Total CD" Then RowCD = i
    If SArr(i, 1) = "Total CU" Then RowCU = i
Next i
For j = 2 To UBound(SArr, 2)
    Res(j, 1) = SArr(1, j)
    Res(j, 2) = SArr(RowCD, j)
    Res(j, 3) = SArr(RowCU, j)
Next j
Sheet2.Range("a8").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
Cảm ơn bạn nhiều nhé.

Mình sẽ thử với file gốc của mình :)
 
Upvote 0
Dùng thử code dưới đây xem ra sao
Mã:
Sub Filter_Transpose()
Dim SArr As Variant
Dim Res As Variant
Dim i As Long, j As Long
Dim RowCD, RowCU
SArr = Sheet1.UsedRange
ReDim Res(1 To UBound(SArr, 2), 1 To 3)
Res(1, 1) = "ma hang"
Res(1, 2) = "CD"
Res(1, 3) = "CU"
For i = 1 To UBound(SArr)
    If SArr(i, 1) = "Total CD" Then RowCD = i
    If SArr(i, 1) = "Total CU" Then RowCU = i
Next i
For j = 2 To UBound(SArr, 2)
    Res(j, 1) = SArr(1, j)
    Res(j, 2) = SArr(RowCD, j)
    Res(j, 3) = SArr(RowCU, j)
Next j
Sheet2.Range("a8").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
Gửi bạn.

Mình đã chạy thử code bạn.

Code bạn nó tham chiếu rồi tạo lại các trường từ sheet1 sang sheet2. Ý mình khác 1 chút là các trường trong Sheet 2 là cố định rồi, nó chỉ tham chiếu từ Sheet1 sang các giá trị của Total CU và Total CD theo mã hang bạn ạ.

Bạn có thể sửa lại giúp mình đc k? Mình đang tham khảo 1 số cách các bạn làm để học them nên giúp mình nhé.

Cảm ơn bạn.
 
Upvote 0
Gửi bạn.

Mình đã chạy thử code bạn.

Code bạn nó tham chiếu rồi tạo lại các trường từ sheet1 sang sheet2. Ý mình khác 1 chút là các trường trong Sheet 2 là cố định rồi, nó chỉ tham chiếu từ Sheet1 sang các giá trị của Total CU và Total CD theo mã hang bạn ạ.

Bạn có thể sửa lại giúp mình đc k? Mình đang tham khảo 1 số cách các bạn làm để học them nên giúp mình nhé.

Cảm ơn bạn.
bạn không hiểu về mảng nên học kỹ lại đi cái kia chỉ là gán vào đâu mà thôi.đọc bài về mảng và gán giá trị.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom