Application.GetOpenFilenameで複数のCSVファイルの読み込みをする際に、
ファイル名をソートして VarType(vFiles)に入れてその後の処理に渡したいのですが、
どの様にマクロを作成したらよいかご教授お願い申し上げます。
ソートしたいCSVのファイル名は、以下の仕様です。
****CLS01.CSV
****CLS02.CSV
・
・
****CLS50.CSV
注:****部分は可変長で最大51文字、最小で6文字です。
Sub cmdEnter_Click()
vFiles = Application.GetOpenFilename("検査結果CSVファイル,*.csv", , _
"集計したい検査結果のファイルを指定して下さい。(複数選択可)", , True)
If VarType(vFiles) <> vbVariant + vbArray Then
Exit Sub 'キャンセル
’”ここでファイル名をソート?”
end if
end sub
****の部分がファイル毎に違う場合は次のようにしてください。
>|vb|
'”ここでファイル名をソート?”
Call StrSort(vFiles)
For i = 1 To UBound(vFiles)
Debug.Print vFiles(i)
Next
End Sub
Sub StrSort(h As Variant)
Dim i As Integer
Dim j As Integer
Dim s As String
For i = LBound(h) To UBound(h) - 1
For j = i + 1 To UBound(h)
If StrComp(Right(h(i), 6), Right(h(j), 6), vbTextCompare) > 0 Then
s = h(i)
h(i) = h(j)
h(j) = s
End If
Next
Next
End Sub
||<
文字列をソートするような関数を作ればいいです。
>|vb|
'”ここでファイル名をソート?”
Call StrSort(vFiles)
'テスト
For i = 1 To UBound(vFiles)
Debug.Print vFiles(i)
Next
End Sub
Sub StrSort(h As Variant)
Dim i As Integer
Dim j As Integer
Dim s As String
For i = LBound(h) To UBound(h) - 1
For j = i + 1 To UBound(h)
If StrComp(h(i), h(j), vbTextCompare) > 0 Then
s = h(i)
h(i) = h(j)
h(j) = s
End If
Next
Next
End Sub
||<
VBAでのソート方法はこちらのサイトが参考になると思います
http://chotosplus.sakura.ne.jp/wordpress/2009/07/16/excel-vba%E3...
****の部分がファイル毎に違う場合は次のようにしてください。
>|vb|
'”ここでファイル名をソート?”
Call StrSort(vFiles)
For i = 1 To UBound(vFiles)
Debug.Print vFiles(i)
Next
End Sub
Sub StrSort(h As Variant)
Dim i As Integer
Dim j As Integer
Dim s As String
For i = LBound(h) To UBound(h) - 1
For j = i + 1 To UBound(h)
If StrComp(Right(h(i), 6), Right(h(j), 6), vbTextCompare) > 0 Then
s = h(i)
h(i) = h(j)
h(j) = s
End If
Next
Next
End Sub
||<
コメント(3件)
****の部分は固定じゃなかったんですね。
何故か適用されず見づらくなってしまって申し訳ありません。
要は並べ替える関数(StrSort)を作ってvFilesを渡せばいいのではということです。
いつもお世話になっております。
****の部分がファイル毎に違う場合は次のようにしてくださいの
方のマクロの
For i = 1 To UBound(vFiles)
Debug.Print vFiles(i)
Next
をコメントにし、移植してうまく動作しました。
ありがとうございます。