|
▼kanabun さん:
大変遅くなりました
>>実際は
>>フルパスになっていて
>>そのためかと思いますがうまく動作できませんでした
>>ご提示いただいたコードもう少し勉強してみます
>ということをしていますから、
>パス名に数字が入っていたりすれば、
>パス名の数値部分を数値にして並び替えようとします。
>こちらでは、ponさんが提示されたようなサンプルデータを
>想定して検証してみているわけですから、
申し訳ありませんでした
実際のところ
ファイル名の命名規則がいまいちでパターンをつかむ必要がありました
後、取得DTでのテストでは
エクセルシート上でのフルパスでの並べ替えで影響が出るのは
ファイル名の数値部分だけのようでした
レコード的には
\\fuga\20091あ\0401\A08.PDF
\\fuga\20091あ\0401\A11.PDF
\\fuga\20091あ\0401\A110.PDF ←
\\fuga\20091あ\0401\A12.PDF
\\fuga\20091あ\0401\AB02.PDF
\\fuga\20091あ\0401\AB03.PDF
\\fuga\20091あ\0401\AB103.PDF ←
\\fuga\20091あ\0401\AB12.PDF
こんなかんじでした
(ファイル名は実際こんな感じです、パスで内容表示みたいな感じ・・)
やり方としては
kanabun さん のアドバイスをもとに、
英字部を4文字用意し A→Aaaa,ABaa
数字部を4文字用意し 08→0008,103→0103
みたいな処理をして、
補助列にフルパスのABaa0103等をいれそこで昇順処理で希望の操作がかないました
ファイル名 AB03.PDF から 数値 03を 取得するに当たり
生まれて初めて正規表現をつかってみました (*^-^*)
といってもネットで公開のYukiさん関数を利用させて頂いただけですが・・・
使いこなすには難しそうですがとっても強力みたいな感じです
?TESTX("AB103.PDF")
103
Function TESTX(strD)
'Dim strD As String
Dim objSC As Object
Dim objS As Object
Dim objSR As Object
Dim strF As String
Dim varF As Variant
'strD = "ABC 12345678 DEF"
Set objSC = CreateObject("VBScript.RegExp")
With objSC
.Pattern = "\d+"
.Global = True
Set objSR = .Execute(strD)
End With
For Each objS In objSR
'Debug.Print objS.Value
TESTX = objS.Value
Next
End Function
その他、いくつかフルパス加工の関数を用意して
補助列には 上記組み合わせた
if文がネストした長ったらしい数式になってしまいましたが
おかげさまで希望の操作かないました
ありがとうございました
今後もよろしくお願いいたします
|
|