Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7164 / 13644 ツリー ←次へ | 前へ→

【40697】VBA基本 トホホ 06/7/20(木) 16:28 質問[未読]
【40699】Re:VBA基本 へっぽこ 06/7/20(木) 16:46 回答[未読]
【40700】Re:VBA基本 へっぽこ 06/7/20(木) 16:47 発言[未読]
【40712】Re:VBA基本 トホホ 06/7/21(金) 9:19 お礼[未読]
【40723】すみません トホホ 06/7/21(金) 13:56 質問[未読]
【40724】Re:すみません Jaka 06/7/21(金) 14:06 発言[未読]
【40726】Re:すみません Kein 06/7/21(金) 14:45 回答[未読]
【40781】Re:すみません トホホ 06/7/24(月) 9:35 お礼[未読]
【40702】Re:VBA基本 Kein 06/7/20(木) 17:26 回答[未読]
【40711】Re:VBA基本 トホホ 06/7/21(金) 9:19 お礼[未読]

【40697】VBA基本
質問  トホホ  - 06/7/20(木) 16:28 -

引用なし
パスワード
   ある文字で始まる複数のファイルを開きたいのですが、一覧の取得の方法も怪しいレベルの私です。すみませんm(__)m

D:\売上\DBにある30個以上のファイルの中からファイル名がES08で始まるものだけを開きたいのですが、記述がわかりません。
一応わからないなりにも書いてみました。動かなかったのですが(ToT)/~~~

開きたいファイルが保存されているフォルダ→D:\売上\DB
開きたいファイル名の先頭文字→ES08
マクロの保存ファイル→マクロ.xls
マクロファイルの保存先→D:\売上\DB


Sub ES08で始まるファイルを開く()
  Dim buf As String, i As Long
  buf = Dir("D:\売上\DB\*.*")
  Do While buf <> ""
    i = i + 1
    Worksheets("Sheet1").Cells(i, 1) = buf
    buf = Dir()
  Loop
  Dim OpenFileName As String
  Application.GetOpenFilename ("マクロ,*.xls")
  If OpenFileName= Like "ES08*.xls" Then
  Workbooks.Open OpenFileName
  End If
End Sub

【40699】Re:VBA基本
回答  へっぽこ  - 06/7/20(木) 16:46 -

引用なし
パスワード
   こんにちは。
こんな感じでしょうか?

Sub ES08で始まるファイルを開く()
  Dim ファイル名 As String
  ファイル名 = Dir("C:\売上\DB\ES08*.xls")
  Do While ファイル名 <> ""
    Workbooks.Open "C:\売上\DB\" & ファイル名
    ファイル名 = Dir()
  Loop
End Sub

ちなみにマクロを書いたブックと同じフォルダから探したいのであれば
下記のようになります。

Sub ES08で始まるファイルを開く2()
  Dim ファイル名 As String
  'マクロのブックのパス(ThisWorkbook.Path)から探す
  ファイル名 = Dir(ThisWorkbook.Path & "\ES08*.xls")
  Do While ファイル名 <> ""
    Workbooks.Open ThisWorkbook.Path & "\" & ファイル名
    ファイル名 = Dir()
  Loop
End Sub

両方とも自分自身(マクロを書いたブック自身)がES08で始まるケースは
考えていません。

【40700】Re:VBA基本
発言  へっぽこ  - 06/7/20(木) 16:47 -

引用なし
パスワード
   貼り付けたマクロ…Cドライブになってますね。(^^)

【40702】Re:VBA基本
回答  Kein  - 06/7/20(木) 17:26 -

引用なし
パスワード
   ブックオープンイベントで、"編集"ツールバーにコンボボックスを配置して
そこに目的のファイルのみをリストアップする。→リストをクリックして
開きたいブックを開く。というマクロを考えてみました。

[ThisWorkbookモジュール]

Private Sub Workbook_Open()
  Dim MyF As String

  With Application.CommandBars("Formatting")
   .Visible = True
   With .Controls.Add(msoControlComboBox)
     MyF = Dir("D:\売上\DB\ES08*")
     Do Until MyF = ""
      .AddItem MyF: MyF = Dir()
     Loop
     If .ListCount = 0 Then
      .Delete
     Else
      .OnAction = "MyB_Open"
     End If
   End With
  End With
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.CommandBars("Formatting").Reset
End Sub

[標準モジュール]

Sub MyB_Open()
  Dim WB As Workbook
  Dim MyBook As String
  Const Fol As String = "D:\売上\DB\"
 
  With Application.CommandBars("Formatting")
   With .Controls(.Controls.Count)
     MyBook = .List(.ListIndex)
   End With
  End With
  For Each WB In Workbooks
   If WB.Name = MyBook Then
     MsgBox MyBook & " は既に開いています", 48
     Exit Sub
   End If
  Next
  Workbooks.Open Fol & MyBook
End Sub

【40711】Re:VBA基本
お礼  トホホ  - 06/7/21(金) 9:19 -

引用なし
パスワード
   ありがとうございます。
少し応用的な回答で勉強させていただきました。

【40712】Re:VBA基本
お礼  トホホ  - 06/7/21(金) 9:19 -

引用なし
パスワード
   動きました!!
ありがとうございます。
早速使っています<m(__)m>

【40723】すみません
質問  トホホ  - 06/7/21(金) 13:56 -

引用なし
パスワード
   >Sub ES08で始まるファイルを開く2()
>  Dim ファイル名 As String
>  'マクロのブックのパス(ThisWorkbook.Path)から探す
>  ファイル名 = Dir(ThisWorkbook.Path & "\ES08*.xls")
>  Do While ファイル名 <> ""
>    Workbooks.Open ThisWorkbook.Path & "\" & ファイル名
>    ファイル名 = Dir()
>  Loop
>End Sub
↑問題なく動きました。
が・・・、あまりにも多くのファイルが開いてしまうので絞り込んで開きたいのですが、条件設定を教えてください。ファイル名の末尾が年月日時というファイル名です。例えば、下のようなファイル群から日付の一番新しいファイルだけを開きたいのです。
ES08_aiu_20060608162823.xls
ES08_aiu_20060608162848.xls
ES08_aiu_20060610162819.xls
ES08_aiu_20060608162850.xls
ES08_aiu_20060609162833.xls
ES08_aiu_20060608162810.xls
ES08_aiu_20060607162805.xls

【40724】Re:すみません
発言  Jaka  - 06/7/21(金) 14:06 -

引用なし
パスワード
   似たようなものということで。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=1714;id=

【40726】Re:すみません
回答  Kein  - 06/7/21(金) 14:45 -

引用なし
パスワード
   マクロ実行ブックの先頭シートのIV列を作業列として、数値の部分を抜き出し、
ソートして最大値を求めてファイル名に戻して開く。というコードにしてみます。

Sub ES08で始まるファイルを開く2()
  Dim MyF As String, OpF As String
  Dim i As Long, p1 As Long, p2 As Long

  Application.ScreenUpdating = False
  MyF = Dir(ThisWorkbook.Path & "\ES08*.xls")
  Do While MyF <> ""
    i = i + 1
    p1 = InStr(1, MyF, "u_") + 2
    p2 = InStr(1, MyF, ".")
    Worksheets(1).Cells(i, 256).Value = _
    Mid(MyF, p1, p2 - p1)
    MyF = Dir()
  Loop
  If i = 0 Then
    MsgBox "開く対象のファイルが見つかりません", 48
    GoTo ELine
  End If
  With Worksheets(1).Range("IV:IV")
    .NumberFormatLocal = "0_ "
    .Sort Key1:=.Columns(256), Order1:=xlDescending, _
    Header:=xlNo, Orientation:=xlSortColumns
    OpF = ThisWorkbook.Path & "\ES08_aiu_" & _
    .Range("IV1").Value & ".xls"
    Workbooks.Open OpF
    .Clear
  End With
ELine:
  Application.ScreenUpdating = True
End Sub

【40781】Re:すみません
お礼  トホホ  - 06/7/24(月) 9:35 -

引用なし
パスワード
   ありがとうございました。
とっても助かりました。
あたしももっと勉強します。

7164 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free