Xin code copy có điều kiện sang sheet mới (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tuonglaigan

Thành viên mới
Tham gia
21/5/11
Bài viết
7
Được thích
0
Nhờ cả nhà giúp đỡ!
Mình có sheet 1 gồm 335 ngân hàng và 4 cột

Mình muốn copy sang sheet nhưng ngân hàng thứ 1 xuất hiện 5 lần, rồi đến ngân hàng 2...rồi đến ngân hàng thứ 335.

Sheet 1 có 335 dòng + dòng tiêu đề. Sheet 2 sẽ có 335*5=1675 dòng + 1 dòng tiêu đề.

Cảm ơn cả nhà nhiều. Mình xin gửi kèm file để cả nà tiện giúp đỡ!
 

File đính kèm

Tại mình cần copy thành 6 dòng chứ không phải 5 dòng ah? Hic...
Trường hợp 6 dòng:
Mã:
Sub CpBankk()
Application.ScreenUpdating = False
Dim tmp(), BK(), r As Long, k As Integer, ir As Long
tmp = Sheet1.Range("A1:D" & Sheet1.Range("A65000").End(xlUp).Row).Value
ReDim BK(1 To 6 * (UBound(tmp, 1) - 1) + 1, 1 To UBound(tmp, 2))
For r = 1 To UBound(tmp, 1)
    If r = 1 Then
        For k = 1 To UBound(BK, 2)
            BK(r, k) = tmp(r, k)
        Next k
    Else
        For k = 1 To UBound(BK, 2)
            For ir = 2 + 6 * (r - 2) To 2 + 6 * (r - 2) + 5
                BK(ir, k) = tmp(r, k)
            Next ir
        Next k
    End If
Next r
Sheet2.Range("A1").Resize(65000, UBound(BK, 2)).ClearContents
Sheet2.Range("A1").Resize(UBound(BK, 1), UBound(BK, 2)).Value = BK
Sheet2.Select
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Trường hợp 6 dòng:
Mã:
Sub CpBankk()
Application.ScreenUpdating = False
Dim tmp(), BK(), r As Long, k As Integer, ir As Long
tmp = Sheet1.Range("A1:D" & Sheet1.Range("A65000").End(xlUp).Row).Value
ReDim BK(1 To 6 * (UBound(tmp, 1) - 1) + 1, 1 To UBound(tmp, 2))
For r = 1 To UBound(tmp, 1)
    If r = 1 Then
        For k = 1 To UBound(BK, 2)
            BK(r, k) = tmp(r, k)
        Next k
    Else
        For k = 1 To UBound(BK, 2)
            For ir = 2 + 6 * (r - 2) To 2 + 6 * (r - 2) + 5
                BK(ir, k) = tmp(r, k)
            Next ir
        Next k
    End If
Next r
Sheet2.Range("A1").Resize(65000, UBound(BK, 2)).ClearContents
Sheet2.Range("A1").Resize(UBound(BK, 1), UBound(BK, 2)).Value = BK
Sheet2.Select
Application.ScreenUpdating = True
End Sub

Với chuyện thay đổi ý muốn như thế này thì nên tạo 1 biến, ví dụ SoDong as Long
Muốn gán cho nó bằng mấy thì người không đọc được code cũng có thể chỉnh sửa dễ hơn.
SoDong= ???? hoặc SoDong=Range("??").Value
Chỉ là 1 ý kiến thôi nhé.
 
Upvote 0
Trường hợp 6 dòng:
Mã:
Sub CpBankk()
Application.ScreenUpdating = False
Dim tmp(), BK(), r As Long, k As Integer, ir As Long
tmp = Sheet1.Range("A1:D" & Sheet1.Range("A65000").End(xlUp).Row).Value
ReDim BK(1 To 6 * (UBound(tmp, 1) - 1) + 1, 1 To UBound(tmp, 2))
For r = 1 To UBound(tmp, 1)
    If r = 1 Then
        For k = 1 To UBound(BK, 2)
            BK(r, k) = tmp(r, k)
        Next k
    Else
        For k = 1 To UBound(BK, 2)
            For ir = 2 + 6 * (r - 2) To 2 + 6 * (r - 2) + 5
                BK(ir, k) = tmp(r, k)
            Next ir
        Next k
    End If
Next r
Sheet2.Range("A1").Resize(65000, UBound(BK, 2)).ClearContents
Sheet2.Range("A1").Resize(UBound(BK, 1), UBound(BK, 2)).Value = BK
Sheet2.Select
Application.ScreenUpdating = True
End Sub

Gởi anh Befaint !
Trước hết em rất cảm ơn a trong thời gian qua đã giúp đở em nhiều trong những thắc mắc của em.
Hôm nay, em lại có khó khăn này rất mong được anh giúp đở cho em với.
đó là em có số liệu trong 2 file excel khác nhau ( 1.file nguồn và 1 file tổng hợp ). Bây giờ em rất muốn copy dữ liệu từ file nguồn sang file tổng hợp dựa vào điều kiện so sánh đồng thời giá trị ở ô B3 & C3. Nếu trùng ở bên file tổng hợp thì copy vào. Thông thương em làm em tao thêm 1 cột nữa ( vi dụ là cột D3 = B3&"X"&C3 ) như vậy để tránh trùng. Sau đó em dùng Vlookup để lấy dữ liệu qua file tổng hợp ở những cột em tô màu vàng nhưng tại em có hàng trăm file như vậy thì mất khá nhiều thời gian để lập hàm và copy. em gởi kèm file:
http://www.mediafire.com/file/m0ytghr7bf9ndo1/Help2.rar

Nên em gởi lên đây rất mong anh xem giúp cho em với anh nhé!
Một lần nữa em rất mong anh giúp code VBA giúp cho em với.
Em rất cảm ơn anh !
Chúc anh luôn vui khỏe mỗi ngày!
Trân trọng,
 
Upvote 0
Gởi anh Befaint !
Trước hết em rất cảm ơn a trong thời gian qua đã giúp đở em nhiều trong những thắc mắc của em.
Hôm nay, em lại có khó khăn này rất mong được anh giúp đở cho em với.
đó là em có số liệu trong 2 file excel khác nhau ( 1.file nguồn và 1 file tổng hợp ). Bây giờ em rất muốn copy dữ liệu từ file nguồn sang file tổng hợp dựa vào điều kiện so sánh đồng thời giá trị ở ô B3 & C3. Nếu trùng ở bên file tổng hợp thì copy vào. Thông thương em làm em tao thêm 1 cột nữa ( vi dụ là cột D3 = B3&"X"&C3 ) như vậy để tránh trùng. Sau đó em dùng Vlookup để lấy dữ liệu qua file tổng hợp ở những cột em tô màu vàng nhưng tại em có hàng trăm file như vậy thì mất khá nhiều thời gian để lập hàm và copy. em gởi kèm file:
http://www.mediafire.com/file/m0ytghr7bf9ndo1/Help2.rar

Nên em gởi lên đây rất mong anh xem giúp cho em với anh nhé!
Một lần nữa em rất mong anh giúp code VBA giúp cho em với.
Em rất cảm ơn anh !
Chúc anh luôn vui khỏe mỗi ngày!
Trân trọng,

Theo mình, bạn nên tạo topic mới và gửi yêu cầu lên.
 
Upvote 0
Với chuyện thay đổi ý muốn như thế này thì nên tạo 1 biến, ví dụ SoDong as Long
Muốn gán cho nó bằng mấy thì người không đọc được code cũng có thể chỉnh sửa dễ hơn.
SoDong= ???? hoặc SoDong=Range("??").Value
Chỉ là 1 ý kiến thôi nhé.

Những giá trị mặc định thì dùng Const, rõ và nhanh hơn. Đây chính là nhiệm vụ của từ khoá Const.
Nếu đặt ở đầu code, nhìn vào thì người ta đã nhận rõ những thông số hằng sử dụng cho module/sub/function liền.
Const MAXROWS = 65000
Const SoDong = 6

Chỉ dùng biến cho các giá trị không phải là hằng số.
Ví dụ:
SoDong=Range("??").Value
Trường hợp này, SoDong là một giá trị được định trên sheet, tương đương với tham số; không phải là một hằng số.
 
Upvote 0
Những giá trị mặc định thì dùng Const, rõ và nhanh hơn. Đây chính là nhiệm vụ của từ khoá Const.
Nếu đặt ở đầu code, nhìn vào thì người ta đã nhận rõ những thông số hằng sử dụng cho module/sub/function liền.
Const MAXROWS = 65000
Const SoDong = 6

Chỉ dùng biến cho các giá trị không phải là hằng số.
Ví dụ:
SoDong=Range("??").Value
Trường hợp này, SoDong là một giá trị được định trên sheet, tương đương với tham số; không phải là một hằng số.

Xin cảm ơn VetMini, vì không có nút Cảm ơn.
 
Upvote 0
@befaint: bạn có thói quen viết code gọi môt hàm tính với cùng một tham số nhiều lần.
Nếu hàm của bạn độc lập (*) thì với cùng 1 tham số, nó luôn luôn ra cùng kết quả. Vì vậy, nên dùng 1 biến để trữ kết quả dùng nhiều lần (trừ phi có lý do cần phải thu gọn)
Dùng biến để trữ kết quả có 2 cái lợi là chạy hiệu quả hơn và code dễ sửa hơn.
 
Upvote 0
@befaint: bạn có thói quen viết code gọi môt hàm tính với cùng một tham số nhiều lần.
Nếu hàm của bạn độc lập (*) thì với cùng 1 tham số, nó luôn luôn ra cùng kết quả. Vì vậy, nên dùng 1 biến để trữ kết quả dùng nhiều lần (trừ phi có lý do cần phải thu gọn)
Dùng biến để trữ kết quả có 2 cái lợi là chạy hiệu quả hơn và code dễ sửa hơn.

Em cảm ơn anh.
Thói quen sửa dần ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom