7

ピリオド、コンマ、スペース、ハイフン、アポストロフィを含むすべての非アルファ文字を削除するために、Excel で名前の列をスクラブする必要があります。

例:O'Malley-Smith, Tom, Jr.に変更OMALLEYSMITHTOMJR

クライアントは、これが Excel 関数である必要があります。それ以外の場合は、replaceAll("[^a-zA-Z]", "").toUpperCase(). SUBSTITUTEセルごとに1つしか利用できないように見える関数 の混乱全体の外でこれを行うための既製の関数のように見えるものを見つけることができないようです。

カスタム マクロの開発が必要な場合、私はそれほど流暢ではありません。

4

7 に答える 7

10

確かに SUBSTITUTE の混乱ですが、単一のセル内では可能です。たとえば、次のようになります。

=UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," ",""),",",""),"'",""),".",""),"-",""))   

もちろん、他の非アルファ文字をカバーするために「拡張」する必要があるかもしれません。

于 2015-03-19T16:31:20.143 に答える
10

私はしばらく前に同様のニーズがあり、うまく機能するものを見つけました.

Alt+F11 を押して、Visual Basic エディターを開きます。新しいモジュールを挿入し、次のコードを貼り付けます。

Function CleanCode(Rng As Range)
    Dim strTemp As String
    Dim n As Long

    For n = 1 To Len(Rng)
        Select Case Asc(Mid(UCase(Rng), n, 1))
            Case 48 To 57, 65 To 90
                strTemp = strTemp & Mid(UCase(Rng), n, 1)
        End Select
    Next
    CleanCode = strTemp
End Function

CleanCode は新しい関数になり、数式として使用できるようになりました。

したがって、操作したい文字列のあるセルの横にコピーするだけです=CleanCode(yourcell)

于 2015-03-19T16:39:05.803 に答える
2

別の VBA ソリューション

Sub RemoveCrap()
    Dim varRange As Range
    Dim varWorkRange As Range

    Set varWorkRange = Range("A1:A10")

    For Each varRange In varWorkRange
        varVal = ""
        For i = 1 To Len(varRange.Value)
            varTemp = Mid(varRange.Value, i, 1)
            If Not (varTemp Like "[a-z]" Or varTemp Like "[A-Z]") Then
                varStr = ""
            Else
                varStr = UCase(varTemp)
            End If
            varVal = varVal & varStr
        Next i
        varRange.Value = varVal
    Next
End Sub
于 2015-03-19T16:49:42.100 に答える