Tham chiếu ( bắt đầu từ hàng rỗng đầu tiên )

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
Em chào mọi người.

Em có file đính kèm. Em muốn tham chiếu cột "SL" từ Sheet2 sang Sheet1 dựa vào cột "mã số".

Vì các mã số nó xuất hiện nhiều lần, nên em muốn tham chiếu đến hàng rỗng đầu tiên của cột E ở sheet1, bỏ qua các hàng đã có dữ liệu ạ.

Trong file em có làm code những nó chạy chưa đúng.

Mọi người vui long check giúp em với ạ.

Em xin cảm ơn!
 

File đính kèm

Em chào mọi người.

Em có file đính kèm. Em muốn tham chiếu cột "SL" từ Sheet2 sang Sheet1 dựa vào cột "mã số".

Vì các mã số nó xuất hiện nhiều lần, nên em muốn tham chiếu đến hàng rỗng đầu tiên của cột E ở sheet1, bỏ qua các hàng đã có dữ liệu ạ.

Trong file em có làm code những nó chạy chưa đúng.

Mọi người vui long check giúp em với ạ.

Em xin cảm ơn!
Bạn thay dòng:
PHP:
Sheet1.Range("E1" & a).Resize(UBound(arr1, 1), 1).Value = arr2
bằng:
PHP:
Sheet1.Range("E1").Resize(UBound(arr1, 1), 1).Value = arr2
 
Upvote 0
Bạn thay dòng:
PHP:
Sheet1.Range("E1" & a).Resize(UBound(arr1, 1), 1).Value = arr2
bằng:
PHP:
Sheet1.Range("E1").Resize(UBound(arr1, 1), 1).Value = arr2
Cảm ơn Bro. Mình quên mất k xóa cái đó. Nhưng xóa xong bản chat vẫn không đúng như mình mong muốn.

Nó lại tham chiếu tất cả giá trị cột E sheet1 kể cả các hàng đã có dữ lieu.... mình muốn hàng nào ở cột E sheet1 có dữ lieu rồi thì nó bỏ qua không tham chiếu.

Mình cảm ơn!
 

File đính kèm

Upvote 0
Giải thích kiểu đó thì những người chậm hiểu như tôi bó tay.
Để code làm gì khi nó không làm đúng ý? Vì ai đó có đọc thì cũng bó tay không hiểu code đúng sẽ phải làm gì.
Tốt nhất là đính kèm tập tin và nhập kết quả mong đợi vào cột E. Tốt hơn là lấy 1 vd. kết quả mong đợi và giải thích tại sao nó phải thế, nó được tính toán dựa trên qui luật nào.
 
Upvote 0
Giải thích kiểu đó thì những người chậm hiểu như tôi bó tay.
Để code làm gì khi nó không làm đúng ý? Vì ai đó có đọc thì cũng bó tay không hiểu code đúng sẽ phải làm gì.
Tốt nhất là đính kèm tập tin và nhập kết quả mong đợi vào cột E. Tốt hơn là lấy 1 vd. kết quả mong đợi và giải thích tại sao nó phải thế, nó được tính toán dựa trên qui luật nào.
Hi Bro.

Em gửi lại file như đính kèm ạ.... kết quả em mong đợi nó dc bôi màu vàng trong sheet1 ạ.

Cảm ơn anh!
 

File đính kèm

Upvote 0
Rất mong được mọi người hỗ trợ!
Em xin cảm ơn !
 
Upvote 0
Mã:
Sub Button1_Click()
Dim arr, arr1
Dim i, a As Long, j As Long, ma As String
Dim lastRow As Long, lastRowE As Long
    With Sheet1
        lastRowE = .Range("E" & Rows.Count).End(xlUp).Row
        lastRow = .Range("A" & Rows.Count).End(xlUp).Row
        If lastRow <= lastRowE Then Exit Sub
        arr1 = .Range("A" & lastRowE + 1).Resize(lastRow - lastRowE, 5).Value
    End With
    With Sheet2
        lastRow = .Range("D" & Rows.Count).End(xlUp).Row
        If lastRow < 2 Then Exit Sub
        arr = .Range("D2:H" & lastRow).Value
    End With

    For i = 1 To UBound(arr1, 1)
        ma = UCase(arr1(i, 1))
        For j = 1 To UBound(arr, 1)
            If ma = UCase(arr(j, 1)) Then
                arr1(i, 5) = arr(j, 5)
                Exit For
            End If
        Next j
    Next i

    Sheet1.Range("A" & lastRowE + 1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1

    MsgBox "Completed"
End Sub
Có thể dùng Dictionary thay cho vòng lặp For j = ...
 
Upvote 0
Mã:
Sub Button1_Click()
Dim arr, arr1
Dim i, a As Long, j As Long, ma As String
Dim lastRow As Long, lastRowE As Long
    With Sheet1
        lastRowE = .Range("E" & Rows.Count).End(xlUp).Row
        lastRow = .Range("A" & Rows.Count).End(xlUp).Row
        If lastRow <= lastRowE Then Exit Sub
        arr1 = .Range("A" & lastRowE + 1).Resize(lastRow - lastRowE, 5).Value
    End With
    With Sheet2
        lastRow = .Range("D" & Rows.Count).End(xlUp).Row
        If lastRow < 2 Then Exit Sub
        arr = .Range("D2:H" & lastRow).Value
    End With

    For i = 1 To UBound(arr1, 1)
        ma = UCase(arr1(i, 1))
        For j = 1 To UBound(arr, 1)
            If ma = UCase(arr(j, 1)) Then
                arr1(i, 5) = arr(j, 5)
                Exit For
            End If
        Next j
    Next i

    Sheet1.Range("A" & lastRowE + 1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1

    MsgBox "Completed"
End Sub
Có thể dùng Dictionary thay cho vòng lặp For j = ...
Gửi anh.

Xin lỗi anh vì giờ em mới trả lời được ạ.

Cảm ơn anh nhiều nhé.

Em muốn hỏi anh thêm 1 đoạn code ạ. Trong file đính kèm em muốn copy dữ lieu từ sheet2 sang sheet1...vì sheet1 số dòng không cố định nên nó sẽ tìm và copy vào dòng trống đầu tiên của mỗi trường dữ lieu. Em có bôi vàng trong file ạ. Sheet2 các cột sắp xếp lung tung k theo định dạng như sheet1.

Em có dung code copy như dưới nhưng khá là chậm và có vẻ không được tốt.

Anh vui long kiểm tra và cho em 1 cách khác để thực hiên việc này với nhé.

Em xin cảm ơn ạ!

Dim a As Long, b As Long

'' Ma So
Sheet2.Range("D2", Range("D" & Rows.Count).End(xlUp)).Copy
Sheet1.Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues

a = Sheet1.Range("A1").End(xlDown).Row

'Ten
Sheet2.Range("F2", Range("F" & Rows.Count).End(xlUp).Offset(0)).Copy
Sheet1.Range("B" & a).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues

'Date
Sheet2.Range("E5", Range("E" & Rows.Count).End(xlUp).Offset(0)).Copy
Sheet1.Range("C" & a).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues

'DVT
Sheet2.Range("G5", Range("G" & Rows.Count).End(xlUp).Offset(0)).Copy
Sheet1.Range("D" & a).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues

'SL
Sheet2.Range("H5", Range("H" & Rows.Count).End(xlUp).Offset(0)).Copy
Sheet1.Range("E" & a).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
 

File đính kèm

Upvote 0
Tôi sửa thế này.
Mã:
Sub Button1_Click()
Dim lastRow As Long, start As Long
    lastRow = Sheet2.Range("D" & Rows.Count).End(xlUp).Row
    If lastRow < 2 Then Exit Sub
    start = Sheet1.Range("A" & Rows.Count).End(xlUp).Row + 1
'    Ma So
    Sheet2.Range("D2:D" & lastRow).Copy Sheet1.Range("A" & start)
'    Ten
    Sheet2.Range("F2:F" & lastRow).Copy Sheet1.Range("B" & start)
'    Date
    Sheet2.Range("E2:E" & lastRow).Copy Sheet1.Range("C" & start)
'    DVT , SL
    Sheet2.Range("G2:H" & lastRow).Copy Sheet1.Range("D" & start)
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom