Nối chuỗi dữ liệu theo điều kiện

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

ngocthach90

Thành viên mới
Tham gia
12/1/16
Bài viết
23
Được thích
1
Có đoạn code nào để cứ mỗi 20 ô dữ liệu sẽ được nối lại với nhau bằng dấu phẩy không?
Các anh chị chỉ giúp em ạ. Em cảm ơn!
 

File đính kèm

  • noichuoicodieukien.xlsx
    10.1 KB · Đọc: 24
Có đoạn code nào để cứ mỗi 20 ô dữ liệu sẽ được nối lại với nhau bằng dấu phẩy không?
Các anh chị chỉ giúp em ạ. Em cảm ơn!
Thử code này coi đúng ý không?
Mã:
Sub ABC()
    Dim i&, iR&, Res(), k&
    With Sheets("Sheet1")
        iR = .Range("A" & Rows.Count).End(3).Row
        ReDim Res(1 To Int((iR - 1) / 20) + 1, 1 To 1)
        For i = 2 To iR Step 20
            k = k + 1
            Res(k, 1) = WorksheetFunction.TextJoin(",", True, .Cells(i, 1).Resize(20))
        Next
        .Range("G4").Resize(k, 1).Value = Res
    End With
End Sub
 
Upvote 0
Có đoạn code nào để cứ mỗi 20 ô dữ liệu sẽ được nối lại với nhau bằng dấu phẩy không?
Các anh chị chỉ giúp em ạ. Em cảm ơn!
của bạn đây, dùng office 365, 2019 trở lên nhé.

=TEXTJOIN(",",TRUE,TRANSPOSE(OFFSET(A2,IF(ROWS($F$17:$F17)>1,(ROWS($F$17:$F17)-1)*19,ROWS($F$17:$F17)-1),0,20,1)))
 

File đính kèm

  • noichuoicodieukien.xlsx
    27.8 KB · Đọc: 8
Upvote 0
Có đoạn code nào để cứ mỗi 20 ô dữ liệu sẽ được nối lại với nhau bằng dấu phẩy không?
Các anh chị chỉ giúp em ạ. Em cảm ơn!
Bạn dùng 365 thì thế này nhé TEXTJOIN(",",1,OFFSET($A$1,1+(20*ROW(A1)-20),0,20,1))
Có đoạn code nào để cứ mỗi 20 ô dữ liệu sẽ được nối lại với nhau bằng dấu phẩy không?
Các anh chị chỉ giúp em ạ. Em cảm ơn!
 
Upvote 0
Thử code này coi đúng ý không?
Mã:
Sub ABC()
    Dim i&, iR&, Res(), k&
    With Sheets("Sheet1")
        iR = .Range("A" & Rows.Count).End(3).Row
        ReDim Res(1 To Int((iR - 1) / 20) + 1, 1 To 1)
        For i = 2 To iR Step 20
            k = k + 1
            Res(k, 1) = WorksheetFunction.TextJoin(",", True, .Cells(i, 1).Resize(20))
        Next
        .Range("G4").Resize(k, 1).Value = Res
    End With
End Sub
Mình chưa xem file nhưng sao đã code lại còn dùng textjoin thế bạn? Nó lại phải phụ thuộc vào office rồi
VBA có hàm join mà
 
Upvote 0

File đính kèm

  • noichuoicodieukien.xlsx
    40.6 KB · Đọc: 3
Upvote 0
Upvote 0
Thực ra cái ý đồ của mình lúc đầu không sai, mà quên không cố định ô A6
với cách này khi hết list nó cứ hiện dấu , rất nhiều
Đúng rồi, cái này bác mà mình giúp dư sức xử.
Mà thôi mình sửa lại luôn:
Mã:
=SUBSTITUTE(TRIM(CONCAT(" "&OFFSET($A$6,(ROWS($A$6:A6)-1)*20,,20)))," ",",")
 
Lần chỉnh sửa cuối:
Upvote 0
Sau khi ngủ dậy, mò cả buổi sáng mới ra được. Cũng nhờ tham khảo bài của anh em bên trên.
Hỏi: em dùng hàm gì.
Trả lời: concat. :wallbash: :wallbash: :wallbash:
Mã:
G4=CONCAT(OFFSET($A$1;20*(ROW()-3);0;-20;1)&", ")
G4=TEXTJOIN(", ";TRUE;OFFSET($A$1;20*(ROW()-3);0;-20;1))
 
Upvote 0
Thử code này coi đúng ý không?
Mã:
Sub ABC()
    Dim i&, iR&, Res(), k&
    With Sheets("Sheet1")
        iR = .Range("A" & Rows.Count).End(3).Row
        ReDim Res(1 To Int((iR - 1) / 20) + 1, 1 To 1)
        For i = 2 To iR Step 20
            k = k + 1
            Res(k, 1) = WorksheetFunction.TextJoin(",", True, .Cells(i, 1).Resize(20))
        Next
        .Range("G4").Resize(k, 1).Value = Res
    End With
End Sub
Code chạy tốt từ 2016 trở lên mà em đang dùng Excel 2010 nên code này ko xài được. Có cách nào khác không ạ?
 
Upvote 0
Code chạy tốt từ 2016 trở lên mà em đang dùng Excel 2010 nên code này ko xài được. Có cách nào khác không ạ?
Thu thêm cách này coi sao
Mã:
Sub ABC()
    Dim i&, iR&, Res(), k&, sArr(), Tmp, ii&
    With Sheets("Sheet1")
        iR = .Range("A" & Rows.Count).End(3).Row
        sArr = .Range("A2:A" & iR).Value
        ReDim Res(1 To Int(UBound(sArr) / 20) + 1, 1 To 1)
        For i = 1 To UBound(sArr) Step 20
            k = k + 1
            For ii = i To i + 19
                If ii < UBound(sArr) Then
                    If Len(Tmp) Then Tmp = Tmp & "," & sArr(ii, 1) Else Tmp = sArr(ii, 1)
                End If
            Next
            Res(k, 1) = Tmp: Tmp = Empty
        Next
        .Range("G4").Resize(k, 1).Value = Res
    End With
End Sub
 
Upvote 0
Thu thêm cách này coi sao
Mã:
Sub ABC()
    Dim i&, iR&, Res(), k&, sArr(), Tmp, ii&
    With Sheets("Sheet1")
        iR = .Range("A" & Rows.Count).End(3).Row
        sArr = .Range("A2:A" & iR).Value
        ReDim Res(1 To Int(UBound(sArr) / 20) + 1, 1 To 1)
        For i = 1 To UBound(sArr) Step 20
            k = k + 1
            For ii = i To i + 19
                If ii < UBound(sArr) Then
                    If Len(Tmp) Then Tmp = Tmp & "," & sArr(ii, 1) Else Tmp = sArr(ii, 1)
                End If
            Next
            Res(k, 1) = Tmp: Tmp = Empty
        Next
        .Range("G4").Resize(k, 1).Value = Res
    End With
End Sub
Em test thử thì <100 thì được nhưng trên 100 hoặc 1 dãy mã số khách hàng khác thì có dòng bị lỗi
 

File đính kèm

  • Untitled.png
    Untitled.png
    306.2 KB · Đọc: 9
Upvote 0
Web KT

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

Back
Top Bottom