|
▼pon さん:
>>([A2]以降に ファイルリストがあるとします。拡張子は同じとします)
>実際は
>フルパスになっていて
>そのためかと思いますがうまく動作できませんでした
そのコードの処理法は、
> S = arry(i, 1)
'セルの文字列を先頭から一つづつ見ていって
> For j = 1 To Len(S)
' 文字が数字なら
> If Mid$(S, j, 1) Like "#" Then
'数字の前の文字列 と
' それ以降の文字列を数値にして書式"00000000"
' でFormatした文字列を結合したものとする
> arry(i, 1) = Left$(S, j - 1) _
> & Format$(Val(Mid$(S, j)), String$(20 - j, "0"))
ということをしていますから、
パス名に数字が入っていたりすれば、
パス名の数値部分を数値にして並び替えようとします。
こちらでは、ponさんが提示されたようなサンプルデータを
想定して検証してみているわけですから、
'---------------------------------------
(こちらが検証に使ったデータは 以下のようなものです
これは Excelでソートしたあとの並び順です)
▼Filename
A0003.txt
A010.txt
A033.txt
A11.txt
A110.txt
A1100.txt
A12.txt
A13.txt
A3.txt
(Try1マクロで並び替えると、以下のような並びになります。
この並び順は エクスプローラと同じ並び順です)
▼Filename
A0003.txt A000000000000000003
A3.txt A000000000000000003
A010.txt A000000000000000010
A11.txt A000000000000000011
A12.txt A000000000000000012
A13.txt A000000000000000013
A033.txt A000000000000000033
A110.txt A000000000000000110
A1100.txt A000000000000001100
'-------------------------------------------------
pon さんのほうでも、最初にテストするとき、
ファイルリストはパス名の付いていない裸のファイル名で
検証していただきたかったです。
パス名付きのファイル名をファイル名の部分で並び替えるなら、
For〜Next部分を 以下のように加筆して試してみてください。
For i = 1 To UBound(arry)
S = arry(i, 1)
j = InStrRev(S, "\")
If j Then
S = Mid$(S, j + 1)
For j = 1 To Len(S)
If Mid$(S, j, 1) Like "#" Then
arry(i, 1) = Left$(S, j - 1) & Format$(Val(Mid$(S, j)), String$(20 - j, "0"))
Exit For
End If
Next j
End If
Next i
|
|