Excel VBA質問箱 IV

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

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


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

【33333】ファイルを開く mame 06/1/9(月) 15:04 質問[未読]
【33334】Re:特定の文字列で始まるファイルを開く かみちゃん 06/1/9(月) 15:15 回答[未読]
【33352】Re:特定の文字列で始まるファイルを開く mame 06/1/9(月) 17:11 発言[未読]
【33354】Re:特定の文字列で始まるファイルを開く かみちゃん 06/1/9(月) 17:19 発言[未読]
【33481】Re:特定の文字列で始まるファイルを開く mame 06/1/12(木) 17:23 質問[未読]
【33485】Re:特定の文字列で始まるファイルを開く Jaka 06/1/12(木) 17:50 回答[未読]
【33499】Re:特定の文字列で始まるファイルを開く Jaka 06/1/13(金) 9:43 発言[未読]
【33500】Re:特定の文字列で始まるファイルを開く mame 06/1/13(金) 10:01 質問[未読]
【33502】Re:特定の文字列で始まるファイルを開く Jaka 06/1/13(金) 10:21 回答[未読]
【33503】Re:特定の文字列で始まるファイルを開く mame 06/1/13(金) 10:25 お礼[未読]
【33579】チョンボ修正 Jaka 06/1/16(月) 9:26 発言[未読]
【34316】Re:特定の文字列で始まるファイルを開く RL 06/1/31(火) 12:52 質問[未読]
【34320】Re:特定の文字列で始まるファイルを開く RL 06/1/31(火) 15:28 質問[未読]
【33335】Re:ファイルを開く Kein 06/1/9(月) 15:29 回答[未読]
【33342】Re:ファイルを開く ponpon 06/1/9(月) 16:36 発言[未読]
【33368】Re:ファイルを開く Hirofumi 06/1/9(月) 20:11 回答[未読]

【33333】ファイルを開く
質問  mame  - 06/1/9(月) 15:04 -

引用なし
パスワード
   set WB=Workbooks.Open("test_051130.xls")
としたいのですが、051130 のところがころころ変わります。
test_で始まる、ファイルを開くと指定することは可能ですか?

【33334】Re:特定の文字列で始まるファイルを開く
回答  かみちゃん E-MAIL  - 06/1/9(月) 15:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Set WB=Workbooks.Open("test_051130.xls")
>としたいのですが、051130 のところがころころ変わります。
>test_で始まる、ファイルを開くと指定することは可能ですか?

どのように指定するのでしょうか?
以下の例は、InputBox関数を使った方法です。

Sub test()
 Dim strFileName As String
 Dim WB As Workbook

 strFileName = InputBox("ファイル名を入力してください(例)051130", , Format(Date, "yymmdd"))
 If strFileName <> "" Then
  strFileName = "test_" & strFileName & ".xls"
  If Dir(strFileName) <> "" Then
   Set WB = Workbooks.Open(strFileName)
  Else
   MsgBox strFileName & "がありません"
  End If
 End If
End Sub

他に、Dir関数を使うと特定のフォルダに入っているものを順次開くということ
もできます。
詳しくは、Dir関数のヘルプをご確認ください。

【33335】Re:ファイルを開く
回答  Kein  - 06/1/9(月) 15:29 -

引用なし
パスワード
   もしかして「本日の日付が入ったブック」という意味でしょーか ?
それなら・・

Sub Day_OP_File()
  Dim DySt As String, FllN As String
  Dim WB As Workbook

  DySt = "test_" & Format(Date, "yymmdd") & ".xls"
  FllN = Application.DefaultFilePath & "\" DySt
  If Dir(FllN) <> "" Then
  Set WB = Workbooks.Open(FllN)
 
  WBの処理をここに書く

  Set WB = Nothing
End Sub

というようなコードにします。

【33342】Re:ファイルを開く
発言  ponpon  - 06/1/9(月) 16:36 -

引用なし
パスワード
   こんにちは。

>test_で始まる、ファイルを開く

同じフォルダにあるファイルを次々に開いて処理するなら

Sub test()
  Dim myPath As String
  Dim myFile As String
  Dim myBK As Workbook
  
  Application.ScreenUpdating = False
  myPath = ThisWorkbook.Path & "\"
  myFile = Dir(myPath & "test_*.xls")

  Do While myFile <> ""
    Set myBK = Workbooks.Open(Filename:=myPath & myFile)
    If myFile <> ThisWorkbook.Name Then
   
     '処理
   
      myBK.Close
    End If
    myFile = Dir()
  Loop
  Application.ScreenUpdating = True
  
End Sub

こんな感じでできると思います。
意味が違ったらごめんなさい。

【33352】Re:特定の文字列で始まるファイルを開く
発言  mame  - 06/1/9(月) 17:11 -

引用なし
パスワード
   例えば、拡張子とか不明の場合、*.* という形であいまい 検索みたいにできますが
ファイル名も "test" & * & ".xls" みたいにできないのかなと。
"test" & * & ".xls" でやるとエラーになってしまうため。
(すみません、説明不足でした。)

【33354】Re:特定の文字列で始まるファイルを開く
発言  かみちゃん  - 06/1/9(月) 17:19 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>例えば、拡張子とか不明の場合、*.* という形であいまい 検索みたいにできますが
>ファイル名も "test" & * & ".xls" みたいにできないのかなと。

すみません、なさりたいことが今ひとつ見えません。
*.* 等ワイルドカードで検索して、一致したファイルは、順番に開いていきたい
ということですか?
それであれば、ponponさんがご提示(まずはDir関数のヘルプを確認していただき
たいのですが)のコードが参考になりませんか?

>"test" & * & ".xls" でやるとエラーになってしまうため。

あえて書くなら、
"test" & "*" & ".xls"
でも、
"test_*.xls"
で十分ですよ。

【33368】Re:ファイルを開く
回答  Hirofumi  - 06/1/9(月) 20:11 -

引用なし
パスワード
   こんなのも有るよ?

Option Explicit

Public Sub Sample()

  Dim i As Long
  Dim rngResult As Range
  Dim vntFileNames As Variant
  Dim strPath As String
  Dim strCompe As String
  Dim strProm As String
  
  'フォルダ名を指定
  strPath = "E:\Office2000\Excel\Test5"
  strPath = ThisWorkbook.Path

  '読み込むファイル名を取得(指定フォルダから取得)
  strCompe = "^test_[0-9][0-9][01][0-9][0-3][0-9]$"
  If Not GetFilesList(vntFileNames, strPath, strCompe, "xls") Then
    GoTo Wayout
  End If
    
  'Listの左上隅セル位置を基準として設定(列見出しの最左セル位置)
  Set rngResult = ActiveSheet.Cells(1, "A")

  For i = 1 To UBound(vntFileNames, 1)
    rngResult.Offset(i).Value = vntFileNames(i)
  Next i
  
  strProm = "処理が完了しました"
  
Wayout:
  
  Set rngResult = Nothing
  
  MsgBox strProm, vbInformation
  
End Sub

Public Function GetFilesList(vntFileNames As Variant, _
              strFilePath As String, _
              Optional strNamePattan As String = ".*", _
              Optional strExtePattan As String = ".*") As Boolean

  Dim i As Long
  Dim objFiles As Object
  Dim objFile As Object
  Dim regExten As Object
  Dim regName As Object
  Dim vntRead() As Variant
  Dim strName As String
  Dim objFso As Object

  'FSOのオブジェクトを取得
  Set objFso = CreateObject("Scripting.FileSystemObject")
 
  'フォルダの存在確認
  If Not objFso.FolderExists(strFilePath) Then
    GoTo Wayout
  End If

  'regExtenpのオブジェクトを取得(正規表現を作成)
  Set regExten = CreateObject("VBScript.RegExp")
  With regExten
    'パターンを設定
    .Pattern = strExtePattan
    '大文字と小文字を区別しないように設定
    .IgnoreCase = True
  End With
  Set regName = CreateObject("VBScript.RegExp")
  With regName
    'パターンを設定
    .Pattern = strNamePattan
    '大文字と小文字を区別しないように設定
    .IgnoreCase = True
  End With

  'フォルダオブジェクトを取得
  Set objFiles = objFso.GetFolder(strFilePath).Files

  'ファイルの数が0でなければ
  If objFiles.Count <> 0 Then
    For Each objFile In objFiles
      With objFile
        strName = .Name
        '検索をテスト
        If regExten.test(objFso.GetExtensionName(strName)) Then
          If regName.test(objFso.GetBaseName(strName)) Then
            i = i + 1
            ReDim Preserve vntRead(1 To i)
            vntRead(i) = strName
          End If
        End If
      End With
    Next objFile
  End If

  Set regExten = Nothing
  Set regName = Nothing

  If i <> 0 Then
    ReDim vntFileNames(1 To UBound(vntRead))
    For i = 1 To UBound(vntRead)
      vntFileNames(i) _
        = StrConv(strFilePath & "\" & vntRead(i), vbNarrow)
    Next i
    GetFilesList = True
  End If

Wayout:

  'フォルダオブジェクトを破棄
  Set objFiles = Nothing
  Set objFile = Nothing
  Set objFso = Nothing

End Function

【33481】Re:特定の文字列で始まるファイルを開く
質問  mame  - 06/1/12(木) 17:23 -

引用なし
パスワード
   Workbooks.Open (ThisWorkbook.PATH & "\" & test & "*")
とすると、
test*.xlsは、みつかりません。とエラーになってしまいます。

【33485】Re:特定の文字列で始まるファイルを開く
回答  Jaka  - 06/1/12(木) 17:50 -

引用なし
パスワード
   ▼mame さん:
>Workbooks.Open (ThisWorkbook.PATH & "\" & test & "*")

aa=Dir(ThisWorkbook.PATH & "\" & test & "*" & ".xls")
if aa <> "" then
  Workbooks.Open (aa)
end if

【33499】Re:特定の文字列で始まるファイルを開く
発言  Jaka  - 06/1/13(金) 9:43 -

引用なし
パスワード
   >test*.xlsは、みつかりません。とエラーになってしまいます。
testって変数じゃないのね

>aa=Dir(ThisWorkbook.PATH & "\test*.xls")
>if aa <> "" then
>  Workbooks.Open (aa)
>end if

【33500】Re:特定の文字列で始まるファイルを開く
質問  mame  - 06/1/13(金) 10:01 -

引用なし
パスワード
   ▼Jaka さん:
>>test*.xlsは、みつかりません。とエラーになってしまいます。
>testって変数じゃないのね
>
>>aa=Dir(ThisWorkbook.PATH & "\test*.xls")
>>if aa <> "" then
>>  Workbooks.Open (aa)
>>end if

このように書いたのですが、
aaに代入されるのは、"test.xls"だけになり、
パスが代入されない為に、「ファイルが見つかりません」とエラーになってしまいます。
おそらく、aaに代入されるのがc:~ とフルパスで代入されれば問題ないのですが
なぜ、、"test.xls"だけしか、代入されないのでしょうか?

【33502】Re:特定の文字列で始まるファイルを開く
回答  Jaka  - 06/1/13(金) 10:21 -

引用なし
パスワード
   ▼mame さん:
>このように書いたのですが、
>aaに代入されるのは、"test.xls"だけになり、
>パスが代入されない為に、「ファイルが見つかりません」とエラーになってしまいます。
>おそらく、aaに代入されるのがc:~ とフルパスで代入されれば問題ないのですが
>なぜ、、"test.xls"だけしか、代入されないのでしょうか?
多分と言うかこれ以外考えられませんけど....。
テストするファイルを一旦保存してください。
保存していないファイルにパスなんてありません。

【33503】Re:特定の文字列で始まるファイルを開く
お礼  mame  - 06/1/13(金) 10:25 -

引用なし
パスワード
   ▼Jaka さん:
>多分と言うかこれ以外考えられませんけど....。
>テストするファイルを一旦保存してください。
>保存していないファイルにパスなんてありません。
すみません。ありがとうございました。
1度Excelを終了した後にじっこうしたら、できました。

【33579】チョンボ修正
発言  Jaka  - 06/1/16(月) 9:26 -

引用なし
パスワード
   下のコード、このままだと動きません。
ルートディレクトリにファイルがあるなら動くかもしれないけど。

>aa=Dir(ThisWorkbook.PATH & "\test*.xls")
>if aa <> "" then
>  Workbooks.Open (aa)
>end if

Workbooks.Open (ThisWorkbook.PATH & "\" & aa)
とパスを追加しないとエラーになります。

更に言うと、上記コードをネットワークに対応させるなら、
カレントディレクトリを移動させてください。
こんな感じに...。

CreateObject("WScript.Shell").CurrentDirectory = "\\コンピュータ名\C\"

【34316】Re:特定の文字列で始まるファイルを開く
質問  RL  - 06/1/31(火) 12:52 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>Set WB=Workbooks.Open("test_051130.xls")
>>としたいのですが、051130 のところがころころ変わります。
>>test_で始まる、ファイルを開くと指定することは可能ですか?
>
>どのように指定するのでしょうか?
>以下の例は、InputBox関数を使った方法です。
>
>Sub test()
> Dim strFileName As String
> Dim WB As Workbook
>
> strFileName = InputBox("ファイル名を入力してください(例)051130", , Format(Date, "yymmdd"))
> If strFileName <> "" Then
>  strFileName = "test_" & strFileName & ".xls"
>  If Dir(strFileName) <> "" Then
>   Set WB = Workbooks.Open(strFileName)
>  Else
>   MsgBox strFileName & "がありません"
>  End If
> End If
>End Sub
>
>他に、Dir関数を使うと特定のフォルダに入っているものを順次開くということ
>もできます。
>詳しくは、Dir関数のヘルプをご確認ください。

横入りにて失礼致します。
Dir関数はどこに入れればいいですか?

【34320】Re:特定の文字列で始まるファイルを開く
質問  RL  - 06/1/31(火) 15:28 -

引用なし
パスワード
   かみちゃんさんのコードを元に下記のコードでファイルを開く事ができました。
さらに、開いた出荷一覧表のB列〜E列、I列〜K列、P列〜AA列、AC列をコピーしてきて、
マクロを設定したファイルのB列から貼り付けたいのですが、
そのようなことは可能でしょうか?

Private Sub CommandButton1_Click()
test.Show
End Sub

Sub test()
 Dim strFileName As String
 Dim WB As Workbook
 Dim MYPATH As String
 Dim MYBK As String

 MYPATH = "C:\Documents and Settings\aaa\デスクトップ\一覧表\"
 MYBK = MYPATH & strFileName & " 出荷一覧表" & ".xls"
 strFileName = InputBox("開くファイルの年を入力してください(例)2005")
 If strFileName <> "" Then
  strFileName = MYPATH & strFileName & " 出荷一覧表" & ".xls"
  If Dir(strFileName) <> "" Then
   Set WB = Workbooks.Open(strFileName)
  Else
   MsgBox strFileName & "がありません"
  End If
 End If
End Sub

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