Excel VBA質問箱 IV

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

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


9492 / 13646 ツリー ←次へ | 前へ→

【27008】文字列検索・判断 mam 05/7/26(火) 14:13 質問[未読]
【27011】Re:文字列検索・判断 ちくたく 05/7/26(火) 15:53 回答[未読]
【27015】Re:ちくたく さんへ mam 05/7/26(火) 16:42 お礼[未読]
【27016】Re:ちくたく さんへ ちくたく 05/7/26(火) 16:50 発言[未読]
【27012】Re:文字列検索・判断 IROC 05/7/26(火) 16:03 回答[未読]
【27018】IROC さんへ mam 05/7/26(火) 16:54 お礼[未読]
【27020】Re:IROC さんへ IROC 05/7/26(火) 17:02 回答[未読]
【27024】解決 mam 05/7/26(火) 17:48 お礼[未読]
【27025】Re:解決 IROC 05/7/26(火) 18:38 回答[未読]
【27049】Re:解決 mam 05/7/27(水) 9:25 お礼[未読]

【27008】文字列検索・判断
質問  mam  - 05/7/26(火) 14:13 -

引用なし
パスワード
   はじめまして。VBAの勉強中ですが、わからないことだらけ行き詰っております。つたない説明になりますが、何卒ご教授願います。

複数のWorkbookを順次読込み、その中のあるシートのあるセルにある文字列がなんであるかを判断させたいのですが、上手くいきません。
詳細:シート上の文字列が入力されているセル位置は不定。
   シート上の文字列を検出してその文字は「AAA」か「BBBB」か「CC」判断する。
   1シート上に文字列は1個以上あるが検出すべき文字列は1一つ。
   

【27011】Re:文字列検索・判断
回答  ちくたく  - 05/7/26(火) 15:53 -

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

あまり上手ではないのと、
質問の意味を完全に理解できなかったのですが、
役にたてばと。

現在開いている全てのブックの全てのシートを調べ、
その中に「test」という文字列があったら、その場所を示します。
示すのは現在アクティブなブックのシートに書き出します。

Sub 複数のブック検索()

  Dim myWBook As Workbook
  Dim myWSheet As Worksheet
  Dim findStrings As String
  Dim myRange As Range
  Dim checkWSheet As Worksheet
  Dim checkCellNum As Integer
  
  '結果を書き出すシートはそのときにアクティブなやつ。
  Set checkWSheet = ActiveWorkbook.ActiveSheet
  checkCellNum = 1
  
  '検索したい文字列
  findStrings = "test"
  
  For Each myWBook In Workbooks
    For Each myWSheet In myWBook.Worksheets
      
      myWSheet.Activate
      myWSheet.Range("A1:IV65536").Select
      Set myRange = Selection.Find _
      (What:=findStrings, LookAt:=xlWhole)
      
      If myRange Is Nothing Then
        
      Else
        checkWSheet.Range("A" & checkCellNum).Value = _
        myWBook.Name & myWSheet.Name & CStr(myRange.Address)
        checkCellNum = checkCellNum + 1
      End If
      
    Next myWSheet
  Next myWBook
  
  checkWSheet.Activate
  
End Sub

▼mam さん:
>はじめまして。VBAの勉強中ですが、わからないことだらけ行き詰っております。つたない説明になりますが、何卒ご教授願います。
>
>複数のWorkbookを順次読込み、その中のあるシートのあるセルにある文字列がなんであるかを判断させたいのですが、上手くいきません。
>詳細:シート上の文字列が入力されているセル位置は不定。
>   シート上の文字列を検出してその文字は「AAA」か「BBBB」か「CC」判断する。
>   1シート上に文字列は1個以上あるが検出すべき文字列は1一つ。
>

【27012】Re:文字列検索・判断
回答  IROC  - 05/7/26(火) 16:03 -

引用なし
パスワード
   手作業で行うとしたら、どのような手順になりますか?

>シート上の文字列が入力されているセル位置は不定。
「AAA」「BBBB」「CC」の3回分「検索」を使うのでしょうか?

【27015】Re:ちくたく さんへ
お礼  mam  - 05/7/26(火) 16:42 -

引用なし
パスワード
   早速のご返信ありがとうございます。
説明下手にも関らず、丁寧なご返答頂きまして感謝いたします。

>      myWSheet.Activate
>      myWSheet.Range("A1:IV65536").Select
>      Set myRange = Selection.Find _
>      (What:=findStrings, LookAt:=xlWhole)

只今、此方の部分(↑)を引用させていただいております。
ですが、何分VABの勉強とは言え、実務に合わせてOJTと言う感じですので、
お恥ずかしい話ですが、判らないまま作っています。
上記「xl○○○・・」と言うのをよく目にしますし、自動マクロ作成で使っていますが理解しておりません。

【27016】Re:ちくたく さんへ
発言  ちくたく  - 05/7/26(火) 16:50 -

引用なし
パスワード
   下方の意味は、非常に雑なコードですが、
現在開いているブックにある、シートを順々にアクティブにして、
Ctrl + Aみたいに、全選択して、
その中で、What - 探したい文字列、LookAt - 検索方法を指定し、
手作業でやるみたいに検索してます。それで、検索結果の場所を書き出してます。

xl---は定数です。LookAtだったら、xlWholeで完全一致検索になります。
普通に検索するときも、完全一致と部分一致がありますよね。
Findでヘルプをかけたらのってると思いますよ。興味があればどうぞ。
あまりいいコードじゃないので、一応程度で考えて頂ければと。

▼mam さん:
>早速のご返信ありがとうございます。
>説明下手にも関らず、丁寧なご返答頂きまして感謝いたします。
>
>>      myWSheet.Activate
>>      myWSheet.Range("A1:IV65536").Select
>>      Set myRange = Selection.Find _
>>      (What:=findStrings, LookAt:=xlWhole)
>
>只今、此方の部分(↑)を引用させていただいております。
>ですが、何分VABの勉強とは言え、実務に合わせてOJTと言う感じですので、
>お恥ずかしい話ですが、判らないまま作っています。
>上記「xl○○○・・」と言うのをよく目にしますし、自動マクロ作成で使っていますが理解しておりません。

【27018】IROC さんへ
お礼  mam  - 05/7/26(火) 16:54 -

引用なし
パスワード
   >手作業で行うとしたら、どのような手順になりますか?
>>シート上の文字列が入力されているセル位置は不定。
>「AAA」「BBBB」「CC」の3回分「検索」を使うのでしょうか?

 目にして頂きありがとうございます。

 説明が上手く出来ませんが、以下のような感じでご理解頂けますでしょうか?

 シート上のあるセルに「AAA」と言う文字、もしくは「BBBB」と言う文字、もしくは「CC」と言う文字の何れかが入力されています。
 その文字が何れであるかを判断させて、以降の処理を行いたいのですが、、、。

イメージ(↓こんな感じを想定しています)
 If あるセル = "AAA" Then
   処理A
 Else If あるセル = "BBBB" Then
   処理B
 Else If あるセル = "CC" Then
   処理C
 Else
   該当データなし
 End If

【27020】Re:IROC さんへ
回答  IROC  - 05/7/26(火) 17:02 -

引用なし
パスワード
   > シート上のあるセルに「AAA」と言う文字・・・

あるセルというのが特定されてない以上は、
検索を順番に3回行いつつ、検索で見つかったら処理するように
することになると思います。

【27024】解決
お礼  mam  - 05/7/26(火) 17:48 -

引用なし
パスワード
   ちくたくさん、IROCさん
本件より外れた内容にまで、細かなご返信頂きましてありがとうございます。
無事に解決できました。若干重々しい感じになってますが、以下のように
なりました。

BUMON = ""
Set BUMON = SH5.Range(Cells(1, 1), Cells(3, 3)).Find(What:="*AAA*", lookat:=xlWhole)
    If BUMON Is Nothing Then
      Set BUMON = SH5.Range(Cells(1, 1), Cells(3, 3)).Find(What:="*BBBB*", lookat:=xlWhole)
      If BUMON Is Nothing Then
        Set BUMON = SH5.Range(Cells(1, 1), Cells(3, 3)).Find(What:="*CC*", lookat:=xlWhole)
        If BUMON Is Nothing Then
          MsgBox "データなし"
        Else
           処理C
        End If
      Else
        処理B
      End If
    Else
      処理C
    End If

これで心置きなく帰宅できます。ありがとうございました。

【27025】Re:解決
回答  IROC  - 05/7/26(火) 18:38 -

引用なし
パスワード
   >若干重々しい感じになってますが、

まとめてみましたので、ご参考までに。

Sub Sample()
Dim BUMON As Range
Dim sh5 As Worksheet
 'Set BUMON = Nothing

  With sh5.Range("A1:C3")
  
    Set BUMON = .Find(What:="*AAA*", lookat:=xlWhole)    
      If Not BUMON Is Nothing Then
        Call 処理A
        Exit Sub
      End If
    
    Set BUMON = .Find(What:="*BBBB*", lookat:=xlWhole)    
      If Not BUMON Is Nothing Then
        Call 処理B
        Exit Sub
      End If
        
        
    Set BUMON = .Find(What:="*CC*", lookat:=xlWhole)        
      If Not BUMON Is Nothing Then
        Call 処理C
        Exit Sub
      End If        
  End With

  MsgBox "データなし"
End Sub

【27049】Re:解決
お礼  mam  - 05/7/27(水) 9:25 -

引用なし
パスワード
   ▼IROC さん:
ありがとうございます。
とてもスマートにまとめられたコーディングに感激です。
早速、そのまま参照させて頂いてもよろしいでしょうか?

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