戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 親トピックをトピックトップへ ]
このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 

このトピック参照回数 :
Re[14]: 何でも検索

    [196305] Re[14]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/11/01(17:46))
    □U R L/

      半平太様。有難うございます。
      以前より早くなりました。

      確かに43個のブックでSheetも10位あって、ブックの開閉と、セルに都度書き込んでいるので仕方がないのでしょうね。

      dictionaryに溜めて置き、最後に一気に書く方法もあるんですね。
      勉強になりました。有難うございました。




    [196304] Re[13]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2024/10/30(17:50))
    □U R L/
      >後は、[196298]の処理スピードを速くしたいのです。
      
      時間が掛かるのは、複数のブックの開閉と、セルに都度書き込んでいるセイと思われます。
      前者はどうしようもないですが(私にはですが)、
      後者は転記すべきデータをdictionaryにでも溜めて置き、最後に一気にセルに書き出せばいいと思います。
      
      Sub リスト()
          Dim c As Range
          Dim i As Integer, j As Integer
          Dim FName As String
          Dim PName As String
          Dim FWhat As String
          Dim BigR As Range
          Dim fAddr As String
          Dim ThisBK As Workbook
          Dim destBK As Workbook
          Dim result(1 To 1, 1 To 3)
          Dim dicT As Object
          
          Set dicT = CreateObject("Scripting.Dictionary")
          j = 0    ' 初期化
          PName = ActiveWorkbook.Path         ' 自分(このBook)と同じフォルダのPath
          FName = Dir(PName & "\" & "*.xls")  ' その中の、*.xls ファイル
          Set ThisBK = ThisWorkbook
          ThisBK.Worksheets(1).Range("A3:C1000").ClearContents  ' A3からC1000セルまでクリア
          
          FWhat = InputBox("検索値を入力してください。")
          
          ' キャンセルボタンが押された場合、処理を終了
          If FWhat = "" Then Exit Sub
          
          Application.ScreenUpdating = False
          
          Do While FName <> ""
              If FName <> ThisBK.Name Then
                  Set destBK = Workbooks.Open(Filename:=PName & "\" & FName, ReadOnly:=True)
                  
                  For i = 1 To destBK.Worksheets.Count
                      Set BigR = destBK.Worksheets(i).UsedRange
                      Set c = BigR.Find(What:=FWhat, LookAt:=xlPart)
                      result(1, 1) = FName
                      
                      If Not c Is Nothing Then
                          fAddr = c.Address   '見つかった
                          result(1, 2) = destBK.Worksheets(i).Name
                          Do
                              result(1, 3) = c.Value
                              j = j + 1
                              dicT(j) = result
                              Set c = BigR.FindNext(c)
                              If c.Address = fAddr Then Exit Do
                          Loop
                      End If
                  Next
                  destBK.Close False
              End If
              FName = Dir()
          Loop
          
          Application.ScreenUpdating = True
          
          If j > 0 Then '書き出し
              ThisBK.Sheets(1).Range("A3:C3").Resize(j).Value = Application.Index(dicT.items, 0)
              dicT.RemoveAll
          Else
              MsgBox FWhat & " は、このFolderのBookにはありませんでした"
          End If
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196303] Re[12]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/10/30(15:48))
    □U R L/

      半平太様
      申し訳ないです。私、焦りと、考え事があると理解できないようになります。

      後は、[196298]の処理スピードを速くしたいのです。
      アドバイスを下さい。
      宜しくお願い致します。




    [196302] Re[11]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2024/10/29(17:39))
    □U R L/
      >シートモジュールが掲示出来なくなりました。
      
      ここの掲示板は、時々そんな異常事態になりますね(困ったもんです)。
      その内、知らぬ間に解消されると思います(経験則ですが)
      
      ただ、今はコード自体より、この疑問に対する答えがどうなのか知りたい所です。
                    ↓
      >私は書く場所が「シートモジュール」で、
      >プロシージャ名が「Private Sub Worksheet_BeforeRightClick(ByVal・・」と言ったのですが、
      >何故、「標準モジュール」で「Sub リスト()」に変わったのですか?
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196301] Re[10]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/10/29(17:11))
    □U R L/

      シートモジュールをコピーしたのに掲示できません




    [196300] Re[9]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/10/29(17:04))
    □U R L/

      半平太 様
      シートモジュールが掲示出来なくなりました。




    [196299] Re[8]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2024/10/29(11:31))
    □U R L/
      すみません。問題の所在がよく分かりません。
      
      私は書く場所が「シートモジュール」で、
      プロシージャ名が「Private Sub Worksheet_BeforeRightClick(ByVal・・」と言ったのですが、
      
      何故、「標準モジュール」で「Sub リスト()」に変わったのですか?


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196298] Re[7]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/10/27(22:43))
    □U R L/
       半平太 様
      お返事ありがとうございます。
      モジュールを見直しました。
      
      標準モジュール
      Sub リスト()
          Dim c As Range
          Dim i As Integer, j As Integer
          Dim FName As String
          Dim PName As String
          Dim FWhat As String
          Dim BigR As Range
          Dim fAddr As String
      
          j = 3    ' 初期値を3に設定
          PName = ActiveWorkbook.Path         ' 自分(このBook)と同じフォルダのPath
          FName = Dir(PName & "\" & "*.xls")  ' その中の、*.xls ファイル
          ThisWorkbook.Worksheets(1).Range("A3:C1000").ClearContents  ' A3からC1000セルまでクリア
          FWhat = InputBox("検索値を入力してください。")
      
          ' キャンセルボタンが押された場合、処理を終了
          If FWhat = "" Then Exit Sub
      
          Application.ScreenUpdating = False
      
          Do While FName <> ""
              If FName <> ActiveWorkbook.Name Then
                  Workbooks.Open PName & "\" & FName
                  For i = 1 To ActiveWorkbook.Worksheets.Count
                      Set BigR = ActiveWorkbook.Worksheets(i).UsedRange
                      Set c = BigR.Find(What:=FWhat, LookAt:=xlPart)
                      If Not c Is Nothing Then
                          fAddr = c.Address   '見つかった
                          Do
                              With ThisWorkbook.Worksheets(1)
                                  .Cells(j, 1).Value = FName
                                  .Cells(j, 2).Value = Worksheets(i).Name
                                  .Cells(j, 3).Value = c.Value
                              End With
                              j = j + 1
                              Set c = BigR.FindNext(c)
                              If c.Address = fAddr Then Exit Do
                          Loop
                      End If
                  Next
                  ActiveWorkbook.Close
              End If
              FName = Dir()
          Loop
      
          Application.ScreenUpdating = True
          If j = 3 Then MsgBox FWhat & " は、このFolderのBookにはありませんでした"
      End Sub
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196296] Re[6]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2024/10/12(16:48))
    □U R L/
      >□投稿者/ あいか -(2024/10/01(13:27))
         ↑
      単にここで提示された「Private Sub Worksheet_BeforeRightClick(ByVal・・以下」を
      検索シートのモジュールに書いたらどうか、と言っただけなんですが・・
      
      ※コードを書く場所が違うと言うことです。
       つまり、検索シートの「シート見出し」を右クリック→「コードの表示」を選択→画面中央の白いエリアに当該コードをコピペ
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196295] Re[5]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/10/12(15:49))
    □U R L/
       半平太 様
      お返事ありがとうございます。
      すみません。
      わかりません。教えて下さい。
      
      
      ub リスト()
          Dim c As Range
          Dim i As Integer, j As Integer
          Dim FName As String
          Dim PName As String
          Dim FWhat As String
          Dim BigR As Range
          Dim fAddr As String
      
          j = 2
          PName = ActiveWorkbook.Path         '自分(このBook)と同じフォルダのPath
          FName = Dir(PName & "\" & "*.xlsx")  'その中の、*.xlsx ファイル
          ThisWorkbook.Worksheets(1).Range(Range("A3"), Range("A3").SpecialCells(xlCellTypeLastCell)).ClearContents
          FWhat = InputBox("英数字、記号【半角,全角】を検索します。")
          Application.ScreenUpdating = False
      
          Do While FName <> ""                'FNameがある限り繰り返す
              If FName <> ActiveWorkbook.Name Then
                  Workbooks.Open PName & "\" & FName
                  For i = 1 To ActiveWorkbook.Worksheets.Count
                      Set BigR = ActiveWorkbook.Worksheets(i).UsedRange
                      Set c = BigR.Find(What:=FWhat, LookAt:=xlPart)
                      If Not c Is Nothing Then
                          fAddr = c.Address   '見つかった
                          Do
                              j = j + 1
                              With ThisWorkbook.Worksheets(1)
                                  .Cells(j, 1).Value = FName
                                  .Cells(j, 2).Value = Worksheets(i).Name
                                  .Cells(j, 3).Value = c.Value
                              End With
                              Set c = BigR.FindNext(c)    '2個目以降を探す
                              If c.Address = fAddr Then Exit Do   '見つかったセル番地が最初と同じなら中止
                          Loop
                      End If
                  Next
                  ActiveWorkbook.Close
              End If
              FName = Dir()                   '次のファイル名を探す
          Loop
          Application.ScreenUpdating = True
          If j = 1 Then MsgBox FWhat & " は、このFolderのBookにはありませんでした"
          '   Application.ScreenUpdating = False
          Application.ScreenUpdating = True
      End Sub
      
      Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
          If Not Intersect(Target, Me.Columns(2)) Is Nothing Then
              Cancel = True
              Me.Cells(Target.Row, 3).Select
          End If
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196291] Re[4]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2024/10/07(22:27))
    □U R L/
      >ThisWorkbookに以下を書いてみたのですが、思った通りには行きませんでした。
      
      ThisWorkbookモジュールにではなく、検索シートのモジュールに書くべきじゃないですか?
      




    [196290] Re[3]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/10/01(13:27))
    □U R L/
      匿名 様
      
      ThisWorkbookに以下を書いてみたのですが、思った通りには行きませんでした。
      
      Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
          Dim FName As String
          Dim PName As String
          Dim ws As Worksheet
          
          ' B列を右クリックした場合
          If Not Intersect(Target, Me.Columns("B")) Is Nothing Then
              Cancel = True ' 右クリックメニューをキャンセル
              FName = Target.Offset(0, -1).Value ' A列のファイル名を取得
              PName = ThisWorkbook.Path ' 現在のブックのパスを取得
              
              ' ファイルを開く
              Workbooks.Open PName & "\" & FName
              
              ' 対象のセルを選択
              Set ws = ActiveWorkbook.Sheets(Target.Value)
              ws.Activate
              ws.Cells(1, 1).Select ' 必要に応じてセルの位置を変更
          End If
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [196289] Re[2]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/09/30(18:47))
    □U R L/

      匿名 様
      お返事ありがとうございます。
      Worksheet_BeforeRightClickを調べてみます。




    [196288] Re[1]: 何でも検索-

    記事引用/メール受信=OFF■

    □投稿者/ 匿名 -(2024/09/28(11:53))
    □U R L/

      Worksheet_BeforeRightClickイベントプロシージャを使えば良いと思います。




    [196282] 何でも検索-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ あいか -(2024/09/17(19:20))
    □U R L/
      Windows11  Office2021です。
      
      図1 @検索@.xlsm Sheet : 検 索   図2【検索結果】
               A     B     C         A      B      C
      2 ファイル名 シート名 セル内内容  2 ファイル名 シート名 セル内内容
      3                   3  中部支店  人事部   FAX 山田
      4                    4  新潟営業   総務・電話  fax
      5                    5 東京本社   電話外線  花子,鈴木 ,FAX,
      1、このマクロは、指定されたフォルダ内のすべてのExcelファイル(*.xls)を検索し、特定の英数字、記号【半角,全角】を探してリスト化するものです。
      2、リスト化したB列のシート名を。右クリックすると、そのシートが開くようになっています。
      3、検索対象Bookは、30個で、Sheet数は8Sheet以上です。
      ご教授受けたい事は
      1、図2のB列シート名を右クリックで、C列セル内内容を選択して開く。】
      2、【検索スピードを速くしたいのです。】
      宜しくお願い致します。
      
      Sub リスト()
      
      Dim c As Range
      Dim i As Integer, j As Integer
      Dim FName As String
      Dim PName As String
      Dim FWhat As String
      Dim BigR As Range
      Dim fAddr As String
          j = 2
          PName = ActiveWorkbook.Path         '自分(このBook)と同じフォルダのPath
          FName = Dir(PName & "\" & "*.xls")  'その中の、*.xls ファイル
          ThisWorkbook.Worksheets(1).Range(Range("A3"), Range("A3").SpecialCells(xlCellTypeLastCell)).ClearContents
          FWhat = InputBox("英数字、記号【半角,全角】を検索します。")
          Application.ScreenUpdating = False
          Do While FName <> ""                'FNameがある限り繰り返す
              If FName <> ActiveWorkbook.Name Then
                  Workbooks.Open PName & "\" & FName
                  For i = 1 To ActiveWorkbook.Worksheets.Count
                      Set BigR = ActiveWorkbook.Worksheets(i).UsedRange
                      Set c = BigR.Find(What:=FWhat, LookAt:=xlPart)
                      If Not c Is Nothing Then
                          fAddr = c.Address   '見つかった
                          Do
                              j = j + 1
                              With ThisWorkbook.Worksheets(1)
                                  .Cells(j, 1).Value = FName
                                  .Cells(j, 2).Value = Worksheets(i).Name
                                  .Cells(j, 3).Value = c.Value
                              End With
                              Set c = BigR.FindNext(c)    '2個目以降を探す
                          If c.Address = fAddr Then Exit Do   '見つかったセル番地が最初と同じなら中止
                          Loop
                      End If
                  Next
                  ActiveWorkbook.Close
              End If
              FName = Dir()                   '次のファイル名を探す
          Loop
          Application.ScreenUpdating = True
          If j = 1 Then MsgBox FWhat & " は、このFolderのBookにはありませんでした"
          
       '   Application.ScreenUpdating = False
      
      Application.ScreenUpdating = True
      End Sub
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



このトピック内容の全ページ数 / [0]

- Child Forum -
Edit:ゆう-G