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