Công thức tách dòng theo nội dung và giá trị

  • Thread starter Thread starter 4545
  • Ngày gửi Ngày gửi
Liên hệ QC

4545

Thành viên mới
Tham gia
22/9/22
Bài viết
9
Được thích
0
Em chào mọi người ạ, e muốn tách dữ liệu theo dòng, có nội dung và giá trị tương ứng thì sử dụng công thức như thế nào ạ. em không rành VBA nên mong mọi người hướng dẫn công thức ạ. Em có đính kèm file ở dưới. Cảm ơn mọi người!
 

File đính kèm

Mình xem đi xem lại bài này rồi, rất bối rối nên ngồi hóng cao nhân , mãi không có ai nên mình xin chia sẻ ý kiến.
Mình không tìm thấy logic trong bài của bạn, phải làm tay ra được thì mới làm tự động được, ví dụ như 2 cột này thì ok nè, vì có thể hiểu là mỗi đoạn cách nhau bằng dấu phẩy thì tương ứng với nhau, nếu như ô chỉ có 1 giá trị thì sẽ dùng ô này cho tất cả các đoạn ở cột khác.

1665022257196.png


Nhưng tới đoạn này thì bạn bảo mình làm tay mình cũng không làm ra được, câu hỏi là làm sao biết được đoạn 68960000166 cột H sẽ tương ứng với 1275000 và 244000000. Vậy để tách được thì ít nhất ô H3 nên là "68960000166;68960000166;1234556" và cột I3 nên là "02/01/2020,02/01/2020,13/12/2019"


1665022294587.png
 
Mình xem đi xem lại bài này rồi, rất bối rối nên ngồi hóng cao nhân , mãi không có ai nên mình xin chia sẻ ý kiến.
Mình không tìm thấy logic trong bài của bạn, phải làm tay ra được thì mới làm tự động được, ví dụ như 2 cột này thì ok nè, vì có thể hiểu là mỗi đoạn cách nhau bằng dấu phẩy thì tương ứng với nhau, nếu như ô chỉ có 1 giá trị thì sẽ dùng ô này cho tất cả các đoạn ở cột khác.

View attachment 281756


Nhưng tới đoạn này thì bạn bảo mình làm tay mình cũng không làm ra được, câu hỏi là làm sao biết được đoạn 68960000166 cột H sẽ tương ứng với 1275000 và 244000000. Vậy để tách được thì ít nhất ô H3 nên là "68960000166;68960000166;1234556" và cột I3 nên là "02/01/2020,02/01/2020,13/12/2019"


View attachment 281757
Dạ, lệ phí trước bạ và tiền sử dụng đất là cùng 1 chứng từ, nên cột H và I sẽ giống nhau (cùng số chứng từ và ngày tháng), còn nộp tiền đặt trước là 1 chứng từ riêng ạ, nên có H và I riêng
 
Làm đại nhé. Trật tính tiếp.
Vì 2 nội dung liên quan để chung 1 chứng từ, nên mình auto 2 nội dung đầu tiên là chung 1 chứng từ nhé.
Nếu khác đi thì bạn post dữ liệu thật lên xem.
Mã:
Sub SplitAll()
Dim lr&, i&, j&, k&, t&, rng, arr(1 To 100000, 1 To 10)
Dim st, nd, ct, ng
lr = Cells(Rows.Count, "A").End(xlUp).Row
rng = Range("A2:J" & lr).Value
For i = 1 To UBound(rng)
    st = Split(rng(i, 7), ","): nd = Split(rng(i, 6), ","): ct = Split(rng(i, 8), ";"): ng = Split(rng(i, 9), ",")
    For t = 0 To UBound(st)
        k = k + 1
        For j = 1 To UBound(rng, 2)
            Select Case j
                Case 1, 2, 3, 4, 10
                    arr(k, j) = rng(i, j)
                Case 5
                    arr(k, j) = rng(i, 6)
                Case 6
                    arr(k, j) = nd(t)
                Case 7
                    arr(k, j) = st(t)
                Case 8, 9
                    If UBound(st) = UBound(ct) Then
                        arr(k, j) = ct(t)
                    ElseIf UBound(st) = UBound(ct) + 1 Then
                        If t < 2 Then
                            arr(k, j) = IIf(j = 8, ct(0), ng(0))
                        Else: arr(k, j) = IIf(j = 8, ct(t - 1), ng(t - 1))
                        End If
                    End If
            End Select
        Next
    Next
Next
Range("A2:J10000").ClearContents
Range("A2").Resize(k, 10).Value = arr
Range("A2:J2").EntireColumn.AutoFit
End Sub
 

File đính kèm

Làm đại nhé. Trật tính tiếp.
Vì 2 nội dung liên quan để chung 1 chứng từ, nên mình auto 2 nội dung đầu tiên là chung 1 chứng từ nhé.
Nếu khác đi thì bạn post dữ liệu thật lên xem.
Mã:
Sub SplitAll()
Dim lr&, i&, j&, k&, t&, rng, arr(1 To 100000, 1 To 10)
Dim st, nd, ct, ng
lr = Cells(Rows.Count, "A").End(xlUp).Row
rng = Range("A2:J" & lr).Value
For i = 1 To UBound(rng)
    st = Split(rng(i, 7), ","): nd = Split(rng(i, 6), ","): ct = Split(rng(i, 8), ";"): ng = Split(rng(i, 9), ",")
    For t = 0 To UBound(st)
        k = k + 1
        For j = 1 To UBound(rng, 2)
            Select Case j
                Case 1, 2, 3, 4, 10
                    arr(k, j) = rng(i, j)
                Case 5
                    arr(k, j) = rng(i, 6)
                Case 6
                    arr(k, j) = nd(t)
                Case 7
                    arr(k, j) = st(t)
                Case 8, 9
                    If UBound(st) = UBound(ct) Then
                        arr(k, j) = ct(t)
                    ElseIf UBound(st) = UBound(ct) + 1 Then
                        If t < 2 Then
                            arr(k, j) = IIf(j = 8, ct(0), ng(0))
                        Else: arr(k, j) = IIf(j = 8, ct(t - 1), ng(t - 1))
                        End If
                    End If
            End Select
        Next
    Next
Next
Range("A2:J10000").ClearContents
Range("A2").Resize(k, 10).Value = arr
Range("A2:J2").EntireColumn.AutoFit
End Sub
dạ, em cảm ơn. Nhưng mà mình có thể sử dụng công thức excel cho file này không ạ? Tài vì em không xài VBA nên không rành.
 
Xin "tiên" mà người cho "voi" quả là ấm ức.
Xin "voi", mà người cho "tiên", thì hãy lấy làm đặng.

Trường hợp trong VD này mà dùng công thức thì... vì mình không có Ex365 nên mình chạy.
Còn VBA thì cho code và add sẵn vào file rồi. Còn cách dùng thì... google thôi.
 
Xin "tiên" mà người cho "voi" quả là ấm ức.
Xin "voi", mà người cho "tiên", thì hãy lấy làm đặng.

Trường hợp trong VD này mà dùng công thức thì... vì mình không có Ex365 nên mình chạy.
Còn VBA thì cho code và add sẵn vào file rồi. Còn cách dùng thì... google
Dạ vâng, để em thử xem sao, em cảm ơn nhiều ạ
 
Nếu như file của bạn chỉ có 2 điều kiện là:
1-Nếu cột F:"LỆ PHÍ...." có 1 dấu phảy thì cột F và G tách làm 2, các cột còn lại chỉ có 2 giá trị
2-Nếu cột F có 2 dấu phẩy thì cột F+G tách làm 3 giá trị, cột H+I tách làm 2 giá trị, giá trị đầu tiên se áp dụng cho 2 dòng đầu, giá trị thứ 2 áp dụng cho dòng 3.

1665113830337.png

Thì mình hỗ trợ dc đến đây thôi,do sếp mình nay vắng mặt nên mình có thời gian nghịch. làm 1 cái form, bạn điền data tương ứng vào các cột B đến J. Các cột còn lại hỗ trợ tách theo logic bạn nói,

1665113634811.png

sheet Tach sẽ bỏ xuống từng line như bạn yêu cầu.- Còn nếu lại vui vui phát sinh cái rule khác thì tính tiếp.

1665113713095.png
 

File đính kèm

Xin "tiên" mà người cho "voi" quả là ấm ức.
Xin "voi", mà người cho "tiên", thì hãy lấy làm đặng.

Trường hợp trong VD này mà dùng công thức thì... vì mình không có Ex365 nên mình chạy.
Còn VBA thì cho code và add sẵn vào file rồi. Còn cách dùng thì... google thôi.
Em chào anh, em đã thử, nhưng cột ngày tháng bị nhảy sai một vài chỗ, em đã bôi vàng và đính kèm file bên dưới ạ. Mong anh giải đáp
Bài đã được tự động gộp:

Nếu như file của bạn chỉ có 2 điều kiện là:
1-Nếu cột F:"LỆ PHÍ...." có 1 dấu phảy thì cột F và G tách làm 2, các cột còn lại chỉ có 2 giá trị
2-Nếu cột F có 2 dấu phẩy thì cột F+G tách làm 3 giá trị, cột H+I tách làm 2 giá trị, giá trị đầu tiên se áp dụng cho 2 dòng đầu, giá trị thứ 2 áp dụng cho dòng 3.

View attachment 281813

Thì mình hỗ trợ dc đến đây thôi,do sếp mình nay vắng mặt nên mình có thời gian nghịch. làm 1 cái form, bạn điền data tương ứng vào các cột B đến J. Các cột còn lại hỗ trợ tách theo logic bạn nói,

View attachment 281811

sheet Tach sẽ bỏ xuống từng line như bạn yêu cầu.- Còn nếu lại vui vui phát sinh cái rule khác thì tính tiếp.

View attachment 281812
Dạ vâng, em cảm ơn ạ. Để em áp dụng thử ạ
 

File đính kèm

Xin lỗi bạn, bạn lấy file này, nãy ẩu quá không thấy cột Ngày tách sai.
 

File đính kèm

Web KT

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

Back
Top Bottom