Xin nhờ giúp đỡ công thức tách chuỗi thành các đoạn text như trong file đính kèm

LaptopPhongLinh

Thành viên mới
Tham gia ngày
18 Tháng một 2019
Bài viết
8
Được thích
0
Điểm
13
Tuổi
36
Bên em đang dùng Kiot Việt. Do em cần theo dõi riêng một số thông số trên Excel, nên đang tìm cách tách cụ thể từng chuỗi ra thủ công như file bên dưới.

Xin nhờ các anh chị em cô dì chú bác đi qua giúp đỡ.

Trong file là phần bôi màu ví dụ phần mong muốn tách, sau đó em sẽ tự làm công thức thủ công để thống kê. Nếu có gợi ý nào hay hơn hoặc công thức đơn giản cũng kính mong được cộng đồng Giải Pháp Excel chỉ dạy ạ.
 

File đính kèm

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
8,395
Được thích
8,163
Điểm
560
Tuổi
62
Nơi ở
Biên Hòa, Đồng Nai
Bên em đang dùng Kiot Việt. Do em cần theo dõi riêng một số thông số trên Excel, nên đang tìm cách tách cụ thể từng chuỗi ra thủ công như file bên dưới.

Xin nhờ các anh chị em cô dì chú bác đi qua giúp đỡ.

Trong file là phần bôi màu ví dụ phần mong muốn tách, sau đó em sẽ tự làm công thức thủ công để thống kê. Nếu có gợi ý nào hay hơn hoặc công thức đơn giản cũng kính mong được cộng đồng Giải Pháp Excel chỉ dạy ạ.
Kiểm tra thử kết quả như trong File, nếu đúng thì mới tính.
 

File đính kèm

LaptopPhongLinh

Thành viên mới
Tham gia ngày
18 Tháng một 2019
Bài viết
8
Được thích
0
Điểm
13
Tuổi
36
Kiểm tra thử kết quả như trong File, nếu đúng thì mới tính.
Cảm ơn thầy, đúng rồi ạ. Thầy có thể chỉ giúp em không ạ? Em mong muốn công thức thôi ạ, vì VBA em không hiểu gì luôn ạ. À, phần DF, nếu con nào không có nó lại bị lẫn với mục CAM, và bị đẩy qua lại giữa DF/CAM/Service tag. Nếu được thì phiền thầy giúp em nốt chỗ đó ạ, em cảm ơn, may quá!
 

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
8,900
Được thích
10,267
Điểm
1,560
Ai đó dịch nghĩa tiêu đề thớt này giúp mình với.

Xin cảm ơn.

"Xin nhờ giúp đỡ text trong chuỗi ra cụ thể ạ"
 

VetMini

Gian hùng bàn phiếm (thành viên trôi nước)
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
7,415
Được thích
8,720
Điểm
560
Chuỗi tức là xâu. Text là một tập hợp con của chuỗi - trong chuỗi có thể chứa text hoặc không.
Cụ thể tức là thực.
Như vậy công việc yêu cầu là lấy phần text có thể hiển thị được trong chuỗi, bỏ những phần không hiển thị được.
 

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
8,900
Được thích
10,267
Điểm
1,560
Chuỗi tức là xâu. Text là một tập hợp con của chuỗi - trong chuỗi có thể chứa text hoặc không.
Cụ thể tức là thực.
Như vậy công việc yêu cầu là lấy phần text có thể hiển thị được trong chuỗi, bỏ những phần không hiển thị được.
Dạ vâng. Em cảm ơn anh về phần diễn giải không thể chi tiết hơn. :)

---
Gửi đề nghị tới chủ thớt, và (hoặc) gửi đề xuất tới các anh Mod/ Smod: Sửa lại tiêu đề theo diễn giải ở bài #5 (để tiêu đề cụ thể và dễ hiểu).
 

LaptopPhongLinh

Thành viên mới
Tham gia ngày
18 Tháng một 2019
Bài viết
8
Được thích
0
Điểm
13
Tuổi
36
Dạ vâng. Em cảm ơn anh về phần diễn giải không thể chi tiết hơn. :)

---
Gửi đề nghị tới chủ thớt, và (hoặc) gửi đề xuất tới các anh Mod/ Smod: Sửa lại tiêu đề theo diễn giải ở bài #5 (để tiêu đề cụ thể và dễ hiểu).
Đã edit cụ thể hơn, mong bác giúp đỡ ạ.
 
Lần chỉnh sửa cuối:

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
8,395
Được thích
8,163
Điểm
560
Tuổi
62
Nơi ở
Biên Hòa, Đồng Nai
1/ Bạn nên sửa tiêu đề cho phù hợp với nội dung, có thể là"Giúp tách dữ liệu cột C tương ứng các cột R:AC của sheet ProducInOutStock".
2/ Hình như dữ liệu của sheet ProducInOutStock được xuất ra từ một phần mềm thì phải?
3/ Do nhập dữ liệu không đồng nhất nên việc tách dữ liệu rất là khó khăn, File bài 2 tôi tách thử thì nó bắt đầu sai từ cột T (ổ dĩa).
 

LaptopPhongLinh

Thành viên mới
Tham gia ngày
18 Tháng một 2019
Bài viết
8
Được thích
0
Điểm
13
Tuổi
36
1/ Bạn nên sửa tiêu đề cho phù hợp với nội dung, có thể là"Giúp tách dữ liệu cột C tương ứng các cột R:AC của sheet ProducInOutStock".
2/ Hình như dữ liệu của sheet ProducInOutStock được xuất ra từ một phần mềm thì phải?
3/ Do nhập dữ liệu không đồng nhất nên việc tách dữ liệu rất là khó khăn, File bài 2 tôi tách thử thì nó bắt đầu sai từ cột T (ổ dĩa).
Thầy giúp em xin đoạn lệnh thầy đã dùng em nghiên cứu thêm được không ạ? Em cũng biết là nhập dữ liệu không đồng nhất. Em cũng đang xem thêm mấy bài tách trên diễn đàn mình ạ.
 

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
8,395
Được thích
8,163
Điểm
560
Tuổi
62
Nơi ở
Biên Hòa, Đồng Nai
Thầy giúp em xin đoạn lệnh thầy đã dùng em nghiên cứu thêm được không ạ? Em cũng biết là nhập dữ liệu không đồng nhất. Em cũng đang xem thêm mấy bài tách trên diễn đàn mình ạ.
File bài 2 tôi mới làm thử thủ công chứ chưa có Code.
Muốn code thì chờ vài hôm nữa, nhưng cũng chỉ ra kết quả tương đối, sau khi có kết quả thì kiểm tra lại chỗ nào chưa phù hợp thì cắt và Paste sang cho đúng dữ liệu cột.
 

LaptopPhongLinh

Thành viên mới
Tham gia ngày
18 Tháng một 2019
Bài viết
8
Được thích
0
Điểm
13
Tuổi
36
File bài 2 tôi mới làm thử thủ công chứ chưa có Code.
Muốn code thì chờ vài hôm nữa, nhưng cũng chỉ ra kết quả tương đối, sau khi có kết quả thì kiểm tra lại chỗ nào chưa phù hợp thì cắt và Paste sang cho đúng dữ liệu cột.
Cảm ơn Thầy. Em sau khi mày mò trên diễn đàn mình thì cũng ra kết quả này. Nhờ Thầy kiểm tra và góp ý ạ!
 

File đính kèm

HieuCD

Thành viên gạo cội
Tham gia ngày
14 Tháng chín 2010
Bài viết
6,101
Được thích
11,242
Điểm
1,560
Bên em đang dùng Kiot Việt. Do em cần theo dõi riêng một số thông số trên Excel, nên đang tìm cách tách cụ thể từng chuỗi ra thủ công như file bên dưới.

Xin nhờ các anh chị em cô dì chú bác đi qua giúp đỡ.

Trong file là phần bôi màu ví dụ phần mong muốn tách, sau đó em sẽ tự làm công thức thủ công để thống kê. Nếu có gợi ý nào hay hơn hoặc công thức đơn giản cũng kính mong được cộng đồng Giải Pháp Excel chỉ dạy ạ.
Dữ liệu không theo chuẩn nên khó xử lý. Chỉ xét các tình huống trong file
Mã:
Sub GPE()
  Dim sArr(), Res(), S, T

  sArr = Sheets("ProducInOutStock").Range("C11", Range("C65000").End(xlUp)).Value
  ReDim Res(1 To UBound(sArr), 1 To 12)
  For i = 1 To UBound(sArr)
    If Len(sArr(i, 1)) > 10 Then
      If InStr(1, sArr(i, 1), "IPS") > 0 Then Res(i, 9) = "IPS"
      If InStr(1, sArr(i, 1), "DF") > 0 Then Res(i, 10) = "DF"
      If InStr(1, sArr(i, 1), "CAM") > 0 Then Res(i, 11) = "CAM"
    
      S = Split(sArr(i, 1), "/")
      T = Split(S(0), " ")
      Res(i, 1) = T(0): Res(i, 2) = T(1)
      Res(i, 3) = LoaiSo(S(1))
      Res(i, 4) = Application.Trim(Split(S(2), "-")(1))
      Res(i, 5) = S(3)
      Res(i, 6) = Replace((S(4)), "-", "")
      
      tmp = Replace(Replace((S(5)), "-", ""), " ", "")
      If IsNumeric(tmp) Then
        Res(i, 6) = Res(i, 6) & "-" & tmp
      Else
        If Len(S(5)) > 4 Then Res(i, 7) = S(5)
      End If
      If Left(Res(i, 6), 2) = "HD" Then
        If InStr(1, Res(i, 6), "-") > 0 Then
          Res(i, 7) = Split(Res(i, 6), "-")(0)
          Res(i, 6) = Split(Res(i, 6), "-")(1)
        Else
          tmp = Res(i, 6)
          Res(i, 6) = Res(i, 7)
          Res(i, 7) = tmp
        End If
      End If
      If Len(S(6)) > 4 Then Res(i, 7) = S(6)
      For j = 1 To UBound(S)
        If Len(S(j)) < 5 And InStr(1, S(j), "HD") > 0 Then
          Res(i, 8) = S(j)
          If UBound(S) - j = 2 Then
            Res(i, 12) = Replace(S(j + 2), "CAM", "")
          Else
            Res(i, 12) = Split(S(j + 3), " ")(0)
            If Res(i, 12) = "CAM" Then Res(i, 12) = Split(S(j + 4), " ")(0)
            Res(i, 12) = Split(Res(i, 12), "-")(0)
             If Res(i, 12) = "CAM" Then
            a = 1
            End If
          End If
        End If
      Next j
    End If
  Next i
  Sheets("ProducInOutStock").Range("R11").Resize(UBound(sArr), 12) = Res
End Sub
Private Function LoaiSo(ByVal iStr As String) As String
  Dim n As Integer, j As Integer, tmp As String
  n = Len(iStr)
  For j = 1 To n
    If Not IsNumeric(Mid(iStr, j, 1)) Then tmp = tmp & Mid(iStr, j, 1)
  Next j
  LoaiSo = tmp
End Function
 

File đính kèm

LaptopPhongLinh

Thành viên mới
Tham gia ngày
18 Tháng một 2019
Bài viết
8
Được thích
0
Điểm
13
Tuổi
36
Dữ liệu không theo chuẩn nên khó xử lý. Chỉ xét các tình huống trong file
Mã:
Sub GPE()
  Dim sArr(), Res(), S, T

  sArr = Sheets("ProducInOutStock").Range("C11", Range("C65000").End(xlUp)).Value
  ReDim Res(1 To UBound(sArr), 1 To 12)
  For i = 1 To UBound(sArr)
    If Len(sArr(i, 1)) > 10 Then
      If InStr(1, sArr(i, 1), "IPS") > 0 Then Res(i, 9) = "IPS"
      If InStr(1, sArr(i, 1), "DF") > 0 Then Res(i, 10) = "DF"
      If InStr(1, sArr(i, 1), "CAM") > 0 Then Res(i, 11) = "CAM"
   
      S = Split(sArr(i, 1), "/")
      T = Split(S(0), " ")
      Res(i, 1) = T(0): Res(i, 2) = T(1)
      Res(i, 3) = LoaiSo(S(1))
      Res(i, 4) = Application.Trim(Split(S(2), "-")(1))
      Res(i, 5) = S(3)
      Res(i, 6) = Replace((S(4)), "-", "")
     
      tmp = Replace(Replace((S(5)), "-", ""), " ", "")
      If IsNumeric(tmp) Then
        Res(i, 6) = Res(i, 6) & "-" & tmp
      Else
        If Len(S(5)) > 4 Then Res(i, 7) = S(5)
      End If
      If Left(Res(i, 6), 2) = "HD" Then
        If InStr(1, Res(i, 6), "-") > 0 Then
          Res(i, 7) = Split(Res(i, 6), "-")(0)
          Res(i, 6) = Split(Res(i, 6), "-")(1)
        Else
          tmp = Res(i, 6)
          Res(i, 6) = Res(i, 7)
          Res(i, 7) = tmp
        End If
      End If
      If Len(S(6)) > 4 Then Res(i, 7) = S(6)
      For j = 1 To UBound(S)
        If Len(S(j)) < 5 And InStr(1, S(j), "HD") > 0 Then
          Res(i, 8) = S(j)
          If UBound(S) - j = 2 Then
            Res(i, 12) = Replace(S(j + 2), "CAM", "")
          Else
            Res(i, 12) = Split(S(j + 3), " ")(0)
            If Res(i, 12) = "CAM" Then Res(i, 12) = Split(S(j + 4), " ")(0)
            Res(i, 12) = Split(Res(i, 12), "-")(0)
             If Res(i, 12) = "CAM" Then
            a = 1
            End If
          End If
        End If
      Next j
    End If
  Next i
  Sheets("ProducInOutStock").Range("R11").Resize(UBound(sArr), 12) = Res
End Sub
Private Function LoaiSo(ByVal iStr As String) As String
  Dim n As Integer, j As Integer, tmp As String
  n = Len(iStr)
  For j = 1 To n
    If Not IsNumeric(Mid(iStr, j, 1)) Then tmp = tmp & Mid(iStr, j, 1)
  Next j
  LoaiSo = tmp
End Function
Quá tuyệt vời. Tiếc là em không hiểu gì về VBA. Thôi cứ copy của Thầy dùng vậy ạ.Cảm ơn Thầy!
 
Top Bottom