EXCEL マクロファイル名をソートしてVarType配列にいれる。


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

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:
  • 終了:2010/01/13 12:47:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969

ポイント80pt

****の部分がファイル毎に違う場合は次のようにしてください。

>|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

||<

http://q.hatena.ne.jp/

その他の回答2件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント27pt

文字列をソートするような関数を作ればいいです。

>|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

||<

http://q.hatena.ne.jp/

id:heke2mee No.2

回答回数162ベストアンサー獲得回数43

ポイント2pt

VBAでのソート方法はこちらのサイトが参考になると思います

http://chotosplus.sakura.ne.jp/wordpress/2009/07/16/excel-vba%E3...

id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント80pt

****の部分がファイル毎に違う場合は次のようにしてください。

>|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

||<

http://q.hatena.ne.jp/

  • id:SALINGER
    ちょっとミス。
    ****の部分は固定じゃなかったんですね。
  • id:SALINGER
    投稿するときのプレビューで見たときははてな記法がちゃんと適用されてたのですが、
    何故か適用されず見づらくなってしまって申し訳ありません。
    要は並べ替える関数(StrSort)を作ってvFilesを渡せばいいのではということです。
  • id:hawk007
    SALINGER様

    いつもお世話になっております。
    ****の部分がファイル毎に違う場合は次のようにしてくださいの
    方のマクロの
    For i = 1 To UBound(vFiles)
    Debug.Print vFiles(i)
    Next
    をコメントにし、移植してうまく動作しました。
    ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません