《VBA・CSS》入門実用Tips集 +α

メニュー一覧


HOME

 エクセルVBA
  ●応用●
  5-8

 wwwcount改造

 CSS(スタイルシート)基本

 BiglobeブログCSS

 CSSいろいろリファレンス

 HTML基本

 HTML簡易リファレンス

 Home > エクセルVBA > 5-8 応用

● EXCEL 単語検索マクロサンプル

指定したシート範囲を検索し、検索結果を表示するサンプルです。
下の例では、"データ"シートの"A"列の"エク"という文字を検索し、
発見した行のA〜C列を検索結果に表示しています。

画面です
画面です

  (処理の説明)
    @シートより検索するシート名と個数を取得
    Aシートより検索する文字と個数を取得
    B結果を表示するセルをクリア
    C検索条件がない場合は終了する判断
    Dシートより検索する列名を取得
    E検索開始
      FORループで始めの検索対象シートにて、検索文字を全て検索した後、
      検索対象シートを順次取り替えて検索している。

      《FORループ内処理》
        E-1 検索シートの検索範囲を選択する。
        E-2 最初の検索を行い、無ければループを抜ける
          Set C = .Find(検索文字(検索文字i), LookIn:=xlValues)     '最初の検索

        E-3 有った場合は、セル位置を保存し、データを表示する。
        E-4 次の検索を行い、最初のセル位置を検出するまでE-3、E-4を繰り返す。
          Set C = .FindNext(C)        '次を検索

    F検索対象シートを全て検索したら終了


《記述場所》
画面です

〔ソースリスト〕
       ちょっと面白がって、変数名に日本語を使ってみましたがやっぱり見づらいですね。
       いくらVBAでも長いプログラムで日本語変数を使うのはタブーでしょう。

Option Explicit

Private Sub CommandButton1_Click()
  Dim 検索文字(100) As String     '最大101個まで
  Dim 検索文字MAX As Integer
  Dim 検索シート(100) As String    '最大101個まで
  Dim 検索シートMAX As Integer
  Dim hit件数 As Integer
  Dim シートi As Integer         'ループ用
  Dim 検索文字i As Integer       'ループ用

  Dim 検索列名 As String

  Dim i As Integer            'ループ用
  Dim C As Object            '検索で見つかったデータの情報を格納する変数
  Dim firstAddress As Variant

  '検索シート名 取得
  For i = 0 To 100
    If Worksheets("検索マクロ").Cells(4 + i, 2).Value = "" Then Exit For
    検索シート(i) = Worksheets("検索マクロ").Cells(4 + i, 2).Value
  Next i

  '検索シート数 取得
  検索シートMAX = i - 1

  '検索文字 取得
  For i = 0 To 9
    If Worksheets("検索マクロ").Cells(4 + i, 4).Value = "" Then Exit For
    検索文字(i) = Worksheets("検索マクロ").Cells(4 + i, 4).Value
  Next i

  '検索文字 個数 取得
  検索文字MAX = i - 1

  '前回の検索結果をクリア
  Worksheets("検索マクロ").Range("f2:l32000").Value = ""

  '検索条件がない場合は終了
  If 検索文字MAX = -1 Or 検索シートMAX = -1 Then
    Worksheets("検索マクロ").Cells(hit件数 + 1, 6).Value = "検索条件を設定してください"
    Exit Sub
  End If
  hit件数 = 1

  '検索する列を取得
  検索列名 = Worksheets("検索マクロ").Cells(1, 3).Value

  '検索開始
  For シートi = 0 To 検索シートMAX
    For 検索文字i = 0 To 検索文字MAX
      '検索範囲のセット
      With Worksheets(検索シート(シートi)).Range(検索列名 + "1:" + 検索列名 + "32000")

        Set C = .Find(検索文字(検索文字i), LookIn:=xlValues)     '最初の検索

        If Not C Is Nothing Then        '検索文字があった場合
          firstAddress = C.Address      '最初のシートの位置を記録
          Do
            '検索データを表示する
            Worksheets("検索マクロ").Cells(hit件数 + 1, 6).Value = hit件数
            Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 0).Value = 検索シート(シートi)

            Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 1).Value = _
                Worksheets(検索シート(シートi)).Range("$A" + Right(C.Address, 2)).Value

            Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 2).Value = _
            Worksheets(検索シート(シートi)).Range("$B" + Right(C.Address, 2)).Value

            Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 3).Value = _
                Worksheets(検索シート(シートi)).Range("$C" + Right(C.Address, 2)).Value

            hit件数 = hit件数 + 1
            Set C = .FindNext(C)    '次を検索
          Loop While Not C Is Nothing And C.Address <> firstAddress  '1順したら検索終わり
        End If

      End With
    Next 検索文字i
  Next シートi

End Sub

     ○c = Right( a , b ) : aで指定した文字列を、右からbで指定した文字数だけ取り出す関数。
     ○"abc" + "de" 、 "abc" & "de" : +&は文字・文字列をくっつける記号。




○サンプルファイルダウンロード○(準備中)






 − Copyright(2007). 犬神犬 −