4

「XXXX-000-000-000」の形式でセル値を操作しています。

  • 最初のハイフンより前のすべてを削除する必要があります。
  • 文字列の残りの部分は、ハイフンと余分なゼロを削除して、整数に減らす必要があります。

正しい場所にゼロを保持するのに問題があります。

  • AD12-002-020-34 次のようにする必要があります: 2-20-34
  • CA1-002-101-001 次のようにする必要があります: 2-101-1
  • AD12-002-020-10 次のようにする必要があります: 2-20-10

例えば:

dim ir as range

ir = "AD12-002-020-100"

ir1 = InStr(ir, "-")
ir2 = InStrRev(ir, "-")
ir.Offset(0, 1) = Mid(ir, ir1 + 1, ir2 - ir1 + 3)

それは私に与える:002-020-100

提案?前もって感謝します!

4

7 に答える 7

15

検討:

Sub dural()
    Dim s As String
    s = "AD12-002-020-34"
    s = Replace(s, "-0", "-")
    s = Replace(s, "-0", "-")
    ary = Split(s, "-")
    ary(0) = ""
    s = Mid(Join(ary, "-"), 2)
    MsgBox s
End Sub
于 2013-09-26T14:36:09.383 に答える
3

のアプローチ

Sub TestCleanNames()
   Debug.Print CleanString("AD12-002-020-34")
   Debug.Print CleanString("CA1-002-101-001")
   Debug.Print CleanString("AD12-002-020-10")
End Sub

Function CleanString(strIn As String) As String
    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
      'remove first portion
      .Pattern = "(.+?)-"
      CleanString = .Replace(strIn, vbNullString)
      .Global = True
      'trim leasfing zeroes
      .Pattern = "(\-|^)(0)+([1-9])"
      CleanString = .Replace(CleanString, "$1$3")
    End With
End Function
于 2013-10-11T14:34:13.030 に答える
1

私はこれでリングに帽子をかぶると思いました。すべてのバージョンは、変換されるセルがセル A1 から始まる列 A にあると想定していることに注意してください。

マクロとして:

Sub tgr()

    Dim arrResults() As String
    Dim varText As Variant
    Dim varPart As Variant
    Dim ResultIndex As Long

    With Range("A1", Cells(Rows.Count, "A").End(xlUp))
        ReDim arrResults(1 To .Rows.Count, 1 To 1)
        For Each varText In .Value
            ResultIndex = ResultIndex + 1
            For Each varPart In Split(Mid(varText, InStr(varText, "-") + 1), "-")
                arrResults(ResultIndex, 1) = arrResults(ResultIndex, 1) & "-" & Val(varPart)
            Next varPart
            arrResults(ResultIndex, 1) = Mid(arrResults(ResultIndex, 1), 2)
        Next varText
        .Value = arrResults
    End With

End Sub

UDF として:

Function tgrUDF(sText As String) As String

    Dim varPart As Variant

    For Each varPart In Split(Mid(sText, InStr(sText, "-") + 1), "-")
        tgrUDF = tgrUDF & "-" & Val(varPart)
    Next varPart

    tgrUDF = Mid(tgrUDF, 2)

End Function

式として:

=--MID(SUBSTITUTE(A1,"-",REPT(" ",99)),99,99)&"-"&--MID(SUBSTITUTE(A1,"-",REPT(" ",99) ),99*2,99)&"-"&--MID(SUBSTITUTE(A1,"-",REPT(" ",99)),99*3,99)

于 2013-09-26T15:58:55.597 に答える
1
Sub x()    
    'Technically, you don't have to declare variables, but it prevents typos:
    Dim ir As String
    Dim ir1 As String
    Dim ir2 As String
    Dim ir3 As String
    ir = "AD12-002-020-100"

    'First, get rid of the first 5 characters:
    ir = Right(ir, Len(ir) - 5)

    'Isolate each section. Convert to Int to get rid of leading zeros:
    ir1 = CInt(Left(ir, 3))
    ir2 = CInt(Right(Left(ir, 7), 3))
    ir3 = CInt(Right(ir, 3))

    'Return the result:
    MsgBox ir1 & "-" & ir2 & "-" & ir3
End Sub
于 2013-09-26T14:40:28.280 に答える