Tham khảo. . . . .cần sao chép các dòng dữ liệu ở sheet1 (mà dữ liệu ở cột A khác trống) và dán sang sheet2
Thêm cách khác tham khảo:Em cảm ơn tất cả mọi người đã quan tâm và trợ giúp ạ.
Sub ABC()
Dim Rng As Range
Set Rng = Sheets("sheet1").Range("A1:B" & Sheets("sheet1").Range("B" & Rows.Count).End(3).Row)
Sheets("sheet2").Range("A:B").ClearContents
Rng.AutoFilter 1, "<>"
Rng.SpecialCells(12).Copy Sheets("Sheet2").Range("A1")
Sheets("sheet1").AutoFilterMode = False
End Sub
Nếu A trống mà B không trống thì code chạy sai á ! Thớt muốn chỉ A không trống mới chép chứ B không đi theo A như ví dụ thì sao?Thêm cách khác tham khảo:
Mã:Sub ABC() Dim Rng As Range Set Rng = Sheets("sheet1").Range("A1:B" & Sheets("sheet1").Range("B" & Rows.Count).End(3).Row) Sheets("sheet2").Range("A:B").ClearContents Rng.AutoFilter 2, "<>" Rng.SpecialCells(12).Copy Sheets("Sheet2").Range("A1") Sheets("sheet1").AutoFilterMode = False End Sub
Em nhầm xíu. Đã sửa lại #3Nếu A trống mà B không trống thì code chạy sai á ! Thớt muốn chỉ A không trống mới chép chứ B không đi theo A như ví dụ thì sao?
Cảm ơn tiền bối đã góp ý. Nhưng em xin phép trao đổi thêm về ý tưởng (mong bác có góp ý để hiện thực hóa ý tưởng).Tham khảo. . . . .
Cảm ơn tiền bối đã góp ý. Mong muốn của em là điều kiện theo cột A thôi bác ạ.Nếu A trống mà B không trống thì code chạy sai á ! Thớt muốn chỉ A không trống mới chép chứ B không đi theo A như ví dụ thì sao?
Thử code ngăn ngắn sau xem sao:Chào cả nhà, em có file demo dữ liệu đính kèm, rất mong được góp ý ạ,
Em đang cần sao chép các dòng dữ liệu ở sheet1 (mà dữ liệu ở cột A khác trống) và dán sang sheet2 .
Em cảm ơn tất cả mọi người đã quan tâm và trợ giúp ạ.
Sub CopyCellsNotBlank()
Dim Rng As Range
Set Rng = Sheets("sheet1").Range("A1:A" & Sheets("sheet1").Range("B" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants)
Sheets("sheet2").Range("A1:B50000").ClearContents
Rng.EntireRow.Copy Sheets("Sheet2").Range("A1")
End Sub
Giải pháp của bác code khá ngắn gọn ạ, nhưng cho cho em xin thêm chút ý kiến làm sao để copy các cột dữ liệu tùy chọn mà không phải copy hết cả dòng không ạ. Ví dụ em cần copy cột A, C,D,F nếu các dòng ở A khác rỗng đấy ạ.Thử code ngăn ngắn sau xem sao:
Rich (BB code):Sub CopyCellsNotBlank() Dim Rng As Range Set Rng = Sheets("sheet1").Range("A1:A" & Sheets("sheet1").Range("B" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants) Sheets("sheet2").Range("A1:B50000").ClearContents Rng.EntireRow.Copy Sheets("Sheet2").Range("A1") End Sub
Option Explicit
Sub test()
Dim lr&
Worksheets("Sheet2").Range("A:F").ClearContents
With Worksheets("Sheet1")
.AutoFilterMode = False
lr = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A1:A" & lr).AutoFilter 1, "<>"
.Range("A1:F" & lr).SpecialCells(xlVisible).Copy Worksheets("Sheet2").Range("A1")
.AutoFilterMode = False
Application.CutCopyMode = False
End With
Union(Worksheets("Sheet2").Range("B1").EntireColumn, Worksheets("Sheet2").Range("E1").EntireColumn).Delete
End Sub
Cảm ơn bác rất nhiều ạ.Thử:
PHP:Option Explicit Sub test() Dim lr& Worksheets("Sheet2").Range("A:F").ClearContents With Worksheets("Sheet1") .AutoFilterMode = False lr = .Cells(Rows.Count, "A").End(xlUp).Row .Range("A1:A" & lr).AutoFilter 1, "<>" .Range("A1:F" & lr).SpecialCells(xlVisible).Copy Worksheets("Sheet2").Range("A1") .AutoFilterMode = False Application.CutCopyMode = False End With Union(Worksheets("Sheet2").Range("B1").EntireColumn, Worksheets("Sheet2").Range("E1").EntireColumn).Delete End Sub
Thế thì nó sẽ không còn ngắn gọn nữa.Giải pháp của bác code khá ngắn gọn ạ, nhưng cho cho em xin thêm chút ý kiến làm sao để copy các cột dữ liệu tùy chọn mà không phải copy hết cả dòng không ạ. Ví dụ em cần copy cột A, C,D,F nếu các dòng ở A khác rỗng đấy ạ.
Cảm ơn các bác rất nhiều.
Option Explicit
Sub Test()
Dim lr&, i&, j&, k&, kv, arr, arrb(1 To 65000, 1 To 6)
With Worksheets("Sheet2")
arr = Worksheets("Sheet1").Range("A1:G" & Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row).Value
For i = 1 To UBound(arr)
If arr(i, 1) <> "" Then kv = arr(i, 1)
If arr(i, 2) <> "" Then
k = k + 1
arrb(k, 1) = kv
For j = 2 To 5
arrb(k, j) = arr(i, j)
Next
arrb(k, 6) = arr(i, 7)
End If
Next
.Range("A1:G100000").ClearContents
.Range("A1").Resize(k, 6).Value = arrb
End With
End Sub
Vì đây không phải là bài toán cố định mà em tự đặt ra yêu cầu để học tập và trong quá trình đặt ra câu hỏi thì phát sinh thêm ý tưởng ạ, mong bác thông cảm cho em ạ.Vụ này từ bài đầu đến #10 đã bổ sung và đổi ý đến 3 lần rồi. Sao không chốt 1 lần cho xong đi nhỉ.
Cảm ơn bác đã chia sẻ ạ, em xin phản hồi bác như sau: em có biết về Advanced Filter, nhưng đây là vấn đề em tự đặt ra để tìm thêm các hướng giải quyết vấn đề nhằm mục đích học tập ạ, mong bác thông cảm.Cái này rõ ràng là chức năng của Advanced Filter mà.
Đổ công sức viết code để tiết kiệm vài cái click chuột? Hay là xin code VBA dễ quá rồi người ta lười học các công cụ căn bản của Excel?
Cảm ơn tiền bối rất nhiều ạ.PHP:Option Explicit Sub Test() Dim lr&, i&, j&, k&, kv, arr, arrb(1 To 65000, 1 To 6) With Worksheets("Sheet2") arr = Worksheets("Sheet1").Range("A1:G" & Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp).Row).Value For i = 1 To UBound(arr) If arr(i, 1) <> "" Then kv = arr(i, 1) If arr(i, 2) <> "" Then k = k + 1 arrb(k, 1) = kv For j = 2 To 5 arrb(k, j) = arr(i, j) Next arrb(k, 6) = arr(i, 7) End If Next .Range("A1:G100000").ClearContents .Range("A1").Resize(k, 6).Value = arrb End With End Sub
Cảm ơn tiền bối ạThêm cách khác tham khảo:
Mã:Sub ABC() Dim Rng As Range Set Rng = Sheets("sheet1").Range("A1:B" & Sheets("sheet1").Range("B" & Rows.Count).End(3).Row) Sheets("sheet2").Range("A:B").ClearContents Rng.AutoFilter 1, "<>" Rng.SpecialCells(12).Copy Sheets("Sheet2").Range("A1") Sheets("sheet1").AutoFilterMode = False End Sub
Không hểu lắm. Tiền giấy, tiền vàng, tiền thật, tiền giả, tiền xu, thậm chí tiền thối (nặng mùi?Cảm ơn tiền bối rất nhiều ạ.
Bài đã được tự động gộp:
Cảm ơn tiền bối ạ
Em không biết xưng hô sao cho phù hợp, bác bỏ qua nhé.Không hểu lắm. Tiền giấy, tiền vàng, tiền thật, tiền giả, tiền xu, thậm chí tiền thối (nặng mùi?) đều đã nghe rồi. Không biết tiền bối là tiền gì vậy bạn?
Không biết xưng hô sao phù hợp, vậy sao bạn dùng từ "bác" với tôi? Cũng y hệt bạn có thể dùng từ "bác" với họ mà.Em không biết xưng hô sao cho phù hợp, bác bỏ qua nhé.
Vâng, em đã điều chỉnh rồi đó bác.Không biết xưng hô sao phù hợp, vậy sao bạn dùng từ "bác" với tôi? Cũng y hệt bạn có thể dùng từ "bác" với họ mà.
Có thể người khác dễ dãi chứ tôi có nguyên tắc của mình, khó thông cảm chuyện này lắm....
Cảm ơn bác đã chia sẻ ạ, em xin phản hồi bác như sau: em có biết về Advanced Filter, nhưng đây là vấn đề em tự đặt ra để tìm thêm các hướng giải quyết vấn đề nhằm mục đích học tập ạ, mong bác thông cảm.
Em cũng lờ mờ đoán ra vì thấy cứ lòi dần từng bài, để học thì tốt thôi nhưng theo kiểu này + với việc tuôn ra một rổ "tiền bối" nên sau bài #12 là em lót dép rồi.Có thể người khác dễ dãi chứ tôi có nguyên tắc của mình, khó thông cảm chuyện này lắm.
Nếu bạn chỉ "nhằm mục đích học tập" thì nêu rõ ý định từ đầu trong bài #1.
Vả lại, người muốn học tập thì tự tìm lấy một vài phương pháp thủ công rồi record macro để , chỗ nào khó hiểu hoặc cần ưu hóa thì đưa lên đây hỏi. Bạn đưa ra mệnh đề "Em đang cần" ở đây là kém phần chân thật. Ý bạn chỉ muốn đọc code của người khác mà mập mờ không chịu tiết lộ.
Thì do dân GPE khoái làm tiền bói mờ (chú ý, không có dấu mũ)Em cũng lờ mờ đoán ra vì thấy cứ lòi dần từng bài, để học thì tốt thôi nhưng theo kiểu này + với việc tuôn ra một rổ "tiền bối" nên sau bài #12 là em lót dép rồi.
Vâng, em sẽ lưu ý để trong tương lai đăng bài thể hiện nội dung phù hợp hơn với cộng đồng để chia sẻ kiến thức hiệu quả hơn. Vậy em xin sửa lại #1 nhé bác.Có thể người khác dễ dãi chứ tôi có nguyên tắc của mình, khó thông cảm chuyện này lắm.
Nếu bạn chỉ "nhằm mục đích học tập" thì nêu rõ ý định từ đầu trong bài #1.
Vả lại, người muốn học tập thì tự tìm lấy một vài phương pháp thủ công rồi record macro để , chỗ nào khó hiểu hoặc cần ưu hóa thì đưa lên đây hỏi. Bạn đưa ra mệnh đề "Em đang cần" ở đây là kém phần chân thật. Ý bạn chỉ muốn đọc code của người khác mà mập mờ không chịu tiết lộ.
Chung quy thì tôi vạch rõ Advanced Filter là cách làm chính thống với mục đích chia sẻ với các bạn khác trong diễn đàn : chớ đi vào con đường cho rằng VBA sẽ giải quyết mọi công việc.
Mong bác chia sẻ thêm cho em tài liệu học về VBA để em có phương hướng tìm tòi, tránh những vụ "lòi dần từng bài" tạo nên sự không thoải mái trên cộng đồng ạ. Em cũng sẽ rút kinh nghiệm để trong tương lai đặt câu hỏi phù hợp hơn ạ.Em cũng lờ mờ đoán ra vì thấy cứ lòi dần từng bài, để học thì tốt thôi nhưng theo kiểu này + với việc tuôn ra một rổ "tiền bối" nên sau bài #12 là em lót dép rồi.