Cách xóa dấu phẩy thành khoảng trắng giữa các số (1 người xem)

Liên hệ QC

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

foureye2004

Thành viên mới
Tham gia
15/1/09
Bài viết
17
Được thích
1
Dear all,
em cần một hàm để thực hiện như sau:
Ô A1: "Vlan 81,89,700,702,600,800-805"

Yêu cầu bây giờ là làm sao đưa vào hàm Concanate (Nỗi chuỗi) của em để nó có thể ra như sau: "set interfaces family ethernet-switching vlan member [81 89 700 702 600 800 801 802 803 804 805]"

Lưu ý: em ko thể dùng công cụ Replace trong find được, vì nó sẽ ảnh hưởng tất cả bảng tính của em.

Cảm ơn mọi người rất nhiều và mong được sự hồi âm.
 
Lần chỉnh sửa cuối:
Dear all,
em cần một hàm để thực hiện như sau:
Ô A1: "Vlan 81,89,700,702,600,800-805"

Yêu cầu bây giờ là làm sao đưa vào hàm Concanate (Nỗi chuỗi) của em để nó có thể ra như sau: "set interfaces family ethernet-switching vlan member [81 89 700 702 600 800 801 802 803 804 805]"
.
Thử vầy xem:
PHP:
=SUBSTITUTE(SUBSTITUTE(A1,"Vlan ","Set interfaces family ethernet-switching vlan member ["),","," ")&"}"
Ngoài ra bạn nói rằng:
Lưu ý: em ko thể dùng công cụ Replace trong find được, vì nó sẽ ảnh hưởng tất cả bảng tính của em.
.
Tôi nghĩ không chính xác... Khi bạn Replace, trước đó bạn quét chọn vùng nào thì Replace chỉ có tác dụng trên vùng ấy thôi chứ, làm gì mà ảnh hưởng cả bảng tính
 
Dear all,
em cần một hàm để thực hiện như sau:
Ô A1: "Vlan 81,89,700,702,600,800-805"

Yêu cầu bây giờ là làm sao đưa vào hàm Concanate (Nỗi chuỗi) của em để nó có thể ra như sau: "set interfaces family ethernet-switching vlan member [81 89 700 702 600 800 801 802 803 804 805]"

Lưu ý: em ko thể dùng công cụ Replace trong find được, vì nó sẽ ảnh hưởng tất cả bảng tính của em.

Cảm ơn mọi người rất nhiều và mong được sự hồi âm.

Ô A1: "Vlan 81,89,700,702,600,800-805"
Ô B1: "set interfaces family ethernet-switching"
Ô C1:
PHP:
=B1&SUBSTITUTE(A1,","," ")
 
Cảm ơn 2 bác, em đã thử cách 2 bác thì cách nào cũng khả thi và chỉ cần sử đổi một xíu nữa là ok.
Nhưng còn vụ hiện chuỗi số liên tục nếu
A1: "800-805"
B2 sẽ là: "801 802 803 804 805".

Như vậy sẽ dùng hàm gì ạ em thật sự ko biết dùng VB.:(
 
Cảm ơn 2 bác, em đã thử cách 2 bác thì cách nào cũng khả thi và chỉ cần sử đổi một xíu nữa là ok.
Nhưng còn vụ hiện chuỗi số liên tục nếu
A1: "800-805"
B2 sẽ là: "801 802 803 804 805".
Như vậy sẽ dùng hàm gì ạ em thật sự ko biết dùng VB.:(
Cái này e rằng dùng công thức là bất khả thi ---> Khoảng cách giữa 2 số ít tí thì còn ráng ráng được, chứ nhiều quá (ví dụ 100-200) thì... bó tay
Nếu dùng VBA lập hàm tự tạo thì không có vấn đề
 
Vậy thì chỉ code VB cho em được ko ạ :).
Thanks bác nhiều lắm lắm.
 
Vậy thì chỉ code VB cho em được ko ạ :).
Thanks bác nhiều lắm lắm.
Làm tạm cho bạn với Function này:
PHP:
Function FillOrdNum(Text As String) As String
  Dim Tmp1, Tmp2, Text1 As String, Text2 As String
  On Error Resume Next
  Text = Trim(Text): Text1 = "": Text2 = Text
  If InStr(Text, "-") Then
    Text1 = Trim(Mid(Text, 1, InStrRev(Text, " ")))
    Text2 = Replace(Mid(Text, InStrRev(Text, " "), Len(Text)), " ", "")
    Tmp1 = Split(Text2, "-")
    Tmp2 = Evaluate("ROW(" & Tmp1(0) & ":" & Tmp1(1) & ")")
    Tmp2 = WorksheetFunction.Transpose(Tmp2)
  End If
  FillOrdNum = Text1 & " " & Join(Tmp2, " ")
End Function
Ví dụ ta có chuổi 800-805 thì FillOrdNum(800-805) sẽ cho kết quả 800 801 802 803 804 805
Áp dụng vào file của bạn:
Gõ chuổi Vlan 81,89,700,702,600,800-805 vào cell A1
Gõ công thức này vào cell B2:
PHP:
=SUBSTITUTE(SUBSTITUTE(FillOrdNum(SUBSTITUTE(A1,","," ")),"Vlan ","Set interfaces family ethernet-switching vlan member ["),","," ")&"]"
Lưu ý: 2 đầu dấu - nhất định không được chứa bất cứ khoảng trắng nào
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn test thu hàm sau:

Mã:
Function Taochuoi(Rg As Range) As String
Dim tmp, Mg, i
Set tmp = CreateObject("VBScript.RegExp")
tmp.Global = True
tmp.Pattern = "\D"
Mg = Split(Trim(tmp.Replace(Rg, " ")), " ")
For i = 0 To UBound(Mg)
Select Case Len(Mg(i))
Case Is = 1
Mg(i) = Mg(i) & "00"
Case Is = 2
Mg(i) = Left(Mg(i), 1) & "0" & Right(Mg(i), 1)
End Select
Next
Taochuoi = "set interfaces family ethernet-switching: " & Join(Mg, " ")
Set tmp = Nothing
End Function
 

File đính kèm

Ủa sao kỳ vậy anh:
Chuổi gốc = 81,89,700,702,600,800-805
Kết quả lại = 801 809 700 702 600 800 805
Lý ra phải vầy chứ: 81 89 700 702 600 800 801 802 803 804 805
mình hiểu sai ý mất rồi, nhưng copy tách dùng VBscrip của Ndu hơi bị ngon đấy chứ?
Gio thì mình hiểu rồi. cái dấu - là từ...đến...
 
Lần chỉnh sửa cuối:
Hàm của ndu chỉ có kết quả khi trong chuỗi có ít nhất 1 nhóm chuỗi có dấu "-" (800-805), nếu chuỗi không có như thế này 11,452,254,786 thì die
Ngoài ra, nếu nhóm có dấu "-" (800-805) nằm đầu như vầy 105-110,81,89 hoặc nằm giữa như vầy 81,89,211-215,700 thì cũng không ra kết quả.

Cải tiến hàm của ndu để có thể đạt kết quả:
- Với chuỗi gốc có, hoặc không có nhóm chuỗi có dấu "-"
- Với nhóm chuỗi có dấu "-" (800-805) ở vị trí bất kỳ như đầu, giữa, cuối của chuỗi gốc.
- Đồng thời tách được cả chuỗi trong đó có nhiều nhóm chuỗi có dấu "-" như 105-110,81,89,211-215,700,702,600,456-460
- Và kể cả khoảng trắng nằm búa xua (lỗi dữ liệu như vầy 81 ,,89, 211 -215,456 - 460).

PHP:
Function ListNum(Text As String) As String
  Dim Tmp1, Tmp2, Text1 As String, Text2 As String, i, iLeft, iRight, text3 As String
    Text = ",,," & Replace(Text, " ", "")
    If InStr(Text, "-") Then
        i = InStr(1, Text, "-")
        iLeft = InStr(i - 4, Text, ",")
        If InStr(i, Text, ",") Then
            iRight = InStr(i, Text, ",") - 1
        Else
            iRight = Len(Text)
        End If
        Text1 = Replace(Mid(Text, iLeft + 1, iRight - iLeft), ",", "")
        Tmp1 = Split(Text1, "-")
        Tmp2 = Evaluate("ROW(" & Tmp1(0) & ":" & Tmp1(1) & ")")
        Tmp2 = WorksheetFunction.Transpose(Tmp2)
        Text2 = Join(Tmp2, ",")
        text3 = Replace(Text, Text1, Text2)
        If InStr(1, text3, "-") Then text3 = ListNum(text3)
        ListNum = Application.Trim(Replace(text3, ",", " ")): Exit Function
    Else
        ListNum = Application.Trim(Replace(Text, ",", " "))
    End If

End Function
 

File đính kèm

Sửa 1 chút hàm trên để không bị lỗi khi trong chuỗi có các số nhỏ hơn 10 hoặc số lớn hơn 999

Vì dự trù cho số có 10 chữ số nên không dùng Row được mà phải dùng For Next.

PHP:
Function ListNum(Text As String) As String
  Dim Tmp1, Tmp2, Text1 As String, Text2 As String, i, j, iLeft, iRight, text3 As String
  Const iMax = 10
    Text = String(iMax, ",") & Replace(Replace(Text, " ", ""), ",", String(iMax, ","))
    If InStr(Text, "-") Then
        i = InStr(1, Text, "-")
        iLeft = InStr(i - iMax - 1, Text, ",")
        If InStr(i, Text, ",") Then
            iRight = InStr(i, Text, ",") - 1
        Else
            iRight = Len(Text)
        End If
        Text1 = Replace(Mid(Text, iLeft + 1, iRight - iLeft), ",", "")
        Tmp1 = Split(Text1, "-")
        ReDim Tmp2(Tmp1(1) - Tmp1(0) + 1)
        For j = Tmp1(0) To Tmp1(1)
            Tmp2(j - Tmp1(0)) = j
        Next
        Text2 = Join(Tmp2, ",")
        text3 = Replace(Replace(Text, Text1, Text2), String(iMax, ","), ",")
        If InStr(1, text3, "-") Then text3 = ListNum(text3)
        ListNum = Application.Trim(Replace(text3, ",", " ")): Exit Function
    Else
        ListNum = Application.Trim(Replace(Text, ",", " "))
    End If

End Function

Đặc điểm hàm ListNum này là dùng thuật toán gọi lại chính nó:

If InStr(1, text3, "-") Then text3 = ListNum(text3)

Xin tải lại file.
 

File đính kèm

Hôm nay mò mẫm đọc cái CreateObject("VBScript.RegExp"). Lấy ra ứng dụng thử trường hợp này xem sao.
PHP:
Function List(Str As String) As String
Dim Obj As Variant, oMatch As Variant, oMatches As Variant
    Str = Replace("," & Replace(Str, " ", "") & ",", ",", ",,")
    Set Obj = CreateObject("VBScript.RegExp")
    Obj.Global = True
    Obj.Pattern = ",[0-9]+-[0-9]+,"
    Set oMatches = Obj.Execute(Str)
    For Each oMatch In oMatches
        Str = Replace(Str, oMatch.Value, "," & CToL(Replace(oMatch.Value, ",", "")) & ",")
    Next
    List = Application.Trim(Replace(Str, ",", " "))
End Function
PHP:
Private Function CToL(Str As String) As String
    CToL = Join(WorksheetFunction.Transpose(Evaluate("=" & (Left(Str, InStr(Str, "-") - 1) - 1) & "+ROW(1:" & (Abs(Evaluate(Str)) + 1) & ")")))
End Function
Mượn tạm file giả lập của Bác ptm0412 nhé
 

File đính kèm

Trước hết, em chân thành cảm ơn các bác đã giúp đỡ em tận tình.

Em đã mở một số file lên xem và thấy đúng như mong muốn, em cảm ơn rất nhiều.

Nhưng thật sự em lại ko biết dùng nó vào file excel khác như thế nào ạ.

Mong các bác giúp đỡ em để em bỏ vào file excel khác. Thật sự em mù về cái này.
 
Chào các bác,
Em có vấn đề cần hỏi là, dữ liệu xuất từ AutoCAD ra Excel có dấu đơn phía sau như vậy: 440.000'
Em muốn hỏi là có lệnh nào trong Excel để xóa dấu đơn phía sau dãy số không?
 
Chào các bác,
Em có vấn đề cần hỏi là, dữ liệu xuất từ AutoCAD ra Excel có dấu đơn phía sau như vậy: 440.000'
Em muốn hỏi là có lệnh nào trong Excel để xóa dấu đơn phía sau dãy số không?
Dùng Replace (Ctrl+H) thay thế 1 loạt dấu ' thành khoảng trắng
 
Web KT

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

Back
Top Bottom