• ベストアンサー

(VBA) 配列の文字列を昇順で並べ替えたい

タイトルの通り、配列に格納したファイル名を昇順に並べ替えたいのですが、期待通りに動作しません。 内部コード(ユニコード?)順には並んでいるようですが、エクスプローラの名前順と同等にはなりません。 どのようにしたら、配列のファイル名をエクスプローラと同じように並べ替えできますか? (テストに使用したコード) Public Sub Test1() Dim FileNames() As String Dim WSH As Object Dim MyPathName As String Dim MyFileName As String Dim i As Integer Dim j As Integer '処理対象フォルダを指定 Set WSH = CreateObject("WScript.Shell") MyPathName = WSH.SpecialFolders("MyDocuments") Set WSH = Nothing i = 0 MyFileName = Dir(MyPathName & "\" & "*.*") If MyFileName = "" Then MsgBox "対象ファイルが1つも見つかりません。", , "処理終了" Exit Sub End If 'ファイル一覧を配列に格納 Do Until MyFileName = "" i = i + 1 ReDim Preserve FileNames(1 To i) FileNames(i) = MyFileName MyFileName = Dir Loop '配列を並べ替える For i = 1 To UBound(FileNames) - 1 For j = i To UBound(FileNames) If FileNames(i) > FileNames(j) Then MyFileName = FileNames(i) FileNames(i) = FileNames(j) FileNames(j) = MyFileName End If Next j Next i End Sub ※以降の処理は、Excel で処理するか Access で処理するかまだ決めていません。  (投稿文字数の関係で詳細は省略)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

文字列の比較に StrComp を使うとか

GreatDragon
質問者

お礼

ご回答ありがとうございます。 StrComp 関数を利用して期待通りに動作しました。 ※この関数は、Access クエリで利用したことがあったのですが  忘れていました。 何かありましたら、またよろしくお願いします。

その他の回答 (1)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

モジュールの先頭に Option Compare Text を記述してみたら。 他に文字列の比較をしているところがあったら そちらも影響を受けてしまいますが。

GreatDragon
質問者

お礼

ご回答ありがとうございます。 今回はプロシージャ内で完結したいので、#2の方の方法を利用します。 何かありましたら、またよろしくお願いします。

関連するQ&A