Learning Note

できるようになったことを記録しています

配列を多次元配列に変換する

配列データを多次元配列に変換するための関数。

多次元配列は途中で列数を増やすことができないため、事前に設定された列数より取り込む要素が多い場合は処理を終了するようにした。


使用例

Sub Main()
    Dim lineTxt As Variant
    lineTxt = ImportTxt("C:\bin\test.txt")
    
    Const txtCol = 3 '多次元配列の最大列数
    
    Dim multiTxt As Variant
    multiTxt = MultiDimention(lineTxt, txtCol - 1, ",")
End Sub

先日書いたテキストファイルを1行ずつ配列に取り込む関数で取り込んだ"lineTxt"を多次元配列に変換する流れ。前述の通り多次元配列の最大列数はこのMainで記載している。

konifug.hatenablog.com

必要な最大列数を調べる関数があればもっと汎用的になるか・・・。

配列から不要文字を削除して返す

関数を書くほどでもないかもしれないが、使用頻度はそこそこあるので作ってみた。


使用例

Sub Main()
    Dim testAry() As Variant: ReDim testAry(2)
    
    testAry(0) = "1,1"
    testAry(1) = "2,2"
    testAry(2) = "3,3"

    testAry = RemoveChar(testAry, ",")
End Sub

配列内のデータからカンマを削除して返す処理。

処理後は testAry(o) = "11", testAry(1) = "22", testAry(2) = "33" となる。

指定したフォルダ以下の指定した種別ファイルパスを取得する

指定したフォルダの下位フォルダも再帰処理で検索対象とする関数。

ポイントはStatic変数。再帰処理でDimを使うと消えてしまうので。


使用例

Sub Main()
    Dim filePath As Variant
    filePath = RecursionFile("C:\bin", "*.xlsx")
End Sub

指定したフォルダから指定した種別のファイル名を取得する

Dir関数で指定フォルダの指定した種別のファイル名を取得する関数。

配列の最後にブランクのデータが出来てしまうため、Loop終わりでもReDimしている。もっとスマートなやり方がないものか。


使用例

Sub Main()
    Dim fileName As Variant
    fileName = SearchFile("C:\bin\", "*.txt")
End Sub