RunningCSharp

MS系開発者による、雑多な記事。記事は所属企業とは関係のない、個人の見解です。

VBA UTF-8のテキストファイルをソートして出力する

任意のテキストファイル(UTF-8)の内容を行単位で昇順ソートし、元のファイルに書き戻すコード例。

Public Sub SortText()

    Dim strarr() As String
    Dim strall As String
    'ファイル名、任意の内容を指定
    Dim filename As String: filename = "filepath(ex:C:\test\testflie.txt)"
    Dim strsave As Variant
    
    'ファイル読み込み(UTF-8はADODB.Streamを使うほかなさそう)
    Dim adodb As Object: Set adodb = CreateObject("ADODB.Stream")
    adodb.Charset = "UTF-8"
    adodb.Open
    adodb.LoadFromFile filename
    strall = adodb.ReadText
    adodb.Close
    
    '以下は対象ファイルの改行がLFの例。CRLFの場合はvbCrLfを使用する。
    strarr = Split(strall, vbLf)
    'ソート
    SortArray strarr
    '保存
    adodb.Open
    For Each strsave In strarr
        adodb.WriteText strsave & vbLf, 0
    Next
    adodb.SaveToFile filename, 2
    adodb.Close

End Sub
'配列引数arrのソートを実施
Private Sub SortArray(ByRef arr() As String)
    Dim arrCount As Integer
    Dim sortCount As Integer
    Dim strBuf As String
    
    For arrCount = 0 To UBound(arr)
        For sortCount = arrCount + 1 To UBound(arr)
            If arr(arrCount) > arr(sortCount) Then
            strBuf = arr(arrCount)
            arr(arrCount) = arr(sortCount)
            arr(sortCount) = strBuf
            End If
        Next sortCount
    Next arrCount
End Sub

下記のようなファイルを指定し実行すると、

c
d
f
3
1
ぬ
5
@

下記のようにソートされる。

@
1
3
5
c
d
f
ぬ