
Excel VBA ファイル取得について
フォルダの中に、ファイル名“会議“を含むファイルが1つまたは複数あります。
《実行内容》
Dim fullPath As String, myFile As String
※fullPath 省略
myFile = Dir(fullPath & "¥" & "*会議*")
“会議“ファイルが複数ある場合、
ファイルを昇順に並べた時に一番上に来る
ファイル1つを取得したいです。
どのようにしたら良いか教えて頂けると幸いです。
宜しくお願い致します。
No.7ベストアンサー
- 回答日時:
#5です 連投すみません
E:\Desktop\Excel_VBAはデバッグで使ったアドレスです
書き換えてください
!! インデックスを打ち間違いしています
判り難くなってしまいました。すみません訂正してください
For n = LBound(ary, 2) + 1 To UBound(ary, 2)
tmp1 = ary(0, n): tmp2 = ary(1, n)
If ary(1, n - 1) > tmp2 Then
k = n
場所分かりますか・・
No.9
- 回答日時:
他に回答がついているようですが私には見えません。
どの道私の場合『 NET Framework 3.5 』がインストされているのが条件ですので最近のWIN10ですとどうなのかな?
私の場合VS2008をインストした関係で入れましたから(随分前に)。
他の回答で問題ないならそちらをご利用ください。
上記は『並び替えるのが億劫』ってだけの手抜き手法の関係ですので。
No.8
- 回答日時:
要は、*会議*_nnn.xlsm のファイルのnnnが最小のファイル名を取得したいと理解しました。
(nnnは1桁以上の数字)以下のようにしてください。
該当ファイルがメッセージボックスに表示されます。
(但し、数字は9桁までとします)
Option Explicit
Const CNumMax As Long = 1000000000
Public Sub sample()
Dim fullPath As String, tmpFile As String
Dim minFile As String
Dim minNo As Long
Dim tmpNo As Long
fullPath = "D:\goo\data8"
tmpFile = Dir(fullPath & "\" & "*会議*.xlsm")
If tmpFile = "" Then
MsgBox ("該当ファイルなし")
Exit Sub
End If
minFile = ""
minNo = CNumMax + 1
Do While (tmpFile <> "")
tmpNo = GetNumber(tmpFile)
Debug.Print tmpFile, tmpNo
If tmpNo < minNo Then
minFile = tmpFile
minNo = tmpNo
End If
tmpFile = Dir()
Loop
MsgBox (minFile)
End Sub
Public Function GetNumber(ByVal fname As String) As Long
Dim p1 As Variant
Dim p2 As Variant
Dim ll As Long
Dim num As String
GetNumber = CNumMax
p1 = InStrRev(fname, "_")
If p1 < 1 Then Exit Function
p2 = InStrRev(fname, ".")
If p2 < 1 Then Exit Function
ll = p2 - p1 - 1
If ll < 1 Then Exit Function
num = Mid(fname, p1 + 1, ll)
If IsNumeric(num) = False Then Exit Function
If Len(num) > 9 Then Exit Function
GetNumber = CLng(num)
End Function
No.6
- 回答日時:
#5
少し訂正 If IsNumeric(str2) Then なので
ary(1, n) = CInt(str2) とすれば
Function側のCInt( )は要りませんね
この方が、処理数、Functionの使い方が広がりますので訂正します
No.5
- 回答日時:
こんにちは
_の数は? .xlsm拡張子で_が数字の前に必ずあるのなら・・
ファイル名を取得したい場合、2次元配列でソートするのはどうでしょう
(数字部分を抜き出してソート)
Sub test01()
Dim ary() As Variant
Dim n As Long
Dim sPath As String, sFile As String
sPath = "E:\Desktop\Excel_VBA\"
sFile = Dir(sPath & "*_*.xlsm")
Dim str1 As String, str2 As String
Do Until sFile = ""
If InStr(sFile, "_") > 0 Then
str1 = Mid(sFile, InStr(sFile, "_") + 1)
str2 = Left(str1, InStr(str1, ".xlsm") - 1)
If IsNumeric(str2) Then
ReDim Preserve ary(1, n)
ary(0, n) = sFile
ary(1, n) = str2
n = n + 1
End If
End If
sFile = Dir
Loop
Debug.Print mySort(ary)
End Sub
Public Function mySort(ary As Variant) As String
Dim n As Long, k As Long
Dim tmp1 As Variant, tmp2 As Integer
'配列次元キー2 IntegerでSort
For n = LBound(ary, 2) To UBound(ary, 2)
tmp1 = ary(0, n): tmp2 = CInt(ary(1, n))
If CInt(ary(1, n)) > tmp2 Then
k = n
Do While k > LBound(ary)
If CInt(ary(1, k - 1)) <= tmp2 Then
Exit Do
End If
ary(0, k) = ary(0, k - 1): ary(1, k) = CInt(ary(1, k - 1))
k = k - 1
Loop
ary(0, k) = tmp1: ary(1, k) = tmp2
End If
Next
'結果出力
mySort = ary(0, 0)
End Function
エラー処理を加える必要があるかも・・条件も要考察
どの様に使うか分からないのでファンクション(2次元配列)にしました
No.1
- 回答日時:
おはようございます。
1つの方法になりますが、シートに書き出して、シート上で並べ替えるのは、どうでしょうか? 比較的簡単かと思います。
ファイル名は、Split関数で\を使って、ファイル名を取得する方法。
https://happy-tenshoku.com/post-1777/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
隠しファイルの扱い
-
binファイルを解凍したいの...
-
Latexで図番号だけを「図1.1」...
-
#include <Windows.h>というヘ...
-
アクセス 壊れた? 「ファイ...
-
reaper音声ファイルについて
-
.NETアプリを作ったときの .man...
-
自分で作成した重要ファイルを...
-
実行ファイル(.exeファイル)...
-
Oracleの使い方がわかりません
-
jarファイル
-
DTSでデータソースのファイル内...
-
既にファイルが開いているのな...
-
Word VBA MSGBOX 内で降順表示
-
バッチ処理で追記コピーしたい
-
auのW43Tでファイルモードの送受信
-
C言語---ファイルに出力したデ...
-
監視ツールを入れさせられまし...
-
Batファイルをバイナリ形式にす...
-
リンクの張り付けかたを教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトで作成日時...
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
.NETアプリを作ったときの .man...
-
リンクの張り付けかたを教えて...
-
公文書のxmlファイルの開き方が...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
コマンドプロンプトで、指定し...
-
jarファイル
-
「ブルーファイル」と「グリー...
-
ファイルが開かれているかどう...
-
バッチ処理で追記コピーしたい
-
VBAでのicsファイル変換
-
CSSを1ページに1枚作るのって変...
-
監視ツールを入れさせられまし...
-
C#でログファイルにファイルパ...
-
exeファイルの中身を見る方法は...
-
自分で作成した重要ファイルを...
-
HTMLからのBATファイル実行
おすすめ情報
補足です。○○○会議_4.xlsm、○○○会議_12.xlsmがあった場合、数字が小さい○○○会議_4.xlsm をファイル名として取得したいです。