kiyo_hikoのブログ

メモ+日記?

VBAで文字列を1文字ずつに分解する、あと差分を取る

例えば、

文字列1がアエンデ、
文字列2がースデエイトアナロン

として、「ースイトナロ」を取り出したい場合。


まず文字列1をほぐして、ループ内でreplaceを使って結果を取り出す感じで考えた。

文字列を1文字ずつに分解する

文字列をほぐすのに、Perlよろしくreplaceのデリミター引数に空っぽの文字列を渡したら、これは失敗。仕方がないからlenとmidを組み合わせた。


こうなった。

Public Sub test()
    Dim s As String: s = "ウホホーイ"
    Dim cs As New Collection
    Dim i As Long
    
    For i = 1 To Len(s)
        cs.Add Mid(s, i, 1)
    Next
    
    For i = 1 To cs.Count
        Debug.Print cs.Item(i)
    Next
End Sub

メモっておくとJavaならString.toCharArray使う。

2つの文字列の差分を取る

こんな感じで。

Public Function stringDifference(ByRef remover As String, ByVal removee As String) As String
    Dim i
    For i = 1 To Len(remover)
        removee = Replace(removee, Mid(remover, i, 1), "")
    Next
    stringDifference = removee
End Function

おまけ

アエンデとは:

アエンデ隕石(アエンデいんせき、Allende meteorite)は1969年2月8日の朝、メキシコに落下した隕石雨である。

http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%A8%E3%83%B3%E3%83%87%E9%9A%95%E7%9F%B3