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

Liên hệ QC

LaptopPhongLinh

Thành viên mới
Tham gia
18/1/19
Bài viết
8
Được thích
0
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

  • BáoCáoExcelHien.rar
    23.5 KB · Đọc: 33
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

  • BáoCáoExcelHien.xls
    99.5 KB · Đọc: 33
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á!
 
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ể ạ"
 
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.
 
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).
 
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:
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).
 
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 ạ.
 
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.
 
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

  • BáoCáoExcelHien.xls
    255 KB · Đọc: 11
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

  • BáoCáoExcelHien.xls
    142.5 KB · Đọc: 12
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!
 
Web KT
Back
Top Bottom