Lấy dữ liệu mảng bằng VBA

Liên hệ QC

quangtoan89

Thành viên mới
Tham gia
14/8/21
Bài viết
18
Được thích
1
Nhờ mọi người giúp với ạ. Em có 1 file dữ liệu Sheet 1 là một mảng code sản phẩm, Sheet 2 là hiển thị nội dung tên sản phẩm số lượng sản phẩm, sheet 3 là data sản phẩm. Sheet 3 em đã ẩn đi vì em dùng hàm vlook để lấy dữ liệu ra rồi ạ. Nhưng file in tomy chỉ in được 48 mã sản phẩm. Em muốn copy mã 48 sản phẩm nằm trong vùng mảng, lấy dữ liệu theo cột, từ trên xuống sang cột mã sản phẩm để tự động hiển thị theo mã sản phẩm. Rồi in lần lượt 48 sản phẩm. Nhờ các bác giúp em với.
 

File đính kèm

  • chechtondienlanh.xls
    55 KB · Đọc: 13
  • 1.png
    1.png
    393.4 KB · Đọc: 25
  • 2.png
    2.png
    269.9 KB · Đọc: 23
Giải pháp
Bạn nói thế thì, mình cũng xin nói lại luôn. Mình là người ít học nên mới nói chuyện như vậy, không biết với phải lên nhờ các bạn chỉ dạy. Còn nếu mình biết rồi thì đã chẳng phải nhọc lòng như vậy. Còn code của bạn, bạn xem lại bài mình, mình cám ơn tất cả các bài tương tác với bài của mình. Bạn xem lại tất cả các bài giảng xem, mọi người đều hướng dẫn theo code của bạn làm, nên mình không biết với phải nhờ mọi người hỗ trợ. Còn để ai nói đánh giá thói quen về người khác thì chưa chắc đã đúng đâu bạn. Mình không được học chuyên sâu thấy khó nhờ các bạn chỉ dạy mà các bạn thấy làm khó ghê.
Bài đã được tự động gộp:

Thật xin lỗi các bác!!! Em cũng mới tìm hiểu về VBA, thấy ý tưởng nào giúp được cho công việc của mình thì em đăng lên để nhờ mọi...
Hãy mô tả rõ ràng 1 chút. Cố gắng đọc hiểu rồi mà cũng xin thua rồi.
 
Upvote 0
Nhưng file in tomy chỉ in được 48 mã sản phẩm. Em muốn copy mã 48 sản phẩm nằm trong vùng mảng, lấy dữ liệu theo cột, từ trên xuống sang cột mã sản phẩm để tự động hiển thị theo mã sản phẩm. Rồi in lần lượt 48 sản phẩm. Nhờ các bác giúp em với.
file in tomy là file nào vậy bạn @
 
Upvote 0
Dạ, ý tưởng của em là lấy 48 mã sản phẩm bên vùng mảng từ trên xuống dưới, copy sang sheet 1, rồi in file. Lần lượt lấy 48 mã sản phẩm, lấy hết cột A thì lấy sang cột B, cho đến hết vùng dữ liệu ah? Em sử dụng tem tomy tròn 48, nên mỗi lần sẽ in đc 48 mã sản phẩm ạ. Các bác giúp e chút ạ.
 

File đính kèm

  • 92610117-600x450.jpg
    92610117-600x450.jpg
    138.3 KB · Đọc: 34
  • chechtondienlanhV2.xls
    454 KB · Đọc: 15
  • Untitled.png
    Untitled.png
    290 KB · Đọc: 34
Upvote 0
file in tomy là file nào vậy bạn @
sheet 1 là file mk cần in chỉ có 48 mã sản phẩm. sheet 2 là file mk sắp xếp sản phẩm theo từng nhóm hàng, mỗi nhóm 1 cột. khi mk copy 48 mã sản phẩm từ sheet 2 sang sheet 1, thì dữ liệu của mk sẽ tự động nhảy theo mã sản phẩm đc copy sang.
 

File đính kèm

  • 1.png
    1.png
    393.4 KB · Đọc: 8
  • 92610117-600x450.jpg
    92610117-600x450.jpg
    138.3 KB · Đọc: 8
  • chechtondienlanhV2.xls
    92.5 KB · Đọc: 13
Upvote 0
sheet 1 là file mk cần in chỉ có 48 mã sản phẩm. sheet 2 là file mk sắp xếp sản phẩm theo từng nhóm hàng, mỗi nhóm 1 cột. khi mk copy 48 mã sản phẩm từ sheet 2 sang sheet 1, thì dữ liệu của mk sẽ tự động nhảy theo mã sản phẩm đc copy sang.
Nếu còn muốn người khác giúp thì anh có thể đừng viết tắt trong bài viết.
Có thể thì hãy mô tả bằng hình ảnh rõ ràng 1 chút từng bước thao tác và kết quả mong muốn. Bởi đã đọc những gì anh viết rồi,mà vẫn không hiểu á
 
Upvote 0
1665990634450.png
Nếu còn muốn người khác giúp thì anh có thể đừng viết tắt trong bài viết.
Có thể thì hãy mô tả bằng hình ảnh rõ ràng 1 chút từng bước thao tác và kết quả mong muốn. Bởi đã đọc những gì anh viết rồi,mà vẫn không hiểu á
Có cái file nào đó tên là mk?

Bạn kiên nhẫn thật. Hầu hết những người có tật viết tắt đều lười biếng và chủ quan.
Lười: người viết tắt thường không nhận ra là mình lười hơn người trả lời. Có câu hỏi viết cho rõ ràng cũng không muốn cố gắng.
Chủ quan: người viết tắt thường chủ quan, nghĩ rằng mình viết như vậy ai cũng hiểu.
 
Upvote 0
Dạ thật sự xin lỗi mọi người. Chữ mk là mình viết tắt chữ mình thôi ạ. Ý của mình là chỉ cần copy 48 mã sản phẩm từ mảng dữ liệu ở sheet 2 sang sheet 1 lần lượt từ trên xuống dưới, đến hết mảng dữ liệu là được thôi ạ. Mình xin cám ơn.
 
Upvote 0
Dạ thật sự xin lỗi mọi người. Chữ mk là mình viết tắt chữ mình thôi ạ. Ý của mình là chỉ cần copy 48 mã sản phẩm từ mảng dữ liệu ở sheet 2 sang sheet 1 lần lượt từ trên xuống dưới, đến hết mảng dữ liệu là được thôi ạ. Mình xin cám ơn.
Ý tưởng như này mình đã từng làm, nhưng thực hiện cần phải biết máy in cụ thể là dòng nào và cả cổng kết nối! Thiếu nhiều dữ kiện quá không làm được
Application.ActivePrinter = "RICOH Aficio MP 4001 PCL 6 ON NE00:"
 
Upvote 0
Mình in ra file tomy bạn ah? Mà phần in mình đã Set Print Area rồi mà bạn. Chỉ cần lệnh .PrintOut là được rồi mà bạn ơi. Bạn có thể cho mình xin đoạn code bạn viết để mình tham khảo được không ạ? Mình xin cám ơn.
 
Upvote 0
Mình in ra file tomy bạn ah? Mà phần in mình đã Set Print Area rồi mà bạn. Chỉ cần lệnh .PrintOut là được rồi mà bạn ơi. Bạn có thể cho mình xin đoạn code bạn viết để mình tham khảo được không ạ? Mình xin cám ơn.
Tham khảo nhé.
Mã:
Private Sub GDTTP()
Dim MAXb, MAXc, MAXd, MAXe, MAXf, U As Integer
    Dim SARR(), RES()
    Dim WSPR, WSDT As Worksheet
    Dim DA
     Application.Calculation = xlCalculationAutomatic
    Set WSDT = ThisWorkbook.Sheets("Sheet1")
    Set WSPR = ThisWorkbook.Sheets("Temngay2013")
    MAXb = WSDT.Range("B" & Rows.Count).End(xlUp).Row
    MAXc = WSDT.Range("C" & Rows.Count).End(xlUp).Row
    MAXd = WSDT.Range("D" & Rows.Count).End(xlUp).Row
    MAXe = WSDT.Range("E" & Rows.Count).End(xlUp).Row
    MAXf = WSDT.Range("F" & Rows.Count).End(xlUp).Row
   ' O DAY MINH CHI LAM MAU O COT B
   '===========================================
    SARR = WSDT.Range("B2:B" & MAXb).Value
    ReDim RES(1 To 48)
    For U = 1 To UBound(SARR)
        If DA < 48 Then
            DA = DA + 1
            RES(DA) = SARR(U, 1)
        Else
            WSPR.Range("V5").Resize(DA).Value = RES
            WSPR.Range("V5").Resize(DA).Borders.LineStyle = 1
            DA = 0
            U = U - 1
            Erase RES
            ReDim RES(1 To 48)
            'THEM CODE DE IN NHU BAN MUON
        End If
         Next U
   '===========================================================
End Sub
 
Upvote 0
Cám ơn duyhuynh9922 nhiều nhé. Mình có chạy thử code rồi, nhưng nó chỉ nhận có 1 giá trị đầu tiên. Mình lại chưa hiểu rõ code của bạn. Nhờ duyhuynh9922 xem lại thêm cho mình chút nữa với. Mình xin cám ơn.
 
Upvote 0
Cám ơn duyhuynh9922 nhiều nhé. Mình có chạy thử code rồi, nhưng nó chỉ nhận có 1 giá trị đầu tiên. Mình lại chưa hiểu rõ code của bạn. Nhờ duyhuynh9922 xem lại thêm cho mình chút nữa với. Mình xin cám ơn.
Chữa cháy!
Mã:
[CODE]Private Sub PRINTA()

    Dim MAXb, MAXc, MAXd, MAXe, MAXf, U As Integer

    Dim SARR(), RES()

    Dim WSPR, WSDT As Worksheet

    Dim DA, G, T

     Application.Calculation = xlCalculationAutomatic

    Set WSDT = ThisWorkbook.Sheets("Sheet1")

    Set WSPR = ThisWorkbook.Sheets("Temngay2013")

    MAXb = WSDT.Range("B" & Rows.Count).End(xlUp).Row

    MAXc = WSDT.Range("C" & Rows.Count).End(xlUp).Row

    MAXd = WSDT.Range("D" & Rows.Count).End(xlUp).Row

    MAXe = WSDT.Range("E" & Rows.Count).End(xlUp).Row

    MAXf = WSDT.Range("F" & Rows.Count).End(xlUp).Row

   ' O DAY MINH CHI LAM MAU O COT B

   '========================================================

    SARR = WSDT.Range("B2:B" & MAXb).Value

    ReDim RES(1 To 48)

    For U = LBound(SARR) To UBound(SARR)

        If DA < 48 Then

            DA = DA + 1

            RES(DA) = SARR(U, 1)

        Else

           WSPR.Range("V5:V52").ClearContents

            For T = 5 To 52

                G = G + 1

             WSPR.Range("V" & T).Value = RES(G)

            Next T

        G = 0

        DA = 0

        U = U - 1

        Erase RES

        ReDim RES(1 To 48)

            'THEM CODE DE IN NHU BAN MUON

            

            

        End If

         Next U

            WSPR.Range("V5:V52").ClearContents

             For T = 5 To 52

                G = G + 1

            WSPR.Range("V" & T).Value = RES(G)

             Next T

            G = 0

            'THEM CODE DE IN NHU BAN MUON

   '===========================================================

End Sub
[/CODE]
 
Lần chỉnh sửa cuối:
Upvote 0
Rảnh nên làm đại. Hên thì trúng xui trượt
Mã:
Sub ABC()
    Dim iR&, i&, j&, Ws As Worksheet
    Set Ws = Sheets("Tem ngay 2013")
    With Sheets("Sheet1")
        For j = 2 To 6
            iR = .Cells(Rows.Count, j).End(3).Row
            If iR > 1 Then
                For i = 2 To iR Step 48
                    Ws.Range("V5:V1000").ClearContents
                    .Cells(i, j).Resize(48).Copy Ws.Range("V5")
                    Ws.PrintOut
                Next
            End If
        Next
    End With
End Sub
 
Upvote 0
Cám ơn các bác. Của bác BuiQuangThuan thì có lấy 48 mã chạy hết cột B sang các cột khác. Nhưng nếu dòng cuối không đủ 48 mã thì lại trống rất nhiều ạ. Bác duyhuynh9922 ơi, mã lần này lại không chạy được chút nào luôn ấy ạ. Bác xem lại giúp e chút với. Em cám ơn các bác ạ.
 

File đính kèm

  • chechtondienlanhV2.xlsm
    40.4 KB · Đọc: 6
Upvote 0
Cám ơn các bác. Của bác BuiQuangThuan thì có lấy 48 mã chạy hết cột B sang các cột khác. Nhưng nếu dòng cuối không đủ 48 mã thì lại trống rất nhiều ạ. Bác duyhuynh9922 ơi, mã lần này lại không chạy được chút nào luôn ấy ạ. Bác xem lại giúp e chút với. Em cám ơn các bác ạ.
vậy là bạn muốn điền đủ 48 mã 1 lần. Lần cuối cùng thiếu mới thôi hả
Nói ngay lúc đầu là hên xui rồi. Việc giải thích cho người khác hiểu rõ có phải có kết quả rồi không?
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, ý tưởng của em là lấy 48 mã sản phẩm bên vùng mảng từ trên xuống dưới, copy sang sheet 1, rồi in file. Lần lượt lấy 48 mã sản phẩm, lấy hết cột A thì lấy sang cột B, cho đến hết vùng dữ liệu ah? Em sử dụng tem tomy tròn 48, nên mỗi lần sẽ in đc 48 mã sản phẩm ạ. Các bác giúp e chút ạ.
Góp vui, trúng trật-hên sui.
 

File đính kèm

  • chechtondienlanhV2.xlsm
    34.9 KB · Đọc: 15
Upvote 0
Cám ơn các bác. Của bác BuiQuangThuan thì có lấy 48 mã chạy hết cột B sang các cột khác. Nhưng nếu dòng cuối không đủ 48 mã thì lại trống rất nhiều ạ. Bác duyhuynh9922 ơi, mã lần này lại không chạy được chút nào luôn ấy ạ. Bác xem lại giúp e chút với. Em cám ơn các bác ạ.
Đâu phải code không chạy. Cái bạn nhìn thấy là kết quả của lần copy sau đấy chứ. Dữ liệu ở cột B có 78 mã lần đầu nó đã copy sang 48 mã, còn 30 mã là cái cuối đó thôi! mã đoạn trên tôi chỉ làm cho bạn ở cột B thôi còn ở các cột khác bạn tự làm theo tương tự là được, thêm câu lệnh để nó in ra nữa là đc!1666243533462.png
 
Upvote 0
Dạ vâng Bác, để em kiểm tra lại ạ. Cám ơn HUONGHCKT nhưng code của bạn là chạy theo hàng ngang rồi, code này mk viết rồi, còn của mk là chạy theo cột mà. Cám ơn các bác.
 
Upvote 0
Web KT

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

Back
Top Bottom