ndangminh86
Thành viên mới

- Tham gia
- 8/1/16
- Bài viết
- 3
- Được thích
- 0
File đính kèm
Lần chỉnh sửa cuối:
Chủ đề "Xử lý chuỗi ký tự", Xử nó bằng VBA nhé!Cảm ơn bạn rất nhiều, mình đã sửa tiêu đề và đính kèm file. Còn việc chuyển bài sang box lập trình thì mình không chuyển được.
Option Explicit
Public Sub s_Gpe()
Const CoL As Long = 4 'So Cot cua bang du lieu'
Dim sArr(), dArr(), Tmp As Variant, I As Long, J As Long, K As Long, N As Long, R As Long
sArr = Range("A4", Range("A4").End(xlDown)).Resize(, CoL).Value
R = UBound(sArr)
ReDim dArr(1 To R * 10, 1 To CoL) '1 cell cot A tach toi da thanh 10 dong'
For I = 1 To R
Tmp = Split(sArr(I, 1), ";") 'Tach chuoi voi dau ;'
For N = 0 To UBound(Tmp)
K = K + 1
dArr(K, 1) = Tmp(N)
For J = 2 To CoL
dArr(K, J) = sArr(I, J)
Next J
Next N
Next I
Range("I4").Resize(K, CoL) = dArr 'Gan ket qua bat dau tu cell I5'
End Sub
Không nhất thiết phải dùng VBA. Một chủ đề có thể xử lý bằng nhiều cách. Box này là "Xử lý chuỗi ký tự" và muốn xử lý cách nào cũng được.2/ Để giải quyết nhanh chóng nên đăng bài trong Box Lập trình với Excel.
Góp ý thêm cho bạn:Cảm ơn bạn rất nhiều, mình đã sửa tiêu đề và đính kèm file. Còn việc chuyển bài sang box lập trình thì mình không chuyển được.
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
SplitColumn = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Cột 1", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv),
let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Cột 1")
in
SplitColumn
Bạn dùng thử công thức nàyChào các bác,
Em có một số dữ liệu cần xử lý theo như ảnh bên dưới, các bác giúp em các bước xử lý với:
1/ Tìm ký tự ; trong cột 1 và thay bằng xuống Row mới ( các cột khác cũng xuống dòng cùng)
2/ Dữ liệu các cột khác copy xuống dòng vừa xuống.
View attachment 255613
cột 1 =TRIM(MID(SUBSTITUTE(INDEX($A$4:$A$7,(INT(ROW(A1)-1)/4)+1),";",REPT(" ",100)),MOD(ROW(A1)-1,4)*100+1,100)) =>coppy xuống
cột 2 =INDEX(B$4:B$7,(ROW(A1)-1)/4+1) =>coppy công thức sang cột 3,4
Tham khảo...........Chào các bác,
Em có một số dữ liệu cần xử lý theo như ảnh bên dưới, các bác giúp em các bước xử lý với:
1/ Tìm ký tự ; trong cột 1 và thay bằng xuống Row mới ( các cột khác cũng xuống dòng cùng)
2/ Dữ liệu các cột khác copy xuống dòng vừa xuống.
Bạn dùng thử công thức này
Nếu xen kẽ 4, 5, 3 thành phần thì sao?Tham khảo...........
Em đang làm theo dữ liệu hiện tại, còn thêm nữa chắc công thức này không còn phù hợp anh ạ.Nếu xen kẽ 4, 5, 3 thành phần thì sao?
Công thức sử dụng từ bản office2019.Nếu xen kẽ 4, 5, 3 thành phần thì sao?
=INDEX(FILTERXML("<a><b>"&TEXTJOIN("</b><b>",,SUBSTITUTE($A$4:$A$7,";","</b><b>"))&"</b></a>","//b"),ROW(A1))
=INDEX(FILTERXML("<a><b>"&CONCAT(REPT(SUBSTITUTE(B$4:B$7,";","</b><b>")&"</b><b>",1+LEN($A$4:$A$7)-LEN(SUBSTITUTE($A$4:$A$7,";",""))))&"</b></a>","//b"),ROW(A1))
Mình dùng công thức này biến tấu 1 chút, do dữ liệu cột 1 có khi có tới 5 hoặc 6 dấu ; . Ngoài ra độ dài của chuỗi cũng có thể >100 ký tự. Và bắt đầu từ dòng 1 hoặc 2 tới vài chục ngàn dòng. Do đó mình sửa lại thành như sau :Bạn dùng thử công thức này
CoffeeScript:cột 1 =TRIM(MID(SUBSTITUTE(INDEX($A$4:$A$7,(INT(ROW(A1)-1)/4)+1),";",REPT(" ",100)),MOD(ROW(A1)-1,4)*100+1,100)) =>coppy xuống cột 2 =INDEX(B$4:B$7,(ROW(A1)-1)/4+1) =>coppy công thức sang cột 3,4
Cột 1 : =TRIM(MID(SUBSTITUTE(INDEX($A$3:$A$99999,(INT(ROW(A1)-1)/5)+1),";",REPT(" ",200)),MOD(ROW(A1)-1,5)*200+1,200))
Cột 2: =INDEX(B$3:B$99999,(ROW(A1)-1)/5+1)
Cột 3: =INDEX(C$3:C$99999,(ROW(A1)-1)/5+1)
Cột 4: =INDEX(D$3:D$99999,(ROW(A1)-1)/5+1)
Cột 5: =INDEX(E$3:E$99999,(ROW(A1)-1)/5+1)