Tạo danh sách nhập liệu bằng VBA

Liên hệ QC

thao nguyen01

Thành viên thường trực
Tham gia
8/12/19
Bài viết
214
Được thích
25
Kính gửi anh/chị trên diễn đàn,
Em muốn khi em nhập ở sheet nhập, thì sẽ copy dữ liệu từ A4:H10 bên sheet nhập và dán nối tiếp vào sheet kết quả ạ. Em có viết code nhưng em viết bằng các ô trong VBA và em không tạo được merge đối với các cột A, B, C, D, E, F. Em có để kết quả ở sheet data. Anh/chị xem giúp em ạ. Em cảm ơn ạ.
Mã:
Sub nhaplieu()
Dim i As Long
Dim Dcuoi As Long
Dim Dcuoi02 As Long

Dcuoi = Sheet2.Range("G1000").End(xlUp).Row + 1


Sheet2.Cells(Dcuoi, 1) = Sheet1.Cells(4, 1)
Sheet2.Cells(Dcuoi, 2) = Sheet1.Cells(4, 2)
Sheet2.Cells(Dcuoi, 3) = Sheet1.Cells(4, 3)
Sheet2.Cells(Dcuoi, 4) = Sheet1.Cells(4, 4)
Sheet2.Cells(Dcuoi, 5) = Sheet1.Cells(4, 5)
Sheet2.Cells(Dcuoi, 6) = Sheet1.Cells(4, 6)
''''''''''
Sheet2.Cells(Dcuoi, 7) = Sheet1.Cells(4, 7)
Sheet2.Cells(Dcuoi + 1, 7) = Sheet1.Cells(5, 7)
Sheet2.Cells(Dcuoi + 2, 7) = Sheet1.Cells(6, 7)
Sheet2.Cells(Dcuoi + 3, 7) = Sheet1.Cells(7, 7)
Sheet2.Cells(Dcuoi + 4, 7) = Sheet1.Cells(8, 7)
Sheet2.Cells(Dcuoi + 5, 7) = Sheet1.Cells(9, 7)
Sheet2.Cells(Dcuoi + 6, 7) = Sheet1.Cells(10, 7)
Sheet2.Cells(Dcuoi + 7, 7) = Sheet1.Cells(11, 7)
''''
Sheet2.Cells(Dcuoi, 8) = Sheet1.Cells(4, 8)
Sheet2.Cells(Dcuoi + 1, 8) = Sheet1.Cells(5, 8)
Sheet2.Cells(Dcuoi + 2, 8) = Sheet1.Cells(6, 8)
Sheet2.Cells(Dcuoi + 3, 8) = Sheet1.Cells(7, 8)
Sheet2.Cells(Dcuoi + 4, 8) = Sheet1.Cells(8, 8)
Sheet2.Cells(Dcuoi + 5, 8) = Sheet1.Cells(9, 8)
Sheet2.Cells(Dcuoi + 6, 8) = Sheet1.Cells(10, 8)
Sheet2.Cells(Dcuoi + 7, 8) = Sheet1.Cells(11, 8)
Dcuoi02 = Sheet2.Range("G1000").End(xlUp).Row


Sheet2.Range("A2:A1000").NumberFormat = "DD/MM/YYYY"
Sheet2.Range("A2:H" & Dcuoi02).Borders.LineStyle = 1
Sheet2.Range("F2:F1000").NumberFormat = "#,###"
Sheet2.Range("H2:H1000").NumberFormat = "#,###"

End Sub
 

File đính kèm

  • Book1-03.02.2021.xlsb
    21.8 KB · Đọc: 14
Theo như mình hiểu thì đây là bạn nhập Phiếu xuất, trong phiếu xuất có nhiều loại mặt hàng khác nhau (Giống 1 tờ Hóa đơn vậy). Bạn không nên sử dụng chức năng gộp dòng, như vậy truy xuất dữ liệu rất khó (VD: Bạn gộp từ D4:D10 là PC01 thì chỉ có D4 có giá trị là PC01 thôi).
Tham khảo thế này thử xem:
View attachment 253903
Dạ, em cảm ơn anh
Bài đã được tự động gộp:

Thông thường người ta sẽ làm cái form nhập như thế này:
View attachment 253904
Dạ, em cảm ơn anh
Bài đã được tự động gộp:

Nếu là mình, thì sẽ tạo 2 bảng:

NGÀYTRẢ CT CHIMã QHNHÂN VIÊNSỐ CTNỘI DUNGTỔNG TIỀNTTMã QHCHI TIẾTSỐ TIỀN
12/22/2020​
JBV001Nguyễn Văn APC01Mặt hàng AB
43,700,000​
1JBV001Vật tư A
2,000,000​
12/22/2020​
JBV002Nguyễn Văn AnhPC02Mặt hàng BA
43,800,000​
2JBV001Vật tư B
500,000​
3JBV001Vật tư C
200,000​
4JBV001Vật tư D
1,000,000​
5JBV001Vật tư A
16,000,000​
6JBV001Vật tư E
12,000,000​
7JBV001Vật tư F
12,000,000​
8JBV002Vật tư A
2,000,000​
9JBV002Vật tư B
500,000​
10JBV002Vật tư C
300,000​
11JBV002Vật tư D
1,000,000​
12JBV002Vật tư A
16,000,000​
13JBV002Vật tư E
12,000,000​
14JBV002Vật tư F
12,000,000​

Ở đây: Kí tự đâu tiên của mã quan hệ để chỉ năm (J là năm 2020, năm nay sẽ là 'K')
B để chỉ tháng 12, & V để chỉ ngày 22
3 kí tự cuối trong mã dùng để tính số TT tăng dần trong 1 ngày.
[Mã QH này hoàn toàn có thể tự động tạo ra bỡi 1 cách nào đó . . . . ]

Chúc mọi người vui nhân dịp xuân về!
Dạ, con cảm ơn Bác
 
Upvote 0
Kính gửi anh/chị trên diễn đàn,
Em muốn khi em nhập ở sheet nhập, thì sẽ copy dữ liệu từ A4:H10 bên sheet nhập và dán nối tiếp vào sheet kết quả ạ. Em có viết code nhưng em viết bằng các ô trong VBA và em không tạo được merge đối với các cột A, B, C, D, E, F. Em có để kết quả ở sheet data. Anh/chị xem giúp em ạ. Em cảm ơn ạ.
Góp ý cho bạn:
1/ Nên làm phiếu chi kiểu như File đính kèm để còn in phiếu chi. Có 2 mục Trả chứng từ chi và Nội dung bạn không có dữ liệu nên tôi không biết bố trí nó chỗ nào cho phù hợp.
2/ Chi tiết vật tư nên có 1 sheet danh mục thì việc nhập liệu sẽ nhanh và thống nhất được dữ liệu.
 

File đính kèm

  • Theo doi chi.xlsb
    40.4 KB · Đọc: 14
Upvote 0
Góp ý cho bạn:
1/ Nên làm phiếu chi kiểu như File đính kèm để còn in phiếu chi. Có 2 mục Trả chứng từ chi và Nội dung bạn không có dữ liệu nên tôi không biết bố trí nó chỗ nào cho phù hợp.
2/ Chi tiết vật tư nên có 1 sheet danh mục thì việc nhập liệu sẽ nhanh và thống nhất được dữ liệu.
Dạ, con sẽ điều chỉnh lại. Con cảm ơn Bác ạ.
 
Upvote 0
OT thử làm theo form anh @huuthang_bd gợi ý ở Bài 19.
Bạn thử xem:
Mã:
Option Explicit

Sub NhapLieu()

    Dim rDauNhap As Range, rDuoiNhap As Range
    Dim SoPhieu As String, Rng As Range, DongCuoi As Long
    Dim Book As Workbook, shForm As Worksheet, shKQ As Worksheet
    
    Set Book = ThisWorkbook
    Set shForm = Book.Worksheets("Form")
    Set shKQ = Book.Worksheets("KQ")
    
    With shForm
        Set rDauNhap = .Range("B1:B6")
        Set rDuoiNhap = .Range("A9:B15")
        SoPhieu = .Range("B4")
    End With
    
    With shKQ
        DongCuoi = .Cells(.Rows.Count, "G").End(xlUp).Row + 1
        If DongCuoi < 2 Then DongCuoi = 2
        Set Rng = .Range("D2:D" & DongCuoi).Find(SoPhieu)
        If Rng Is Nothing Then
            GoTo Nhap_Lieu
        Else
            DongCuoi = Rng.Row
            Dim Msg, Style, Response
            Msg = "So phieu: " & SoPhieu & " da ton tai trong nhat ky," & vbNewLine & _
                  "Ban co muon thay doi ?"
            Style = vbYesNo + vbInformation + vbOKOnly
            Response = MsgBox(Msg, Style)
            If Response = vbYes Then GoTo Nhap_Lieu Else GoTo End_
        End If
Nhap_Lieu:
        rDauNhap.Copy:  .Range("A" & DongCuoi).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        rDuoiNhap.Copy: .Range("G" & DongCuoi).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
    End With

End_:

End Sub
 

File đính kèm

  • NhapLieu.xlsm
    25.4 KB · Đọc: 20
Lần chỉnh sửa cuối:
Upvote 0
OT thử làm theo form anh @huuthang_bd gợi ý ở Bài 19.
Bạn thử xem:
Mã:
Option Explicit

Sub NhapLieu()

    Dim rDauNhap As Range, rDuoiNhap As Range
    Dim SoPhieu As String, Rng As Range, DongCuoi As Long
    Dim Book As Workbook, shForm As Worksheet, shKQ As Worksheet
   
    Set Book = ThisWorkbook
    Set shForm = Book.Worksheets("Form")
    Set shKQ = Book.Worksheets("KQ")
   
    With shForm
        Set rDauNhap = .Range("B1:B6")
        Set rDuoiNhap = .Range("A9:B15")
        SoPhieu = .Range("B4")
    End With
   
    With shKQ
        DongCuoi = .Cells(.Rows.Count, "G").End(xlUp).Row + 1
        If DongCuoi < 2 Then DongCuoi = 2
        Set Rng = .Range("D2:D" & DongCuoi).Find(SoPhieu)
        If Rng Is Nothing Then
            GoTo Nhap_Lieu
        Else
            DongCuoi = Rng.Row
            Dim Msg, Style, Response
            Msg = "So phieu: " & SoPhieu & " da ton tai trong nhat ky," & vbNewLine & _
                  "Ban co muon thay doi ?"
            Style = vbYesNo + vbInformation + vbOKOnly
            Response = MsgBox(Msg, Style)
            If Response = vbYes Then GoTo Nhap_Lieu Else GoTo End_
        End If
Nhap_Lieu:
        rDauNhap.Copy:  .Range("A" & DongCuoi).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        rDuoiNhap.Copy: .Range("G" & DongCuoi).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        Application.CutCopyMode = False
    End With

End_:

End Sub
Mình cảm ơn bạn nha.
 
Upvote 0
Web KT
Back
Top Bottom