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???!!!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.
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.
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)
B4:C4=VLOOKUP($A4,TongHop!$A$4:$F$8,COLUMN(),)
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))
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.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.
Anh ơi, cái này mình có code VBA không anh.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))
Nếu bạn muốn code thì nói ngay từ đầu sẽ hay hơn.Anh ơi, cái này mình có code VBA không anh.
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.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 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).Để 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 chỉ giùm mình cách sử dụng cái hàm trên.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
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.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).
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=sharingBạn chỉ giùm mình cách sử dụng cái hàm trên.
Đọ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.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...
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.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.
Và sau, 15 phút về nhà là trả lại cho thầy?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ọcCứ 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...
Gửi anh hướng dẫn.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.
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:
Gửi anh hướng dẫn.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.
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ế.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.
tiền bối: có tiền mới có bửu bối...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ế.
Gừng càng già càng cay. Đọc thơ của anh thật vừa thấm vừa hay.tiền bối: có tiền mới có bửu bối
hậu bối: bửu bối phải hậu hĩnh.
Nhờ anh hướng dẫn chỗ này nên xử lý thế nào nhỉ.link này chưa cài đặt chia sẻ công khai nên không xem được
Bạn ơi, cài hàm đó thì mình làm ok rồi. Vấn đề là không biết dùng cái hàm đó thôi; hàm có 3 tham số, mà chẳng biết điền như thế nào?Gửi anh hướng dẫn.
Cái này đâu càn nhập tham số gì đâu bạn, copy dữ liệu cần chuyền đổi vào Sheets "TongHop", bấm ALT + F11 lên và phím F5 (lưu ý là có sẵn code ở trong module). Sau đó, vào Sheets "KetQuaMongMuon" để kiểm tra kết quả.Bạn ơi, cài hàm đó thì mình làm ok rồi. Vấn đề là không biết dùng cái hàm đó thôi; hàm có 3 tham số, mà chẳng biết điền như thế nào?
Nhờ anh hướng dẫn chỗ này nên xử lý thế nào nhỉ.
Cú phápBạn ơi, cài hàm đó thì mình làm ok rồi. Vấn đề là không biết dùng cái hàm đó thôi; hàm có 3 tham số, mà chẳng biết điền như thế nào?
=SplitRow(aArr, lMainCol, sDelemiter)
=SplitRow(A4:F8, 4, Char(10) )
Chọn đại một ô nào đó, và gõ:... chọn một vùng có 5 cột 19 dòng, nhập công thức bên dưới sau đó nhấn Ctrl + Shift + Enter.
Mã:=SplitRow(A4:F8, 4, Char(10) )
1/ Bạn Copy dữ liệu và Paste vào sheet TongHop rồi sang sheet KetQuaMongMuon nhấn nút để xem kết quả.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 ạ.
Rất mong được sự giúp đỡ.
Trân trọng.
Em cảm ơn anh đã giúp đỡ, file chạy rất mượt mà.1/ Bạn Copy dữ liệu và Paste vào sheet TongHop rồi sang sheet KetQuaMongMuon nhấn nút để xem kết quả.
2/ Lưu ý: Cuối mỗi Cell tôi tô màu xanh ở cột D và cột F của sheet TongHop bạn nhập thừa một cái Alt+Enter tôi phải xử xứ mới ra kết quả.
Bạn ơi lMainCol có điều kiện gì không vậy. Có phải lmaincol phải nhỏ hơn tổng số cột trong vùng chọn không? Mình thay giá trị 4 bằng 7 thì bị lỗi. Giả sử sheet TongHop có nhiều dữ liệu mấy ngàn dòng mình phải xem cột nào có ký tự xuống dòng char(10) nhiều nhất để chọn cột đó làm lMainCol, có thể thêm vào code tự xác định lMainCol luôn được không?Cú pháp
Trong đó:Mã:=SplitRow(aArr, lMainCol, sDelemiter)
aArr: Mảng nguồn
lMainCol: Cột chính (dựa vào cột này để xác định số dòng được tách).
sDelemiter: Ký tự xác định vị trí cắt chuỗi (trường hợp của topic này là ký tự xuồng dòng).
Cách dùng
Dùng trong VBA: Như sub Test ở bài 6, cú pháp như trên.
Dùng trên sheet: Dùng công thức mảng với dạng trả về kết quả là một mảng. Lấy file ở bài này làm ví dụ, ở sheet Tonghop chọn một vùng có 5 cột 19 dòng, nhập công thức bên dưới sau đó nhấn Ctrl + Shift + Enter.
Mã:=SplitRow(A4:F8, 4, Char(10) )
Được voi đòi luôn 2 bà trưng. Mình không biết về VBA. Nhưng mình nghĩ cũng khó đóĐể 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.
Nếu anh ấy mà dậy thật. Tôi nghĩ nửa năm thuê trọ đến gần nhà anh để uống cofe là không uổngMì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.