Nhờ giúp đỡ lấy ký tự trong một chuỗi (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

pinklove

Thành viên thường trực
Tham gia
21/1/08
Bài viết
336
Được thích
42
Em có chuỗi ký tự sau:
BSC_540M_NAN(BTS_40:NGHI-YEN-NLC_NAN)
Em muốn tách NGHI-YEN-NLC_NAN đã dùng thế này:
= MID(A1, InStr(A1,":")+1)

Nhưng với chuỗi thế này:
RNC_1019H_HNI(N2358_NGHI-YEN-NLC_NAN)
MBSC_1161H_HNI(EG2393_X6-NGHI-VAN-NLC_NAN)
MSND_1126G_HNI(BF3881_X10-NGHI-MY-NLC_NAN)

em muốn lấy chuỗi ký tự từ phía sau dấu _ đầu tiên trong dấu ngoặc (VD: NGHI-YEN-NLC_NAN; X6-NGHI-VAN-NLC_NAN;X10-NGHI-MY-NLC_NAN) thì em chả biết làm. Xin nhờ tư vấn giúp
 
Bạn có thể dùng CT này:

Mã:
=SUBSTITUTE(MID(A1,FIND("_",A1,FIND("(",A1))+1,1000),")","")
 
Upvote 0
Mình đưa vào code của mình thì nó báo lỗi lúc ấn nút IMPORT, nhờ các bạn xem giúp:File test, cần import file SRAN vào.
 

File đính kèm

Upvote 0
Bạn sửa lại Code thế này:
Mã:
Public Sub ImportingSRAN()
  Dim sArr(), dArr(), vFile
  Dim wkb As Workbook, wks As Worksheet, rng As Range
  Dim sFile As String, tmp As String
  Dim i As Long
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel Files, *.xls*")
    If TypeName(vFile) = "String" Then
    sFile = CStr(vFile)
    Application.ScreenUpdating = False
    Set wkb = Workbooks.Open(sFile)
    Set wks = wkb.Worksheets("Sheet1")
    sArr = wks.Range("K14", wks.Range("F60000").End(xlUp)).Value
    wkb.Close False
    ReDim dArr(1 To UBound(sArr, 1), 1 To 5)
    For i = 1 To UBound(sArr, 1)
      'tmp = Mid(sArr(i, 1), InStr(sArr(i, 1), ":") + 1)
      tmp = Replace(Mid(sArr(i, 1), InStr("_", sArr(i, 1), InStr("(", sArr(i, 1))) + 1, 1000), ")", "")
      dArr(i, 1) = Left(tmp, Len(tmp) - 5)
      dArr(i, 2) = TimeValue(Right(sArr(i, 5), 8))
      dArr(i, 3) = DateSerial(Mid(sArr(i, 5), 7, 4), Mid(sArr(i, 5), 4, 2), Left(sArr(i, 5), 2))
      If sArr(i, 3) <> Empty Then
        dArr(i, 4) = TimeValue(Right(sArr(i, 6), 8))
        dArr(i, 5) = DateSerial(Mid(sArr(i, 6), 7, 4), Mid(sArr(i, 6), 4, 2), Left(sArr(i, 6), 2))
      End If
    Next i
    Application.ScreenUpdating = True
    On Error Resume Next
    'Set rng = Application.InputBox("Chon noi de dat", "Import du lieu", Type:=8)
    Set rng = Range("B65536").End(xlUp).Offset(1)
    On Error GoTo 0
    If Not rng Is Nothing Then
      With rng.Resize(i - 1, 5)
        .Value = dArr
        Union(.Offset(, 1).Resize(, 1), .Offset(, 3).Resize(, 1)).NumberFormat = "hh:mm"
        Union(.Offset(, 2).Resize(, 1), .Offset(, 4).Resize(, 1)).NumberFormat = "dd/mm/yyyy"
      End With
    End If
  End If


  End Sub
 
Upvote 0
Bạn sửa lại Code thế này:
Mã:
Public Sub ImportingSRAN()
  Dim sArr(), dArr(), vFile
  Dim wkb As Workbook, wks As Worksheet, rng As Range
  Dim sFile As String, tmp As String
  Dim i As Long
  On Error Resume Next
  vFile = Application.GetOpenFilename("Excel Files, *.xls*")
    If TypeName(vFile) = "String" Then
    sFile = CStr(vFile)
    Application.ScreenUpdating = False
    Set wkb = Workbooks.Open(sFile)
    Set wks = wkb.Worksheets("Sheet1")
    sArr = wks.Range("K14", wks.Range("F60000").End(xlUp)).Value
    wkb.Close False
    ReDim dArr(1 To UBound(sArr, 1), 1 To 5)
    For i = 1 To UBound(sArr, 1)
      'tmp = Mid(sArr(i, 1), InStr(sArr(i, 1), ":") + 1)
      tmp = Replace(Mid(sArr(i, 1), InStr("_", sArr(i, 1), InStr("(", sArr(i, 1))) + 1, 1000), ")", "")
      dArr(i, 1) = Left(tmp, Len(tmp) - 5)
      dArr(i, 2) = TimeValue(Right(sArr(i, 5), 8))
      dArr(i, 3) = DateSerial(Mid(sArr(i, 5), 7, 4), Mid(sArr(i, 5), 4, 2), Left(sArr(i, 5), 2))
      If sArr(i, 3) <> Empty Then
        dArr(i, 4) = TimeValue(Right(sArr(i, 6), 8))
        dArr(i, 5) = DateSerial(Mid(sArr(i, 6), 7, 4), Mid(sArr(i, 6), 4, 2), Left(sArr(i, 6), 2))
      End If
    Next i
    Application.ScreenUpdating = True
    On Error Resume Next
    'Set rng = Application.InputBox("Chon noi de dat", "Import du lieu", Type:=8)
    Set rng = Range("B65536").End(xlUp).Offset(1)
    On Error GoTo 0
    If Not rng Is Nothing Then
      With rng.Resize(i - 1, 5)
        .Value = dArr
        Union(.Offset(, 1).Resize(, 1), .Offset(, 3).Resize(, 1)).NumberFormat = "hh:mm"
        Union(.Offset(, 2).Resize(, 1), .Offset(, 4).Resize(, 1)).NumberFormat = "dd/mm/yyyy"
      End With
    End If
  End If


  End Sub
Không được bạn ạ. Cột B (Cột tên cần sửa ấy) không có dữ liệu.
 
Upvote 0
Không được bạn ạ. Cột B (Cột tên cần sửa ấy) không có dữ liệu.

Mình thấy báo lỗi nên chỉ thay những hàm của Excel thành những hàm của VBA cho đúng cú pháp thôi, cái khác thì mình

không biết.

Bạn chờ ngwoif khác giúp đỡ nhé
 
Upvote 0
Nhờ các anh em giúp đỡ cho mình với ạ.
Bạn muốn giúp thì bạn nên nêu rõ yêu cầu của bạn, chứ đọc code của bạn để hiểu mất nhiều thời gian và chưa chắc code đó đã tối ưu.
Note: Cái này có liên quan với #1 ko vậy ta?
 
Upvote 0
Bạn muốn giúp thì bạn nên nêu rõ yêu cầu của bạn, chứ đọc code của bạn để hiểu mất nhiều thời gian và chưa chắc code đó đã tối ưu.
Note: Cái này có liên quan với #1 ko vậy ta?
Có bạn ạ. Mình muốn Import lấy một số cột từ file SRAN vào file test của mình. Cụ thể là cột F,J,K. Cột J và K mình lấy được và tách ra được thành các cột C,D,E,F của file test rồi, nhưng cột F mình muốn lấy tên theo #1 để đưa vào cột B của file test nhưng chưa được.
Cụ thể là vậy, nhờ các bạn giúp với.
P/S: Code này mình cũng được giúp đỡ, không phải mình viết nên mình cố gắng mà ko sửa được.
 
Upvote 0
Có bạn ạ. Mình muốn Import lấy một số cột từ file SRAN vào file test của mình. Cụ thể là cột F,J,K. Cột J và K mình lấy được và tách ra được thành các cột C,D,E,F của file test rồi, nhưng cột F mình muốn lấy tên theo #1 để đưa vào cột B của file test nhưng chưa được.
Cụ thể là vậy, nhờ các bạn giúp với.
P/S: Code này mình cũng được giúp đỡ, không phải mình viết nên mình cố gắng mà ko sửa được.

Bài # 1 bạn chỉ đưa ra 2 TH, vậy trong trường hợp không có : hoặc ( thì làm thế nào. có trường hợp có ( nhưng không có _ đằng sau ( thì làm sao?....
Bạn phải nêu rõ cụ thể hơn
 
Upvote 0
Bài # 1 bạn chỉ đưa ra 2 TH, vậy trong trường hợp không có : hoặc ( thì làm thế nào. có trường hợp có ( nhưng không có _ đằng sau ( thì làm sao?....
Bạn phải nêu rõ cụ thể hơn
Mình chỉ cần trường hợp có "(" thôi bạn ạ, vì kiểu dữ liệu của mình chung như thế, chỉ có số các ký tự trước và sau "(" không giống nhau thôi. Sau "(" bao giờ cũng có _ bạn ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình chỉ cần trường hợp có "(" thôi bạn ạ, vì kiểu dữ liệu của mình chung như thế, chỉ có số các ký tự trước và sau "(" không giống nhau thôi. Sau "(" bao giờ cũng có _ bạn ạ.
Ý bạn là chỉ lấy những dòng có "(" ? và sẽ lấy những giá trị sau dáu "_" đầu tiên? Vậy TH này thì ntn?
N0850_NGHI-HOA-NLC_NAN(CABINET NO.=0, SUBRACK NO.=83, SLOT NO.=0,RRU3)
 
Upvote 0
Ý bạn là chỉ lấy những dòng có "(" ? và sẽ lấy những giá trị sau dáu "_" đầu tiên? Vậy TH này thì ntn?
N0850_NGHI-HOA-NLC_NAN(CABINET NO.=0, SUBRACK NO.=83, SLOT NO.=0,RRU3)
Ừ nhỉ? Bạn nhắc mới nhớ, đúng ra phải bỏ phần phía sau từ _NAN trở đi. Xin lỗi các bạn. Vì đây là kiểu dữ liệu mới nên mình chưa xem kỹ. Có chút nhầm lẫn. Để mình xem lại rồi nhờ các bạn giúp đỡ tiếp.
Cảm ơn sự nhiệt tình của các bạn.
 
Upvote 0
Ừ nhỉ? Bạn nhắc mới nhớ, đúng ra phải bỏ phần phía sau từ _NAN trở đi. Xin lỗi các bạn. Vì đây là kiểu dữ liệu mới nên mình chưa xem kỹ. Có chút nhầm lẫn. Để mình xem lại rồi nhờ các bạn giúp đỡ tiếp.
Cảm ơn sự nhiệt tình của các bạn.
Nếu bỏ từ _NAN trở đi, bạn dùng CT này:
Mã:
=REPLACE(A1,FIND("_NAN",A1),1000,"")
 
Upvote 0
Ừ nhỉ? Bạn nhắc mới nhớ, đúng ra phải bỏ phần phía sau từ _NAN trở đi. Xin lỗi các bạn. Vì đây là kiểu dữ liệu mới nên mình chưa xem kỹ. Có chút nhầm lẫn. Để mình xem lại rồi nhờ các bạn giúp đỡ tiếp.
Cảm ơn sự nhiệt tình của các bạn.
Mới coi file của bạn, bạn dùng CT này cho phù hợp:
Mã:
=IF(COUNTIF(A1,"*Name*"),MID(A1,FIND("Name",A1)+5,FIND("_NAN",A1,50)-FIND("Name",A1)-5),REPLACE(A1,FIND("_NAN",A1),1000,""))
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom