Tách chuỗi theo định dạng

Liên hệ QC

File đính kèm

  • Trích chữ tô đỏ (1).xls
    40.5 KB · Đọc: 11
Mọi người ơi, nếu bây giờ mình cần tách những chữ format vào từng ô giống như trong file đính kèm thì có làm được không vậy (nếu đã tách hết chuỗi thì sẽ để là "not used")? Nhờ mọi người giúp đỡ
 

File đính kèm

  • Test.xlsm
    33.1 KB · Đọc: 19
Mọi người ơi, nếu bây giờ mình cần tách những chữ format vào từng ô giống như trong file đính kèm thì có làm được không vậy (nếu đã tách hết chuỗi thì sẽ để là "not used")? Nhờ mọi người giúp đỡ
Với dữ liệu trong bài, bạn thử "em" này xem sao:
Mã:
Public Function ToTe(Cll As Range, Dk)
    Dim Tam, I, K, Ktra
        For I = 1 To Len(Cll)
            If Cll.Characters(I, 1).Font.Color > 0 Then
                Tam = Tam & Mid(Cll, I, 1)
                Ktra = 1
            Else
                If Ktra = 1 Then
                    K = K + 1
                    If K = Dk Then ToTe = Tam: Exit Function
                    Ktra = 0
                End If
            End If
        Next I
    ToTe = "Not used"
End Function
Công thức ở [E2]:
Mã:
=tote($C2,COLUMN(A:A))
Kéo sang phải, kéo xuống
Thân
 
Mọi người ơi, nếu bây giờ mình cần tách những chữ format vào từng ô giống như trong file đính kèm thì có làm được không vậy (nếu đã tách hết chuỗi thì sẽ để là "not used")? Nhờ mọi người giúp đỡ
Mã:
Function tachchuoi(chuoi As Range, a As Long) As String
    Dim arr
    Dim T
    T = Split("-" & chuoi, "-")
    If a > 0 And a <= UBound(T) Then
       arr = T(a)
    Else
      arr = "Not used"
    End If
    tachchuoi = arr
End Function
Mã:
E2=tachchuoi($D2,COLUMN(A:A))
Đây bạn xem nhé.Đang tập viết hàm.
 
Function tachchuoi(chuoi As Range, a As Long) As String
Tham số cần truyền vào hàm là một chuỗi, và một chỉ số chỉ thị phần cần lấy phân cách bởi dấu gạch ngang, thì khai báo thế này:
Function tachchuoi(byval chuoi as string, byval idex as long) as string

Trường hợp truyền vào hàm cả dấu phân cách thì:
Function tachchuoi2(byval chuoi as string, byval idex as long, optional byval phancach as string = "-") as string
 
Tham số cần truyền vào hàm là một chuỗi, và một chỉ số chỉ thị phần cần lấy phân cách bởi dấu gạch ngang, thì khai báo thế này:
Function tachchuoi(byval chuoi as string, byval idex as long) as string

Trường hợp truyền vào hàm cả dấu phân cách thì:
Function tachchuoi2(byval chuoi as string, byval idex as long, optional byval phancach as string = "-") as string
Cảm ơn anh nhé.
 
Mọi người ơi, nếu bây giờ mình cần tách những chữ format vào từng ô giống như trong file đính kèm thì có làm được không vậy (nếu đã tách hết chuỗi thì sẽ để là "not used")? Nhờ mọi người giúp đỡ
Bạn nêu vấn đề chưa rỏ, có thể là vầy:
1/ Lấy những chữ tô đỏ vào cột D, phân cách mỗi loại là dấu gạch nối.
2/ Từ cột D tách mỗi loại hóa chất riêng từng cột.
 
Với dữ liệu trong bài, bạn thử "em" này xem sao:
Mã:
Public Function ToTe(Cll As Range, Dk)
    Dim Tam, I, K, Ktra
        For I = 1 To Len(Cll)
            If Cll.Characters(I, 1).Font.Color > 0 Then
                Tam = Tam & Mid(Cll, I, 1)
                Ktra = 1
            Else
                If Ktra = 1 Then
                    K = K + 1
                    If K = Dk Then ToTe = Tam: Exit Function
                    Ktra = 0
                End If
            End If
        Next I
    ToTe = "Not used"
End Function
Công thức ở [E2]:
Mã:
=tote($C2,COLUMN(A:A))
Kéo sang phải, kéo xuống
Thân
Bạn ơi từ cột hóa chất 2 trở đi, nó lấy luôn cả hóa chất trước đó luôn chứ không tách riêng ra như file trên bài #4 của mình.Untitled.png
Bài đã được tự động gộp:

Bạn nêu vấn đề chưa rỏ, có thể là vầy:
1/ Lấy những chữ tô đỏ vào cột D, phân cách mỗi loại là dấu gạch nối.
2/ Từ cột D tách mỗi loại hóa chất riêng từng cột.
Vấn đề của mình là như vậy, trong cột C mình có sử dụng 4 loại hóa chất là: iodine, potassium iodide (2 in 5), dilute hydrochloric acid, dilute sodium bitartrate monohydrate. Mình muốn nhờ mọi người giúp mình tách 4 loại hóa chất này vào các ô Hóa chất 1, Hóa chất 2, Hóa chất 3 ...Hóa chất 7, theo thứ tự các hóa chất xuất hiện trong chuỗi ở cột C. Nếu đã tách hết hóa chất thì các cột hóa chất còn lại sẽ là "Not used".
 
Lần chỉnh sửa cuối:
Bạn ơi từ cột hóa chất 2 trở đi, nó lấy luôn cả hóa chất trước đó luôn chứ không tách riêng ra như file trên bài #4 của mình.View attachment 208831
Bài đã được tự động gộp:


Vấn đề của mình là như vậy, trong cột C mình có sử dụng 4 loại hóa chất là: iodine, potassium iodide (2 in 5), dilute hydrochloric acid, dilute sodium bitartrate monohydrate. Mình muốn nhờ mọi người giúp mình tách 4 loại hóa chất này vào các ô Hóa chất 1, Hóa chất 2, Hóa chất 3 ...Hóa chất 7, theo thứ tự các hóa chất xuất hiện trong chuỗi ở cột C. Nếu đã tách hết hóa chất thì các cột hóa chất còn lại sẽ là "Not used".
Các code ở trên chưa đáp ứng yêu cầu, bài 9 tôi gợi ý cho hướng đi (nhưng bạn lại không quan tâm).
Dựa vào File bài 1 thì bạn cũng có thể tự làm được mà (bạn đầu tư suy nghĩ 1 chút đi).
 
Bạn ơi từ cột hóa chất 2 trở đi, nó lấy luôn cả hóa chất trước đó luôn chứ không tách riêng ra như file trên bài #4 của mình
Công thức cho E2
Mã:
=TRIM(MID(SUBSTITUTE($D2,"-",REPT(" ",LEN($D2))),(COLUMNS($D2:D2)-1)*LEN($D2)+1,LEN($D2)))
Kết thúc bằng Enter, copy sang phải tới cột K rồi xuống dưới
 
Lần chỉnh sửa cuối:
Các code ở trên chưa đáp ứng yêu cầu, bài 9 tôi gợi ý cho hướng đi (nhưng bạn lại không quan tâm).
Dựa vào File bài 1 thì bạn cũng có thể tự làm được mà (bạn đầu tư suy nghĩ 1 chút đi).
Cám ơn bạn đã gợi ý, mình lúc đầu có dùng mid + search để tách từng chuỗi ra, nhưng lại có nhược điểm là cái chuỗi cuối cùng nó hay có số thứ tự thay đổi tùy theo từng chuỗi của cột C. Mình không làm được nên mới nhờ các bạn trên này giúp đó chứ.
Bài đã được tự động gộp:

Công thức cho E2
Mã:
=TRIM(MID(SUBSTITUTE($D2,"-",REPT(" ",LEN($D2))),(COLUMNS($D2:D2)-1)*LEN($D2)+1,LEN($D2)))
Kết thúc bằng Enter, copy sang phải tới cột K rồi xuống dưới
Có vẻ công thức của bạn hoạt động tốt, mình sẽ kiểm tra lại cách vận hành để học hỏi thêm. Cám ơn bạn nhiều
 
Lần chỉnh sửa cuối:
Bạn ơi từ cột hóa chất 2 trở đi, nó lấy luôn cả hóa chất trước đó luôn chứ không tách riêng ra như file trên bài #4 của mình.View attachment 208831
Bài đã được tự động gộp:


Vấn đề của mình là như vậy, trong cột C mình có sử dụng 4 loại hóa chất là: iodine, potassium iodide (2 in 5), dilute hydrochloric acid, dilute sodium bitartrate monohydrate. Mình muốn nhờ mọi người giúp mình tách 4 loại hóa chất này vào các ô Hóa chất 1, Hóa chất 2, Hóa chất 3 ...Hóa chất 7, theo thứ tự các hóa chất xuất hiện trong chuỗi ở cột C. Nếu đã tách hết hóa chất thì các cột hóa chất còn lại sẽ là "Not used".
Mã:
Function TrichChuDo(O As Range, Optional ViTri As Long = 0) As String
    Const DauNoi As String = " - "
    Dim Chuoi As String, BatDau As Long
    Chuoi = O.Value
    With O
        For i = 1 To Len(Chuoi)
            If .Characters(i, 1).Font.Color = RGB(255, 0, 0) Then
                If BatDau = 0 Then BatDau = i
            Else
                If BatDau > 0 Then
                    If ViTri = 0 Then
                        TrichChuDo = TrichChuDo & DauNoi & Mid(Chuoi, BatDau, i - BatDau)
                    Else
                        If ViTri = 1 Then
                            TrichChuDo = Mid(Chuoi, BatDau, i - BatDau)
                            Exit Function
                        End If
                        ViTri = ViTri - 1
                    End If
                    BatDau = 0
                End If
            End If
        Next
    End With
    If ViTri > 0 Then
        TrichChuDo = "Not used"
    Else
        TrichChuDo = Mid(TrichChuDo, Len(DauNoi) + 1)
    End If
End Function
Mã:
D2=trichchudo($C2)
Mã:
E2=trichchudo($C2,COLUMN(A1))
Lưu ý: Không hiệu quả bằng cách lấy tất cả các hóa chất ra cột D rồi dùng hàm Excel tách ra.
 
Cám ơn bạn đã gợi ý, mình lúc đầu có dùng mid + search để tách từng chuỗi ra, nhưng lại có nhược điểm là cái chuỗi cuối cùng nó hay có số thứ tự thay đổi tùy theo từng chuỗi của cột C. Mình không làm được nên mới nhờ các bạn trên này giúp đó chứ.
Bài đã được tự động gộp:


Có vẻ công thức của bạn hoạt động tốt, mình sẽ kiểm tra lại cách vận hành để học hỏi thêm. Cám ơn bạn nhiều
Thử làm vầy nhé:
1/ Copy Sheet Practice (chứa dữ liệu) sang sheet khác, tiếp theo Copy cột D > Paste Special > Value (để bỏ hàm).
2/ Chọn cột D rồi sử dụng Text to Columns để tách ra (xong). Nếu chưa biết sử dụng Text to Columns thì bạn phải tự tìm hiểu mới nhớ dai và để áp dụng cho các trường hợp khác.

Tôi viết code thì cũng dựa vào các quy tắc trên.
 
Web KT
Back
Top Bottom