指定範囲の文字列入れ替え(閑話休題)

先日、ListViewコントロールを使ってあれこれしようと考えたが、結局上手くいかなかった。そこでこのネタは、とりあえずお蔵入り。
f:id:Infoment:20190425225546p:plain
閑話休題、先日作成したTextBoxClassで遊んでみたので、紹介する。

今回作成したのは、↓ こちら。

Sub ExchangeStrings()
    Dim TBC As TextboxClass
    Set TBC = New TextboxClass
    
    Dim Col As Collection
    Set Col = New Collection
    Dim r As Range
        For Each r In Selection
            Col.Add r
        Next
    
    Dim i As Long
    Dim iMax As Long
        iMax = Col.Count / 2
    Dim myVerticalAlignment As Long
    Dim myHorizontalAlignment As Long
    
        For i = 1 To iMax
            If Col.Item(i).Value <> vbNullString Or Col.Item(i + iMax).Value <> vbNullString Then
                Set TBC.TargetRange = Union(Col.Item(i), Col.Item(i + iMax))
                myVerticalAlignment = Selection.Item(i).VerticalAlignment
                myHorizontalAlignment = Selection.Item(i).HorizontalAlignment
                TBC.ExchangeString
                TBC.TargetRange.VerticalAlignment = myVerticalAlignment
                TBC.TargetRange.HorizontalAlignment = myHorizontalAlignment
            End If
        Next
End Sub

選択範囲の文字列を入れ替えるマクロだ。ただ入れ替えるだけだと面白くないので、入れ替えの様子を見える化している。難点は以下の二つ。

  1. 数が多いと、面白さより「待ちの苛立ち」が募るかも。
  2. 入れ替える範囲を正しく選択しないと、正しい結果が得られない。

試してみると、こんな感じだ。
f:id:Infoment:20190425225144g:plain

お察しの通り、見ての通り、実用性は殆どない。
まあ、お遊びということで。

参考まで。