Tách dữ liệu trong ô thành nhiều dòng.

Liên hệ QC

HA7

Thành viên mới
Tham gia
20/7/17
Bài viết
32
Được thích
4
Giới tính
Nam
Thân gửi: Anh/chị/em trên GPE

Hiện tại, mình đang có 1 file dữ liệu mà trong 1 ô có rất nhiều dòng nhưng nếu làm thao tác thủ công rất tốn thời gian nên có nhờ mọi người có thể giúp em giải quyết vấn đề vấn với ạ.


1599640214806.png

Rất mong được sự giúp đỡ.

Trân trọng.
 

File đính kèm

  • ViDu.xlsx
    14.4 KB · Đọc: 50
Thân gửi: Anh/chị/em trên GPE

Hiện tại, mình đang có 1 file dữ liệu mà trong 1 ô có rất nhiều dòng nhưng nếu làm thao tác thủ công rất tốn thời gian nên có nhờ mọi người có thể giúp em giải quyết vấn đề vấn với ạ.


View attachment 245198

Rất mong được sự giúp đỡ.

Trân trọng.
Hình như cái này phải dụng tới VBA đúng không @n0thing1988 ? Hay kutool kutool gì có xử lý cái này được đúng không? Chứ xài công thức sao biết đường???!!!
Hay mình xử lý chuỗi cắt nó khi phát hiện ra 1 2 3 4? Có vẻ có lý ta.
 
  • Thích
Reactions: HA7
Thân gửi: Anh/chị/em trên GPE

Hiện tại, mình đang có 1 file dữ liệu mà trong 1 ô có rất nhiều dòng nhưng nếu làm thao tác thủ công rất tốn thời gian nên có nhờ mọi người có thể giúp em giải quyết vấn đề vấn với ạ.


View attachment 245198

Rất mong được sự giúp đỡ.

Trân trọng.
Mã:
A4=A3+IFERROR(COUNTIF(A$3:A3,A3)=ROUNDUP(LEN(SUBSTITUTE(VLOOKUP(A3,TongHop!$A$4:$F$8,4,),CHAR(10),REPT(1,999)))/999,),1)
Mã:
B4:C4=VLOOKUP($A4,TongHop!$A$4:$F$8,COLUMN(),)
Mã:
D4:F4=TRIM(MID(SUBSTITUTE(REPT(VLOOKUP($A4,TongHop!$A$4:$F$8,COLUMN(),)&CHAR(10),10),CHAR(10),REPT(" ",999)),COUNTIF($A$3:$A3,$A4)*999+1,999))
 
Hình như cái này phải dụng tới VBA đúng không @n0thing1988 ? Hay kutool kutool gì có xử lý cái này được đúng không? Chứ xài công thức sao biết đường???!!!
Hay mình xử lý chuỗi cắt nó khi phát hiện ra 1 2 3 4? Có vẻ có lý ta.
Em thấy cái này dùng code VBA chạy cũng tiện lắm anh ơi, nhờ mấy anh giúp đỡ. Em xin cảm ơn.
Bài đã được tự động gộp:

Mã:
A4=A3+IFERROR(COUNTIF(A$3:A3,A3)=ROUNDUP(LEN(SUBSTITUTE(VLOOKUP(A3,TongHop!$A$4:$F$8,4,),CHAR(10),REPT(1,999)))/999,),1)
Mã:
B4:C4=VLOOKUP($A4,TongHop!$A$4:$F$8,COLUMN(),)
Mã:
D4:F4=TRIM(MID(SUBSTITUTE(REPT(VLOOKUP($A4,TongHop!$A$4:$F$8,COLUMN(),)&CHAR(10),10),CHAR(10),REPT(" ",999)),COUNTIF($A$3:$A3,$A4)*999+1,999))
Anh ơi, cái này mình có code VBA không anh.
 
copy dữ liệu vào ô H4 để có kết quả nhé bạn
 

File đính kèm

  • ViDu.xlsx
    15.3 KB · Đọc: 26
Anh ơi, cái này mình có code VBA không anh.
Nếu bạn muốn code thì nói ngay từ đầu sẽ hay hơn.
Mã:
Function SplitRow(ByVal aArr As Variant, ByVal lMainCol As Long, sDelemiter As String) As Variant
Dim i As Long, j As Long, ii As Long, k As Long, aResult As Variant, lCount As Long
aArr = aArr
For i = LBound(aArr, 1) To UBound(aArr, 1)
    aArr(i, lMainCol) = Split(aArr(i, lMainCol), sDelemiter)
    k = UBound(aArr(i, lMainCol), 1) - LBound(aArr(i, lMainCol), 1) + 1
    lCount = lCount + k
    For j = LBound(aArr, 2) To UBound(aArr, 2)
        If j <> lMainCol Then
            aArr(i, j) = Split(Replace(Space(k), " ", aArr(i, j) & sDelemiter), sDelemiter, k + 1)
        End If
    Next
Next
ReDim aResult(1 To lCount, LBound(aArr, 2) To UBound(aArr, 2))
k = 0
For i = LBound(aArr, 1) To UBound(aArr, 1)
    For ii = LBound(aArr(i, lMainCol), 1) To UBound(aArr(i, lMainCol), 1)
        k = k + 1
        For j = LBound(aArr, 2) To UBound(aArr, 2)
            aResult(k, j) = aArr(i, j)(ii)
        Next
    Next
Next
SplitRow = aResult
End Function
Sub Test()
Arr = SplitRow(Sheet1.[A4:F8].Value, 4, ChrW(10))
Sheet2.[A4].Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub
 
Nếu bạn muốn code thì nói ngay từ đầu sẽ hay hơn.
Mã:
Function SplitRow(ByVal aArr As Variant, ByVal lMainCol As Long, sDelemiter As String) As Variant
Dim i As Long, j As Long, ii As Long, k As Long, aResult As Variant, lCount As Long
aArr = aArr
For i = LBound(aArr, 1) To UBound(aArr, 1)
    aArr(i, lMainCol) = Split(aArr(i, lMainCol), sDelemiter)
    k = UBound(aArr(i, lMainCol), 1) - LBound(aArr(i, lMainCol), 1) + 1
    lCount = lCount + k
    For j = LBound(aArr, 2) To UBound(aArr, 2)
        If j <> lMainCol Then
            aArr(i, j) = Split(Replace(Space(k), " ", aArr(i, j) & sDelemiter), sDelemiter, k + 1)
        End If
    Next
Next
ReDim aResult(1 To lCount, LBound(aArr, 2) To UBound(aArr, 2))
k = 0
For i = LBound(aArr, 1) To UBound(aArr, 1)
    For ii = LBound(aArr(i, lMainCol), 1) To UBound(aArr(i, lMainCol), 1)
        k = k + 1
        For j = LBound(aArr, 2) To UBound(aArr, 2)
            aResult(k, j) = aArr(i, j)(ii)
        Next
    Next
Next
SplitRow = aResult
End Function
Sub Test()
Arr = SplitRow(Sheet1.[A4:F8].Value, 4, ChrW(10))
Sheet2.[A4].Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub
Dạ, em cảm ơn anh nhiều nha. Dữ liệu chạy rất mượt anh ơi.
 
Nếu bạn muốn code thì nói ngay từ đầu sẽ hay hơn.
Mã:
Function SplitRow(ByVal aArr As Variant, ByVal lMainCol As Long, sDelemiter As String) As Variant
Dim i As Long, j As Long, ii As Long, k As Long, aResult As Variant, lCount As Long
aArr = aArr
For i = LBound(aArr, 1) To UBound(aArr, 1)
    aArr(i, lMainCol) = Split(aArr(i, lMainCol), sDelemiter)
    k = UBound(aArr(i, lMainCol), 1) - LBound(aArr(i, lMainCol), 1) + 1
    lCount = lCount + k
    For j = LBound(aArr, 2) To UBound(aArr, 2)
        If j <> lMainCol Then
            aArr(i, j) = Split(Replace(Space(k), " ", aArr(i, j) & sDelemiter), sDelemiter, k + 1)
        End If
    Next
Next
ReDim aResult(1 To lCount, LBound(aArr, 2) To UBound(aArr, 2))
k = 0
For i = LBound(aArr, 1) To UBound(aArr, 1)
    For ii = LBound(aArr(i, lMainCol), 1) To UBound(aArr(i, lMainCol), 1)
        k = k + 1
        For j = LBound(aArr, 2) To UBound(aArr, 2)
            aResult(k, j) = aArr(i, j)(ii)
        Next
    Next
Next
SplitRow = aResult
End Function
Sub Test()
Arr = SplitRow(Sheet1.[A4:F8].Value, 4, ChrW(10))
Sheet2.[A4].Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub
Để viết được code thế này chắc anh phải là dân lập trình chuyên nghiệp lắm anh nhỉ, thấy code của mà em mê quá vừa đẹp mắt lại rất hiệu quả. Anh có phương pháp nào để em giống như anh được không nhỉ, thời buổi này mà không biết code Excel thì khó lắm đây.
 
Để viết được code thế này chắc anh phải là dân lập trình chuyên nghiệp lắm anh nhỉ, thấy code của mà em mê quá vừa đẹp mắt lại rất hiệu quả. Anh có phương pháp nào để em giống như anh được không nhỉ, thời buổi này mà không biết code Excel thì khó lắm đây.
Bạn chuẩn bị 1 con gà nướng và 3 cái bánh bao nhân ngọt để làm lễ ra mắt nhé. Thầy ưng bạn thì 7 ngày sau làm tiếp cái lễ bái sư (1 con heo sữa quay và 1 mâm ngũ quả là được).
 
Nếu bạn muốn code thì nói ngay từ đầu sẽ hay hơn.
Mã:
Function SplitRow(ByVal aArr As Variant, ByVal lMainCol As Long, sDelemiter As String) As Variant
Dim i As Long, j As Long, ii As Long, k As Long, aResult As Variant, lCount As Long
aArr = aArr
For i = LBound(aArr, 1) To UBound(aArr, 1)
    aArr(i, lMainCol) = Split(aArr(i, lMainCol), sDelemiter)
    k = UBound(aArr(i, lMainCol), 1) - LBound(aArr(i, lMainCol), 1) + 1
    lCount = lCount + k
    For j = LBound(aArr, 2) To UBound(aArr, 2)
        If j <> lMainCol Then
            aArr(i, j) = Split(Replace(Space(k), " ", aArr(i, j) & sDelemiter), sDelemiter, k + 1)
        End If
    Next
Next
ReDim aResult(1 To lCount, LBound(aArr, 2) To UBound(aArr, 2))
k = 0
For i = LBound(aArr, 1) To UBound(aArr, 1)
    For ii = LBound(aArr(i, lMainCol), 1) To UBound(aArr(i, lMainCol), 1)
        k = k + 1
        For j = LBound(aArr, 2) To UBound(aArr, 2)
            aResult(k, j) = aArr(i, j)(ii)
        Next
    Next
Next
SplitRow = aResult
End Function
Sub Test()
Arr = SplitRow(Sheet1.[A4:F8].Value, 4, ChrW(10))
Sheet2.[A4].Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub
Bạn chỉ giùm mình cách sử dụng cái hàm trên.
 
  • Thích
Reactions: HA7
Bạn chuẩn bị 1 con gà nướng và 3 cái bánh bao nhân ngọt để làm lễ ra mắt nhé. Thầy ưng bạn thì 7 ngày sau làm tiếp cái lễ bái sư (1 con heo sữa quay và 1 mâm ngũ quả là được).
1599703443166.png
Không biết nên xưng hô với "xuongrongdat" thế nào nhỉ. Vật phẩm thế này không biết thầy có ưng mắt không nhỉ.
 
Bạn chuẩn bị 1 con gà nướng và 3 cái bánh bao nhân ngọt để làm lễ ra mắt nhé. Thầy ưng bạn thì 7 ngày sau làm tiếp cái lễ bái sư (1 con heo sữa quay và 1 mâm ngũ quả là được).
Cứ việc tới gần chỗ nhà mình. Chỉ cần một buổi uống cafe thì sẽ có thể viết code rần rần.
- 5 phút để hiểu tại sao cần khai báo biến + cách khai báo biến kiểu giang hồ như Dim i, j, sArr ,tmp. Khỏi cần bận tâm as long, hay as object...
- 15 phút để biết cách chọn vùng mình cần xử lý. Cách xác định dòng cuối, cột cuối
- 5 phút để biết mảng 2 chiều là cái giống gì
- 5 phút để biết cách gán dữ liệu vùng cần xử lý lên mảng
-15 phút để hiểu vòng lặp For ... Next hoạt động như thế nào
-15 phút để hiểu cấu trúc If ... End If
-30 phút để hiểu cách hoạt động của Dictionary
-60 phút để viết một code cơ bản áp dụng cái mớ bên trên.
Bảo đảm sau một buổi cafe đàm đạo về code bạn sẽ có cái nhìn mới dễ việc viết code cơ bản cho công việc văn phòng...
 
Bạn chỉ giùm mình cách sử dụng cái hàm trên.
Mình có quay video lại nhưng không upload lên được nên gửi bạn đường link: https://drive.google.com/file/d/1LwKd5I0Z2g-wmcPjG5PCPGSunC83b4XP/view?usp=sharing
Bài đã được tự động gộp:

Cứ việc tới gần chỗ nhà mình. Chỉ cần một buổi uống cafe thì sẽ có thể viết code rần rần.
- 5 phút để hiểu tại sao cần khai báo biến + cách khai báo biến kiểu giang hồ như Dim i, j, sArr ,tmp. Khỏi cần bận tâm as long, hay as object...
- 15 phút để biết cách chọn vùng mình cần xử lý. Cách xác định dòng cuối, cột cuối
- 5 phút để biết mảng 2 chiều là cái giống gì
- 5 phút để biết cách gán dữ liệu vùng cần xử lý lên mảng
-15 phút để hiểu vòng lặp For ... Next hoạt động như thế nào
-15 phút để hiểu cấu trúc If ... End If
-30 phút để hiểu cách hoạt động của Dictionary
-60 phút để viết một code cơ bản áp dụng cái mớ bên trên.
Bảo đảm sau một buổi cafe đàm đạo về code bạn sẽ có cái nhìn mới dễ việc viết code cơ bản cho công việc văn phòng...
Đọc mục lục của anh là em biết anh lão làng rồi làm cho em cảm thấy học viết code Excel không phải là vấn đề nan giải nữa. Nhưng mà anh và em có khoảng cách về địa lý (em ở Quảng Nam) nên không sao hội ngộ để anh truyền thụ võ công được.
 
Lần chỉnh sửa cuối:
Mình có quay video lại nhưng không upload lên được nên gửi bạn đường link: https://drive.google.com/file/d/1LwKd5I0Z2g-wmcPjG5PCPGSunC83b4XP/view?usp=sharing
Bài đã được tự động gộp:


Đọc mục lục của anh là em biết anh lão làng rồi làm cho em cảm thấy học viết code Excel không phải là vấn đề nan giải nữa. Nhưng mà anh và em có khoảng cách về địa lý (em ở Quảng Nam) nên không sao hội ngộ để anh truyền thụ võ công được.
Mình không xem được. Bạn chỉ cho mình điền mấy 3 tham số trong cái hàm đó, số liệu như trong file ví dụ là được.
 
Lần chỉnh sửa cuối:
Cứ việc tới gần chỗ nhà mình. Chỉ cần một buổi uống cafe thì sẽ có thể viết code rần rần.
- 5 phút để hiểu tại sao cần khai báo biến + cách khai báo biến kiểu giang hồ như Dim i, j, sArr ,tmp. Khỏi cần bận tâm as long, hay as object...
- 15 phút để biết cách chọn vùng mình cần xử lý. Cách xác định dòng cuối, cột cuối
- 5 phút để biết mảng 2 chiều là cái giống gì
- 5 phút để biết cách gán dữ liệu vùng cần xử lý lên mảng
-15 phút để hiểu vòng lặp For ... Next hoạt động như thế nào
-15 phút để hiểu cấu trúc If ... End If
-30 phút để hiểu cách hoạt động của Dictionary
-60 phút để viết một code cơ bản áp dụng cái mớ bên trên.
Bảo đảm sau một buổi cafe đàm đạo về code bạn sẽ có cái nhìn mới dễ việc viết code cơ bản cho công việc văn phòng...
Và sau, 15 phút về nhà là trả lại cho thầy?
Nói vậy, nếu ai học kiểu này cũng bổ âm bổ dương đâu đó, nếu có kiến thức nền tảng khá trước thì là Ok (tốt) trở lên
 
Lần chỉnh sửa cuối:
Cứ việc tới gần chỗ nhà mình. Chỉ cần một buổi uống cafe thì sẽ có thể viết code rần rần.
- 5 phút để hiểu tại sao cần khai báo biến + cách khai báo biến kiểu giang hồ như Dim i, j, sArr ,tmp. Khỏi cần bận tâm as long, hay as object...
- 15 phút để biết cách chọn vùng mình cần xử lý. Cách xác định dòng cuối, cột cuối
- 5 phút để biết mảng 2 chiều là cái giống gì
- 5 phút để biết cách gán dữ liệu vùng cần xử lý lên mảng
-15 phút để hiểu vòng lặp For ... Next hoạt động như thế nào
-15 phút để hiểu cấu trúc If ... End If
-30 phút để hiểu cách hoạt động của Dictionary
-60 phút để viết một code cơ bản áp dụng cái mớ bên trên.
Bảo đảm sau một buổi cafe đàm đạo về code bạn sẽ có cái nhìn mới dễ việc viết code cơ bản cho công việc văn phòng...
Sao không thấy phút nào về cách phân tích vấn đề, lượt thuật lô gic tuần tự, xếp thành giải thuật, và từ đó dịch những chi tiết thành code.
 
Cứ việc tới gần chỗ nhà mình. Chỉ cần một buổi uống cafe thì sẽ có thể viết code rần rần.
- 5 phút để hiểu tại sao cần khai báo biến + cách khai báo biến kiểu giang hồ như Dim i, j, sArr ,tmp. Khỏi cần bận tâm as long, hay as object...
- 15 phút để biết cách chọn vùng mình cần xử lý. Cách xác định dòng cuối, cột cuối
- 5 phút để biết mảng 2 chiều là cái giống gì
- 5 phút để biết cách gán dữ liệu vùng cần xử lý lên mảng
-15 phút để hiểu vòng lặp For ... Next hoạt động như thế nào
-15 phút để hiểu cấu trúc If ... End If
-30 phút để hiểu cách hoạt động của Dictionary
-60 phút để viết một code cơ bản áp dụng cái mớ bên trên.
Bảo đảm sau một buổi cafe đàm đạo về code bạn sẽ có cái nhìn mới dễ việc viết code cơ bản cho công việc văn phòng...
A ở chỗ nào vậy anh, để hằng sáng mời cafe anh và được học
 
Mình không xem được. Bạn chỉ cho mình điền mấy 3 tham số trong cái hàm đó, số liệu như trong file ví dụ là được.
Gửi anh hướng dẫn.
Sao không thấy phút nào về cách phân tích vấn đề, lượt thuật lô gic tuần tự, xếp thành giải thuật, và từ đó dịch những chi tiết thành code.
Về vấn đề này, xin các tiền bối có thể chia sẻ cho hậu bối phương pháp học và cách tư duy như thế nào để viết code có hiệu quả hơn không nhỉ. Học được cái này rất có ích để ứng dụng cho thực tế.
 
Web KT
Back
Top Bottom