1

私が働いている場所では、損傷のある車両のリストを保管しています。これらの損傷コードにはいくつかのバリエーションがあります。Excel で VBA スクリプトをセットアップして、正しい書式設定でセルの内容を自動変更したいと考えていますが、実際には VBA スクリプトを使用しておらず、Excel データ オブジェクトが混乱を招きます。

ここに私が望むもののいくつかの例があります

06071 – VBA Function – 06.07.1
031211 – VBA Function- 03.12.1(1)
0409237-VBA Function – 04.09.2(3,7)
040912 030713 –VBA Function – 04.09.1(2) 03.07.1(3) (some vehicles have multiple damages)

基本的に、長さが 5 を超える数値は、6 番目以降の数値をコンマで区切って括弧に入れます。

これは、他のほぼすべての言語で行うことができます。それは、問題が次々と発生しているすべてのランダムな Excel のものだけです。

何を試しても問題ないようです。過去に進歩する前にコードがバグります

Dim test
test = Worksheets(“Sheet1”).Range(“A:A”).Value
Worksheets(“Sheet2”).Range(“B:B”).Value=test

どのように呼び出しても機能しない関数を作成しようとしました。これらの数値の基本的な書式設定ができれば、おそらくそこから理解できるでしょう。

皆さんが私に与えることができる助けをありがとう

4

3 に答える 3

2

UDF (ユーザー定義関数) を使用してこれを行うことができます。 VBA の新しいモジュールに次のコードを配置します。

Function ConvertIt(rng As Range) As String
    Dim varStr As Variant
    Dim strSource As String, strResult As String
    Dim i As Integer

    For Each varStr In Split(Trim(rng.Value), " ")
        strSource = CStr(varStr)
        strResult = strResult & _
            Mid(strSource, 1, 2) & "." & _
            Mid(strSource, 3, 2) & "." & _
            Mid(strSource, 5, 1)
        If Len(strSource) > 5 Then
            strResult = strResult & "("
            For i = 6 To Len(strSource)
                strResult = strResult & Mid(strSource, i, 1) & ","
            Next i
            strResult = Left(strResult, Len(strResult) - 1) & ")"
        End If
        strResult = strResult & " "
    Next
    ConvertIt = Left(strResult, Len(strResult) - 1)
End Function

データがワークシートの列 A にあると仮定して、この式を B2: に配置し=ConvertIt(A2)、それをコピーします。終わり!

セルを一度に変換してソースを置き換えたい場合は、次のコードを使用します。

Sub ConvertAll()
    Dim rng As Range
    For Each rng In Range("A1:A100")
        rng.Value = ConvertIt(rng)
    Next
End Sub
于 2013-10-30T21:18:54.193 に答える
1

簡単にテスト済み:

Function FormatStuff(v)
Dim i As Long, c As String, v2 As String, num As String
Dim num2 As String, x As Long

    v2 = v
    v = v & " "
            For i = 1 To Len(v)
        c = Mid(v, i, 1)
        If c Like "#" Then
            num = num & c
        Else
            If num <> "" And Len(num) >= 5 Then
                num2 = Left(num, 2) & "." & Mid(num, 3, 2) & _
                       "." & Mid(num, 5,1)

                If Len(num) > 5 Then
                    num2 = num2 & "("
                    For x = 6 To Len(num)
                        num2 = num2 & IIf(x > 6, ",", "") & Mid(num, x, 1)
                    Next x
                    num2 = num2 & ")"
                End If

                v2 = Replace(v2, num, num2)
            End If
            num = ""
        End If
    Next i
    FormatStuff = v2
End Function
于 2013-10-30T21:20:45.633 に答える