Excel VBA質問箱 IV

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

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


1038 / 13645 ツリー ←次へ | 前へ→

【76672】検索ワードが3件以上ある場合の検索・表示方法について さとちぃ 15/2/25(水) 16:48 質問[未読]
【76674】Re:検索ワードが3件以上ある場合の検索・表... kanabun 15/2/25(水) 17:11 発言[未読]
【76680】Re:検索ワードが3件以上ある場合の検索・表... kanabun 15/2/26(木) 9:25 発言[未読]
【76681】Re:検索ワードが3件以上ある場合の検索・表... さとちぃ 15/2/26(木) 10:11 お礼[未読]
【76683】Re:検索ワードが3件以上ある場合の検索・表... kanabun 15/2/26(木) 12:06 発言[未読]

【76672】検索ワードが3件以上ある場合の検索・表...
質問  さとちぃ  - 15/2/25(水) 16:48 -

引用なし
パスワード
   検索ワードが3件以上ある場合、条件にヒットした行に○を付け
その○をオートフィルタにて検索し、検索ワードの行を表示
させたいと考えてます。

検索ワードは県名です。かつ入力ワードは部分検索もできるように
したいです。(三重県の場合、三重でも検索可能)


  A       B       C      D
1              複数エリア検索
2              検索ワード1
3              検索ワード2
4              検索ワード3
 
7 会社名    県名      郵便番号  ○チェック欄
8 XYZ株式会社  愛知県     653-0028
9 ZD株式会社   三重県    991-3352  ○


以下のようにプログラムを書いてみたのですが、○がうまく入力されず
その結果オートフィルタがうまくひっかかりません。

おかしい部分をご指摘いただけませんでしょうか?


Sub エリア複数検索()
Dim i As Long
Dim kenmei1 As String  ' 県名検索条件1
Dim kenmei2 As String  ' 県名検索条件2
Dim kenmei3 As String  ' 県名検索条件3

kenmei1 = "*" & Cells(1, 3).Value & "*" ' 県名検索条件1入力セル
kenmei2 = "*" & Cells(2, 3).Value & "*" ' 県名検索条件2入力セル
kenmei3 = "*" & Cells(3, 3).Value & "*" ' 県名検索条件3入力セル

For i = 8 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 2) = kenmei1 Or _
      Cells(i, 2) = kenmei2 Or _
      Cells(i, 2) = kenmei3 Or _
      Cells(i, 5) = "○" Then
    End If
  Next i
  Range("D8:D1000").AutoFilter Field:=4, Criteria1:="○"
End Sub

【76674】Re:検索ワードが3件以上ある場合の検索・...
発言  kanabun  - 15/2/25(水) 17:11 -

引用なし
パスワード
   ▼さとちぃ さん:

>(三重県の場合、三重でも検索可能)


フィルターオプション(2007以降なら データ - フィルタ - 詳細設定)という手もあると思います。

  A       B       C      D
1              県名
2              三重*
3              静岡*
4              
5
6 
7 会社名    県名      郵便番号  ○チェック欄
8 XYZ株式会社  愛知県     653-0028
9 ZD株式会社   三重県     991-3352  

上の例だと、
検索範囲  [A7:C9]
条件範囲  [C1:C3]  [C1]セルは 表の項目名「県名」と同じにする。

という範囲設定で フィルタを実行する(詳細設定を実行する)と、

「県名」列が
「三重」で始まる行 または
「静岡」で始まる行
以外は 非表示になるので、 D列で 可視行を選択して 数式バーに ○ を入力し
そのまま Ctrl + [Enter] を押すと、可視行に一括 ○ が入力される。

この操作をマクロ記録してみてください。

【76680】Re:検索ワードが3件以上ある場合の検索・...
発言  kanabun  - 15/2/26(木) 9:25 -

引用なし
パスワード
   ▼さとちぃ さん:

> 検索ワードが3件以上ある場合

シートレイアウトを以下のようにして 詳細設定フィルタを手動で実行する操作
をマクロ記録してみてください。

    [A]    [B]    [C]     [D]
[1]            県名 ([C1]には数式:=B7 を埋め込む)  
[2]            三重*  
[3]            静岡*  
[4]            福井*
[5]          
[6]          
[7]  会社名   県名   郵便番号  ○チェック欄
[8] XYZ株式会社 愛知県  653-0028 
[9] ZD(株)   三重県  991-3335 
[10] ABC(株)  三重   991-2543 
[11] NHK(株)  京都府  876-5432 
[12] 東京商事   福井県  666-7777 
[13] 大阪硝子(株) 大阪府  777-8888 
[14] (株)東都興業 東京都  999-0001 

こちらでマクロ記録したものをお見せすると、以下のようです。
(ただし、記録マクロから .Select Selection をとって、整形してあります)

Sub Macro2()
' Macro recorded 2015/2/25 by kanabun
'
  Range("A7:D14").AdvancedFilter Action:=xlFilterInPlace, _
    CriteriaRange:=Range("C1:C4")
  
  Range("D9:D12").FormulaR1C1 = "○"  'D列可視セルに "○" を一括入力
  ActiveSheet.ShowAllData
End Sub

これをたたき台にして汎用化していけばよいのですが...

【76681】Re:検索ワードが3件以上ある場合の検索・...
お礼  さとちぃ  - 15/2/26(木) 10:11 -

引用なし
パスワード
   KANABUN様

さとちぃです。
ただいま確認出来ました!
本当にご丁寧に教えていただき、誠にありがとうございました。
マクロの記録・・・・本当に便利ですね!
これまで複数条件の検索について、書籍を片っ端から調べていたのですが
これからマクロの記録と照らし合わせながら組んでいきたいと思います。

本当にありがとうございました!

【76683】Re:検索ワードが3件以上ある場合の検索・...
発言  kanabun  - 15/2/26(木) 12:06 -

引用なし
パスワード
   ▼さとちぃ さん:

>マクロの記録・・・・本当に便利ですね!

まぁ、ついでだから、

> Sub Macro2()
> ' Macro recorded 2015/2/25 by kanabun
> '
>   Range("A7:D14").AdvancedFilter _
>     Action:=xlFilterInPlace, _
>     CriteriaRange:=Range("C1:C4")
>  
>   Range("D9:D12").FormulaR1C1 = "○"
>   ActiveSheet.ShowAllData
> End Sub

というマクロの記録で作ったものをもう少し汎用的にしたサンプルを示しておきます。

Sub AdvancedFilter()
  Dim r As Range '抽出元表範囲
  Dim c As Range '抽出条件範囲
  
  Set r = Range("A7").CurrentRegion
  Set c = Range("C1").CurrentRegion

  'r表から c条件に合うデータをフィルタオプションで抽出する
  r.AdvancedFilter xlFilterInPlace, c
  
  '1行以上抽出行があれば、D列の「可視セルだけ」に "○"
  If r.Columns(1).SpecialCells(xlVisible).Count > 1 Then
    With r.Columns(4)
      '表の1行目は項目名なので 範囲から除外する
      Intersect(.Cells, .Offset(1)).Value = "○"
    End With
  End If
  r.Worksheet.ShowAllData

End Sub

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