Vấn đề xuất dữ liệu vào sheet tổng hợp

Liên hệ QC

spacemanforever

Thành viên hoạt động
Tham gia
8/10/08
Bài viết
113
Được thích
71
Chào mọi người!
Em hiện gặp khó khăn mong mọi người hỗ trợ.
Nội dung: em lặp 2 sheet: sheet form (chỉ để nhập liệu), Sheet Data (là sheet tổng hợp dữ liệu đã nhập).
--Khi thực add dữ liệu từ sheet form vào sheet data em muốn
1. viết code kiểm tra dữ liệu trùng nhưng không làm --Khìa.
2.Viết code kiểm tra nếu dữ liệu không đủ sẽ báo và xuất hiện 2 tủy chọn ***kiểm tra nhập lại.
***Tiếp tục nhập.
Mọi vấn đề em có nêu rõ trong sheet detail trong file đính kẻm
Cảm ơn mọi người.
 

File đính kèm

Chào Anh Thunghi!
Code của anh rất tuyệt. Chạy rất ok.
Có 1 số chổ sau trên code anh em còn thắc mắc mong anh giải thích hộ:

**Thứ nhất:
PHP:
Set SfData = DtData.Offset(, 1) 
Set HrData = DtData.Offset(, 2) 
Set ctData = DtData.Offset(, 3).Resize(, 4)

Trong ngoặc () thì thường em viết là (0,1) , (1,1).... nhưng ở đây anh viết (,1) thì code nên hiểu như thế nào?
**Thứ 2:
PHP:
endR = .Cells(65000, 1).End(xlUp).Row
phần .End(xlUp).Row em thấy mấy anh viết nhưng chưa hiểu (End(xlUp))?
***Thứ 3:
PHP:
For i = 1 To DtData.Rows.Count
Thường thì For i= 1 to 10, 20,..... vậy ở đây mình To DtData.Rows.Count thì nên hiểu như thế nào?
Mong anh giải thích hộ.
Cảm ơn anh nhiều.
Xin góp vui một cách làm
Mã:
Public Sub Loc()
    Dim Ws As Worksheet, Vung As Range, Cll As Range, VungR As Range, i As Integer, Sh As String, Wf
        Set Ws = Sheets("data"): Set Wf = Application.WorksheetFunction
        Set Vung = Ws.Range(Ws.[a4], Ws.[a50000].End(xlUp)): Set VungR = Range([a6], [a50000].End(xlUp))
        Range("c6:f28").ClearContents
            With Vung
                .Offset(0, 7).FormulaR1C1 = "=RC[-7]&RC[-6]&RC[-5]"
                    For Each Cll In VungR
                        Sh = [f3] & Cll & Cll.Offset(0, 1)
                        If Wf.CountIf(Vung.Offset(0, 7), Sh) > 0 Then
                            i = Wf.Match(Sh, Vung.Offset(0, 7), 0)
                            Cll.Offset(, 2).Resize(, 4).Value = Vung(i).Offset(, 3).Resize(, 4).Value
                        End If
                    Next
            End With
    Ws.Range("h:h").Delete
End Sub
Sẵn trớn, trả lời luôn
1- Offset(Hàng, Cột):
==> Nếu Hàng = 0 ta có thể viết Offset(0,Cột) hoặc Offset(,Cột) máy nó cũng hiểu
==> Nếu Cột = 0 ta có thể viết Offset (Hàng) : máy nó cũng hiểu
2- End(xlup): từ địa chỉ khai báo chạy ngược lên trên. Thí dụ: [A7000].End(Xlup) có nghĩa là Chọn Cell có chứa dữ liệu từ Cell A7000 chạy ngược lên
3- Thường thì For i= 1 to 10, 20,..... vậy ở đây mình To DtData.Rows.Count thì nên hiểu như thế nào?
Ở đây mình hiểu là biến I chạy từ 1 đến số lượng dòng của vùng DtData
 
Upvote 0
Bây giờ thì em đã hiểu.
Trên cả tuyệt vời.
Cảm ơn các anh đã hỗ trợ.
 
Upvote 0
Cách dùng offset khi chọn range bất kì

Chào các anh!
Em có thắc mắc về OFFSET.:
---nếu ta mặc định range (ví dụ: A1:F8) thì việc dùng offset đơn giản. (Dùng range("A1").offset(i,j)...)
---Nhưng trong trường hợp range bất kỳ (ví dụ A5:D7, hay E4:K8,....) thì việc dùng offset như thế nào.
Mục đích là em muốn dùng để tính tổng cho nhiều range.
Mong các anh góp ý.
}}}}}
 
Upvote 0
Chào các anh!
Em có thắc mắc về OFFSET.:
---nếu ta mặc định range (ví dụ: A1:F8) thì việc dùng offset đơn giản. (Dùng range("A1").offset(i,j)...)
---Nhưng trong trường hợp range bất kỳ (ví dụ A5:D7, hay E4:K8,....) thì việc dùng offset như thế nào.
Mục đích là em muốn dùng để tính tổng cho nhiều range.
Mong các anh góp ý.
}}}}}
Hiểu nôm na là thế này.
Hình dung A5:D7 là 1 hình chữ nhật có 3 dòng 4 cột bắt đầu từ A5.
Vậy offset(i,j) nghĩa là xuống i dòng và qua j cột.
Bạn thử code sau nhé
PHP:
Sub ThuOffset()
Dim myRng as range
Set myrng=Range("A5:D7")
myrng.select
With Selection.Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With
myrng.offset(1,1).select
With Selection.Interior
        .ColorIndex = 44
        .Pattern = xlSolid
    End With
end sub
 
Upvote 0
Chào các anh!
Em có thắc mắc về OFFSET.:
---nếu ta mặc định range (ví dụ: A1:F8) thì việc dùng offset đơn giản. (Dùng range("A1").offset(i,j)...)
---Nhưng trong trường hợp range bất kỳ (ví dụ A5:D7, hay E4:K8,....) thì việc dùng offset như thế nào.
Mục đích là em muốn dùng để tính tổng cho nhiều range.
Mong các anh góp ý.
}}}}}
Không biết đang nói đến hàm Offset trong công thức hay Offset của VBA đây ---> 2 cái khác nhau nha!
 
Upvote 0
Code vba offset cho mọi range

Không biết đang nói đến hàm Offset trong công thức hay Offset của VBA đây ---> 2 cái khác nhau nha!
Em muốn hỏi: nếu chọn range bất kì (không phải cố định 1range) thì phải code vba nào?
em có ý tưởng nếu chọn 1 range bất kỳ thì nó sẽ offset từ select cell trên cùng bên góc trái, nhưng ko biết code thế nào.
----> Hiểu nôm na là chỉ cần 1 đoạn code vba thì khi chọn bất kỳ range nào đều có thể dùng được.
---vấn đề này rất nan giải em tìm chưa ra mong các anh hỗ trợ----
cảm ơn các anh
 
Lần chỉnh sửa cuối:
Upvote 0
Em muốn hỏi: nếu chọn range bất kì (không phải cố định 1range) thì phải code vba nào?
em có ý tưởng nếu chọn 1 range bất kỳ thì nó sẽ offset từ select cell trên cùng bên góc trái, nhưng ko biết code thế nào.
----> Hiểu nôm na là chỉ cần 1 đoạn code vba thì khi chọn bất kỳ range nào đều có thể dùng được.
---vấn đề này rất nan giải em tìm chưa ra mong các anh hỗ trợ----
cảm ơn các anh
Cell trên cùng bên góc trái của Selection chính là Selection(1,1)
Thế thôi!
Ví dụ:
PHP:
Sub Test
  Dim Rng as Range
  Set Rng = Selection
  Rng(1,1).Offset(... gì gì đó tùy bạn...)
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom