マクロ(Excel)にて複数検索方法を実装する方法

このQ&Aのポイント
  • マクロ(Excel)にて複数の検索方法を実装するためには、ネットワークドライブに割り当てた複数のフォルダをチェックボックスで選択し、キーワードを入力することで一度に複数のフォルダ内を検索することができます。
  • ただし、現在の実装では、一度に複数のフォルダを検索することはできません。今後の実装の改善点として、一度に複数のフォルダを検索できるようにする方法を検討する必要があります。
  • 具体的な方法としては、チェックボックスで選択された複数のフォルダを配列に格納し、キーワードを入力する度に配列の各フォルダを順に検索する方法が考えられます。この方法を実装することで、一度に複数のフォルダを検索することが可能になります。
回答を見る
  • ベストアンサー

複数検索方法

マクロ(Excel)にて検索できるものを作成しています。 例えばネットワークドライブにて割り当てたH22(Zドライブ)~H1(Gドライブ)というフォルダがあり、UserForm1にてH22~H1のチェックボックスを作成しています。ここでH22とH21のチェックボックスにチェックを入れキーワードを入力し検索すると、H22とH21のフォルダ内になるキーワードと同じファイル名をフォルダ名と同じのシートに検索結果を表示したいです。 しかし、下記のようにすると、1つずつの検索は可能なのですが、複数チェック(H22とH21)入れると H22を検索し終わった後、もう一度キーワードを入力しないとH21を検索してくれません。 複数チェックし1回のキーワード入力で検索するにはどうすれば良いですか? 説明が下手ですが、よろしくお願いします。 Private Sub CommandButton1_Click() If CheckBox1 = True Then Sheets("H22").Visible = True Sheets("H22").Select With Application.FileSearch .NewSearch .LookIn = "Z:\" buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf .SearchSubFolders = True If .Execute() > -5 Then MsgBox .FoundFiles.Count - 5 & " 個のファイルが見つかりました", vbOKOnly, "検索結果" For 検索結果 = 6 To .FoundFiles.Count Cells(検索結果, 3) = .FoundFiles(検索結果) Next 検索結果 Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing For i = 6 To 検索結果 Step 1 Cells(i, 3).Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 3).Value End With Next i ElseIf CheckBox2 = True Then Sheets("H21").Visible = True Sheets("H21").Select With Application.FileSearch .NewSearch .LookIn = "Y:\" buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf .SearchSubFolders = True If .Execute() > -5 Then MsgBox .FoundFiles.Count - 5 & " 個のファイルが見つかりました", vbOKOnly, "検索結果" For 検索結果 = 6 To .FoundFiles.Count Cells(検索結果, 3) = .FoundFiles(検索結果) Next 検索結果 Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing For i = 6 To 検索結果 Step 1 Cells(i, 3).Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 3).Value End With Next i  ・  ・  ・ End If End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

na-chi21さん 初めまして。 大まかなコードは以下の通りです。 検索処理の詳細は追加してください。 Private Sub CommandButton1_Click()  ''' チェックしてあるかを確認  For I = 1 To 22   If Me.Controls("CheckBox" & I) = True Then Exit For   If I = 22 Then Exit Sub  Next I  ''' 検索ファイル名入力  buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & _     "ただし、複数キーワード検索はできません" & vbCrLf & _     "キーワード入力後、「OK」ボタンを選択", "キーワード入力")  If buf = "" Or buf = "False" Then Exit Sub  ''' 検索処理  For I = 1 To 22   If Me.Controls("CheckBox" & I) = True Then    シート名 = "H" & 22 - I + 1    ドライブ = Chr(Asc("Z") - I + 1)    Sheets(シート名).Visible = True    Sheets(シート名).Select    With Application.FileSearch     .NewSearch     .LookIn = ドライブ & ":\"     .Filename = buf     .SearchSubFolders = True        :        :        :        :    End With   End If  Next I End Sub

na-chi21
質問者

お礼

お返事遅くなりすいません。 jcctairaさんが教えた通りにしたら、できました。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>1回のキーワード入力で検索するにはどうすれば 複数キーワードがあり、連続して検索するには、複数キーワードは変数に覚えておいて、検索は検索キーワード1=>検索=>表示=>次への指示=>キーワード2=>検索=>表示=>次へ・・ になるのは当たり前ではないのか。 それなら繰り返せば仕舞いではないのか。配列なら0からUboundまで配列要素を変えて検索を繰り返す。 システムにもファイル検索があり、入るを指定するウインドウもあるのに、自作する必要があるのか。

関連するQ&A

  • FileSearchがExcel2010でできない

    下記のVBAでExcel2003では出来たのですが、Excel2010ではエラーになります。 Excel2003と同じような動作をExcel2010で行いたいのですが、どこをどのように変えたら使用できるようになるでしょうか? ネットで調べても初心者なもので全くわかりません。 Userform1に作成しているチェックボックスを選択すると、そのチェックボックスに対するドライブからファイルが検索される仕様になってます。 説明が下手で申し訳ありませんが、よろしくお願いします。 Private Sub CommandButton1_Click() Set FSO = CreateObject("Scripting.FileSystemObject") For x = 1 To 17 If Me.Controls("CheckBox" & x) = True Then Exit For 'チェックしてあるかを確認 If x = 18 Then Exit Sub Next x buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力") If buf = "" Or buf = "False" Then Exit Sub For x = 1 To 17 If Me.Controls("CheckBox" & x) = True Then ドライブ = Chr(Asc("J") + x - 1) Sheets(x + 1).Visible = True Sheets(x + 1).Select Cells(1, 1).Select With Application.FileSearch .NewSearch .LookIn = ドライブ & ":\" .Filename = buf .SearchSubFolders = True If .Execute() > 0 Then MsgBox .FoundFiles.Count & " 個のファイルが見つかりました", vbOKOnly, "検索結果" b = 1 Application.ScreenUpdating = False For Each f In .FoundFiles a = Range("C65536").End(xlUp).Row + 1 Cells(a, 2) = b Cells(a, 3) = FSO.getfile(f).Name Cells(a, 4) = FSO.getfile(f).DateLastModified Cells(a, 5) = FSO.getfile(f).Path b = b + 1 Next f Else MsgBox "見つかりませんでした" Sheets(x + 1).Visible = False End If End With For i = 5 To a Step 1 Cells(i, 3).Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 5).Value End With Next i If Range("E5") = "" Then End Else Range(Cells(5, 5), Cells(a, 5)).Clear End If End If Next x Set FSO = Nothing Cells(1, 1).Select Unload UserForm1 End Sub

  • エクセルvbaで、同じ番号の請求書の金額をまとめる方法 2

    エクセルvbaで、同じ番号の請求書の金額をまとめる方法 2 すみません、前回質問して良い回答をいただいたのですが、こちらの手違いで 用件がひとつぬけていました。 A    B     I    K    L     M 11/5 B575    3000  7500 5000 13500 11/5 B575    4500      8500 11/6 B578    3000   3000 4000 40000 上記のように A日付 B請求書番号 I金額 K金額合計 が入力されています。 (IからKにとんでいるのは間違いではありません) M列にも同じようにL列の同じ請求書番号の金額の合計をセルを結合して中央揃えで表示したいのです。 以前のプログラムに加筆することで可能になるでしょうか。 下に貼り付けます。 Dim i As Long, j As Long Dim buf As Variant, ret As Double For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row buf = Val(Cells(i, 9).Value) '修正 If Cells(i, 2).Value <> Cells(i + 1, 2).Value Then If j = 0 Then j = i With Range(Cells(j, 11), Cells(i, 11)) .MergeCells = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With If buf + ret > 0 Then Cells(j, 11).Value = buf + ret End If Cells(j, 11).NumberFormat = "#,##0" ret = 0: j = 0 Else If j = 0 Then j = i ret = buf + ret End If Next ''合計欄 'With Cells(i, 4) ' .NumberFormat = "#,##0" ' .HorizontalAlignment = xlCenter ' .Formula = "= SUM(R1C:R[-1]C)" 'End With ご多忙の中申し訳ございませんがよろしくお願いします。

  • マクロで複数の行をまとめて切り取りする方法

    Iの列のセルに「テスト」があったら、その行を切り取ってシート2に貼り付ける といった流れのコードが下記です。 Sub 切り取り() Dim i, LastRow As Long LastRow = Cells(Rows.Count, 9).End(xlUp).Row For i = 1 To LastRow If Cells(i, 9) = “テスト” Then Rows(i).Cut Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Next i End Sub ●Iの列のセルに「テスト」と「課題」があったら、その行を切り取ってシート2に貼り付ける といったものをしたいのです。 1. If Cells(i, 9) = “テスト” Then ↓ If Cells(i, 9) = “テスト,課題” Then 結果エラー 2. If Cells(i, 9) = “テスト” Then ↓ If Cells(i, 9) = “テスト&課題” Then 結果エラー 正常なコードを教えてくださいますか? 宜しくお願いします。

  • エクセルVBAラベルの変数?

    エクセル2000VBAにて下記のように作成しました。 With ActiveSheet For i = 4 To 200 If Label1.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label6.Caption = .Cells(idx, h) Label7.Caption = .Cells(idx + 2, h) GoTo ラベル2 End If Next idx End If Next h End If Next i ラベル2: For i = 4 To 200 If Label2.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label8.Caption = .Cells(idx, h) Label9.Caption = .Cells(idx + 2, h) GoTo ラベル3 End If Next idx End If Next h End If Next i ラベル3: ・・・ End With Label1~5まで同じ処理を行うため 1~5まで変数を使用して簡単にしたいのですが Label(変数)の書き込み方がわかりません? 検索を使用しましたが検索項目が悪いのか なかなか解決しません。 何方か教えていただけないでしょうか?

  • vba検索結果を保持しつつ、次の検索結果が欲しい

    a列にあるセルがe列にないか検索し、あった場合は、b列にあるセルがf列にないか検索し、あった場合は、c列にあるセルがg列にないか検索し、あった場合は、c列とg列が合致した2つ隣のセル(i列)に、d列にあるセルとh列にあるセルを結合させた結果を、表示させたいです。 以下のコードを走らせましたが、何も起こりませんてした。 お手数ですが、ご教示いただけますと幸いですm(_ _)m sub merge () dim i as long for i = 1 to cells(rows.count,1).end(xlup).row if cells(i,1) = cells(i,5) then if cells(i,2) = cells(i,6) then if cells(i,3) = cells(i,7) then cells(i,7).offset(0,2) = cells(i,4) and cecls(i,8) i = i + 1 end if end if end if next end sub

  • VBA(ExecuteExcel4Macro)を用いた検索ツール

    VBA(ExecuteExcel4Macro)を用いた検索ツール はじめまして。 当方Excel2007、winXPでの環境下でVBAを用いた検索ツールを作成しています。 検索対象のxlsファイルには1行目に郵便番号、氏名、住所の項目タイトル、2行目以降にデータが入力されています。 【現在の仕様】 検索対象のxlsファイルを選択→検索したい氏名(3つまで)を入力すると氏名列を順に検索し、該当した氏名のみをシートへ出力 【作りたい仕様】 検索対象のxlsファイルを選択→検索したい氏名(3つまで)を入力すると氏名列を順に検索し、該当した氏名の入力された行をシートへ出力 現在のソースは下記になりますが、どのように書き変えればいいのかが分からず困っています。 教えていただけたらと思います。よろしくお願いいたします。 ------------------------- (略) ''対象ブックを選択します OpenFileName = Application.GetOpenFilename("Microsoft Excel ブック,*.xls") If OpenFileName = "False" Then Exit Sub OpenFileName = Replace(OpenFileName, Dir(OpenFileName), "[" & Dir(OpenFileName) & "]") SheetName = InputBox("読み込むワークシート名を入力してください。") If SheetName = "" Then Exit Sub Target = "'" & OpenFileName & SheetName & "'!" On Error Resume Next buf = ExecuteExcel4Macro(Target & "R1C1") If Err <> 0 Then MsgBox "ワークシート [ " & SheetName & " ] を読めませんでした。", vbExclamation Exit Sub End If On Error GoTo 0 key1 = InputBox("検索したい氏名1を入力してください。") If key1 = "" Then Exit Sub End If key2 = InputBox("検索したい氏名2を入力してください。") If key2 = "" Then Else key3 = InputBox("検索したい氏名3を入力してください。") End If For i = 1 To 256 If ExecuteExcel4Macro(Target & "R1C" & i) = "名前" Then TargetCol = i Exit For End If Next i If TargetCol = 0 Then MsgBox "[ 名前 ]フィールドが見つかりません。", vbExclamation Exit Sub End If Dim clm As Integer For i = 2 To 10000 buf = ExecuteExcel4Macro(Target & "R" & i & "C" & Target If buf = "0" Then Exit For If buf = key1 Then Sheet3.Cells(w, 3) = buf w = w + 1 ReDim Preserve GetNames(i - 1) GetNames(i - 1) = buf ElseIf buf = key2 Then Sheet3.Cells(w, 3) = buf w = w + 1 ReDim Preserve GetNames(i - 1) GetNames(i - 1) = buf (略) -----------------

  • 【VBA】セルの中身を日付形式に変換したい

    w列のセルの中に20140701のように入っているセルを2014/07/01に変換するマクロを作っております。 それで以下のように書いてみたのですが、「型が一致しません」と出てしまい、先に進めずにおります…。お力借りられますと幸いです。 Dim org As String Dim buf As String Dim i As Long i = 1 Do Until Cells("w", i) = "" Cells("w", i).Select With ActiveCell org = .Value If Len(org) = 8 Then buf = _ Mid(org, 1, 4) & "/" & _ Mid(org, 5, 2) & "/" & _ Mid(org, 7, 2) If IsDate(buf) = True Then .Value = buf .NumberFormatLocal = "yyyy年m月d日" End If End If End With i = i + 1 Loop

  • エクセル VBAのオートフィルター実行時エラー

    エクセル VBAのオートフィルター実行時エラーについて教えて下さい VBAのオートフィルター実行時エラーで「’rangeクラスのAutoFilterメッソドが失敗しました’」 が表示されるのですが、エラーの内容がわかりません。教えて下さい。 Sub 複数条件でのデータ抽出() Const OrigSheetName = "データベース" Const PasteSheetName = "検索&抽出" Const ItemRow = 2 Const FirstColumn = "A" Const LastColumn = "CH" Const UnnecessaryColumns = "W:CD" Const SearchColumn1 = "CF" Const SearchColumn2 = "I" Const PasteCell = "A2" Dim OrigSheet As Worksheet, PasteSheet As Worksheet, _ LastRow As Long, Region As Variant, Period(1, 1) As Variant, _ temp As Variant, i As Long, c As Range Period(0, 0) = "1905/1/1" Period(1, 0) = "9999/12/31" Period(0, 1) = "以降" Period(1, 1) = "以前" If IsError(Evaluate("ROW('" & OrigSheetName & "'!A1)")) Then MsgBox "元データが入力されているシートとして設定されている" _ & vbCrLf & vbCrLf & OrigSheetName & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub End If Set OrigSheet = Sheets(OrigSheetName) If IsError(Evaluate("ROW('" & PasteSheetName & "'!A1)")) Then MsgBox "データの転記先のシートとして設定されている" _ & vbCrLf & vbCrLf & PasteSheetName & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub End If Set PasteSheet = Sheets(PasteSheetName) With OrigSheet LastRow = .Range(LastColumn & Rows.Count).End(xlUp).Row With .Range(LastColumn & Rows.Count).End(xlUp) If LastRow > .Row Then LastRow = .Row End With If LastRow <= ItemRow Then GoTo label9 label1: Region = Application.InputBox("参加または不参加を入力!", SearchColumn2 & _ "列に入力されている区分(A組またはB組)の中で、抽出条件を入力して下さい", _ , Type:=6) If Region = vbNullString Or Region = False Then temp = MsgBox("区分が入力されていません。" & vbCrLf _ & "区分の入力をやり直しますか?" & vbCrLf & vbCrLf _ & "[はい]:区分の入力をやり直します" & vbCrLf _ & "[いいえ]:処理を中止してマクロを終了します", _ vbYesNo + vbExclamation, "区分未入力") If temp = vbNo Then Exit Sub Else GoTo label1 End If End If For i = 0 To 1 label2: Period(i, 0) = Application.InputBox("期間指定" & i + 1, SearchColumn1 & _ "列に入力されている日付" _ & "で抽出する期間を指定して下さい。", _ Period(i, 0), Type:=2) If Period(i, 0) = vbNullString Or Period(i, 0) = False Then temp = MsgBox("日付が入力されていません。" & vbCrLf _ & "日付の入力をやり直しますか?" & vbCrLf & vbCrLf _ & "[はい]:日付の入力をやり直します" & vbCrLf _ & "[いいえ]:処理を中止してマクロを終了します", _ vbYesNo + vbExclamation, "日付未入力") If temp = vbNo Then Exit Sub Else GoTo label2 End If End If If IsDate(Period(i, 0)) Then If Format(Period(i, 0), "yyyy/mm/dd") = DateValue(Period(i, 0)) & "" _ Then GoTo label3 End If temp = MsgBox("入力された値は日付として扱う事が出来ません。" _ & vbCrLf & "日付の入力をやり直して下さい。", _ vbOKOnly + vbExclamation, "入力値不適切") GoTo label2 label3: Period(i, 0) = DateValue(Period(i, 0)) Next i End With With Application .ScreenUpdating = False .Calculation = xlManual End With With OrigSheet .Columns(UnnecessaryColumns).Hidden = True With .Range(SearchColumn1 & ItemRow & ":" & SearchColumn2 & LastRow) .AutoFilter Field:=1, Criteria1:=Region .AutoFilter Field:=Columns(SearchColumn1 & ":" & SearchColumn2).Columns.Count, _ Criteria1:=">=" & Period(0, 0), Operator:=xlAnd, Criteria2:="<=" & Period(1, 0) End With Set c = .Range(FirstColumn & ItemRow & ":" & LastColumn & LastRow) i = c.Resize(, 1).SpecialCells(xlCellTypeVisible).Cells.Count End With If i > 1 Then With PasteSheet .Range(PasteCell & ":" & .Cells.SpecialCells(xlCellTypeLastCell).Address).Clear c.SpecialCells(xlCellTypeVisible).Copy With .Range(PasteCell) .PasteSpecial Paste:=xlPasteValuesAndNumberFormats .PasteSpecial Paste:=xlPasteFormats End With End With End If With c.EntireColumn .AutoFilter .Hidden = False End With If i > 1 Then GoTo labelE label9: MsgBox DateCell & "該当するデータが見つかりません。" & vbCrLf _ & "マクロの実行を中止します。", vbExclamation, "データ無し" & vbCrLf & i labelE: With Application .CutCopyMode = False .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub 1か月ほど前までは問題なく実行出来ていました。元のデータベースの表を編集(列の追加)しましたが、元となるセルは変更しています。 宜しくお願いします!

  • エクセル VBAのオートフィルター実行時エラー

    VBAのオートフィルター実行時エラーで「’rangeクラスのAutoFilterメッソドが失敗しました’」 が表示されるのですが、エラーの内容がわかりません。教えて下さい。 Sub 複数条件でのデータ抽出() Const OrigSheetName = "データベース" Const PasteSheetName = "検索&抽出" Const ItemRow = 2 Const FirstColumn = "A" Const LastColumn = "CH" Const UnnecessaryColumns = "W:CD" Const SearchColumn1 = "CF" Const SearchColumn2 = "I" Const PasteCell = "A2" Dim OrigSheet As Worksheet, PasteSheet As Worksheet, _ LastRow As Long, Region As Variant, Period(1, 1) As Variant, _ temp As Variant, i As Long, c As Range Period(0, 0) = "1905/1/1" Period(1, 0) = "9999/12/31" Period(0, 1) = "以降" Period(1, 1) = "以前" If IsError(Evaluate("ROW('" & OrigSheetName & "'!A1)")) Then MsgBox "元データが入力されているシートとして設定されている" _ & vbCrLf & vbCrLf & OrigSheetName & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub End If Set OrigSheet = Sheets(OrigSheetName) If IsError(Evaluate("ROW('" & PasteSheetName & "'!A1)")) Then MsgBox "データの転記先のシートとして設定されている" _ & vbCrLf & vbCrLf & PasteSheetName & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub End If Set PasteSheet = Sheets(PasteSheetName) With OrigSheet LastRow = .Range(LastColumn & Rows.Count).End(xlUp).Row With .Range(LastColumn & Rows.Count).End(xlUp) If LastRow > .Row Then LastRow = .Row End With If LastRow <= ItemRow Then GoTo label9 label1: Region = Application.InputBox("参加または不参加を入力!", SearchColumn2 & _ "列に入力されている区分(A組またはB組)の中で、抽出条件を入力して下さい", _ , Type:=6) If Region = vbNullString Or Region = False Then temp = MsgBox("区分が入力されていません。" & vbCrLf _ & "区分の入力をやり直しますか?" & vbCrLf & vbCrLf _ & "[はい]:区分の入力をやり直します" & vbCrLf _ & "[いいえ]:処理を中止してマクロを終了します", _ vbYesNo + vbExclamation, "区分未入力") If temp = vbNo Then Exit Sub Else GoTo label1 End If End If For i = 0 To 1 label2: Period(i, 0) = Application.InputBox("期間指定" & i + 1, SearchColumn1 & _ "列に入力されている日付" _ & "で抽出する期間を指定して下さい。", _ Period(i, 0), Type:=2) If Period(i, 0) = vbNullString Or Period(i, 0) = False Then temp = MsgBox("日付が入力されていません。" & vbCrLf _ & "日付の入力をやり直しますか?" & vbCrLf & vbCrLf _ & "[はい]:日付の入力をやり直します" & vbCrLf _ & "[いいえ]:処理を中止してマクロを終了します", _ vbYesNo + vbExclamation, "日付未入力") If temp = vbNo Then Exit Sub Else GoTo label2 End If End If If IsDate(Period(i, 0)) Then If Format(Period(i, 0), "yyyy/mm/dd") = DateValue(Period(i, 0)) & "" _ Then GoTo label3 End If temp = MsgBox("入力された値は日付として扱う事が出来ません。" _ & vbCrLf & "日付の入力をやり直して下さい。", _ vbOKOnly + vbExclamation, "入力値不適切") GoTo label2 label3: Period(i, 0) = DateValue(Period(i, 0)) Next i End With With Application .ScreenUpdating = False .Calculation = xlManual End With With OrigSheet .Columns(UnnecessaryColumns).Hidden = True With .Range(SearchColumn1 & ItemRow & ":" & SearchColumn2 & LastRow) .AutoFilter Field:=1, Criteria1:=Region .AutoFilter Field:=Columns(SearchColumn1 & ":" & SearchColumn2).Columns.Count, _ Criteria1:=">=" & Period(0, 0), Operator:=xlAnd, Criteria2:="<=" & Period(1, 0) End With Set c = .Range(FirstColumn & ItemRow & ":" & LastColumn & LastRow) i = c.Resize(, 1).SpecialCells(xlCellTypeVisible).Cells.Count End With If i > 1 Then With PasteSheet .Range(PasteCell & ":" & .Cells.SpecialCells(xlCellTypeLastCell).Address).Clear c.SpecialCells(xlCellTypeVisible).Copy With .Range(PasteCell) .PasteSpecial Paste:=xlPasteValuesAndNumberFormats .PasteSpecial Paste:=xlPasteFormats End With End With End If With c.EntireColumn .AutoFilter .Hidden = False End With If i > 1 Then GoTo labelE label9: MsgBox DateCell & "該当するデータが見つかりません。" & vbCrLf _ & "マクロの実行を中止します。", vbExclamation, "データ無し" & vbCrLf & i labelE: With Application .CutCopyMode = False .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub 1か月ほど前までは問題なく実行出来ていました。元のデータベースの表を編集(列の追加)しましたが、元となるセルは変更しています。 宜しくお願いします!

  • FileSearchがエクセル2007で使えなくなって困っています。

    2003では普通に使えたのですが、2007で使うためにはどのように変えればいいのでしょうか?途方にくれているのでVBAに詳しい方ご教授ください。処理文で回答頂けるとうれしいです。 Public Sub p_更新() For i = 1 To 100: gwKillFL(i) = "": Next i With Application.FileSearch .LookIn = gAAFLD .SearchSubFolders = True .Filename = "*T" & Format(gBB, "00") & ".txt" .FileType = msoFileTypeAllFiles If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count gwKillFL(i) = .FoundFiles(i) Call p_ReadData(.FoundFiles(i)) Next i For i = 1 To .FoundFiles.Count If gwKillFL(i) <> "" Then Kill gwKillFL(i) End If Next i If gMenu1 > 0 Then Range("A2").Select MsgBox "更新", vbOKOnly, "確認" End If Else If gMenu1 > 0 Then MsgBox "更新ファイルなし。", vbOKOnly, "確認" End If End If End With End Sub

専門家に質問してみよう