こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル 検索のVBAの参考プログラム

エクセルでVBAを使って、検索キーワードの有る「行」のみ表示するVBAを作りたいです。
イメージとしては、1文字入力するたびに検索が実行され、その文字の有る「行」だけが表示されるイメージです。

実行の順番として考えるのは、

10 検索用のセルにキーワードが入力される
20 一文字入力されるたびに検索を実行する
30 検索ワードの有る行を表示し、無い行を非表示にする

です。

補足
BASICの基礎知識はあります。
VBAの参考書を読み始めましたが、分かりません。。。

参考プログラム教えてもらえないでしょうか。
よろしくお願いします。

投稿日時 - 2019-05-30 22:12:39

QNo.9621613

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>検索用のセルにキーワードが入力される
>一文字入力されるたびに検索を実行する
既に他の方々から指摘がありますとおり
検索用の文字列をセルに埋めるインターフェースには
>一文字入力されるたびに
というイベントはありません。

>一文字入力されるたびに
という処理を行うには、
シート、もしくは適当なUserFormにTexBoxを配置し
そこに検索用の文字列を入力するインターフェースにする
必要があります。

今回は学習が目的らしいことから
セルに文字を埋めエンターキーを押す都度
動作するコードをSample掲示します。
もしよかったら参考にしてください。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 'A1が変化したら
 If Target.Row = 1 And Target.Column = 1 Then
  Call Samplex
 End If
End Sub

Sub Samplex()

 Const SRow = 3 '検索開始行
 Const ERow = 8 '検索終了行
 
 Dim RowCounter As Long
 Dim SearchTxt As String
 
 With Me
  SearchTxt = .Cells(1, 1).Value  'A1セルの文字列取得
  .Range(Rows(SRow), Rows(ERow)).Hidden = True
  For RowCounter = SRow To ERow
   'A列を対象に検索
   If InStr(.Cells(RowCounter, 1).Value, SearchTxt) > 0 Then
    Rows(RowCounter).Hidden = False
   End If
  Next RowCounter
 End With

End Sub

投稿日時 - 2019-05-31 21:06:18

お礼

具体的なサンプルありがとうございました
まずはいただいたサンプルを分析?してみます
ありがとうございました

投稿日時 - 2019-05-31 22:06:43

ANo.4

>一文字入力されるたびに
Excelではシートにデータを入力し、Enterを入れるか、タブなどでセルを移動などしないとシステムにデータがつたわりません。例外的にテキストボックスでは1文字入力するごとに反応させる(イベントがある)ことができますが。
それよりやさしいのは、Inputboxで検索語を受け取る方法です。
質問では、「言葉の綾」で、Enterを押すことで、探索処理開始でよいのでしょうが。表現が素人っぽい。
1セルの文字列の中に、入力した1文字が含まれているかどうかは、Instr関数でも判定できます。複数文字の検索も、これでできます。
でもセルを探したいのでは?それなら使うのはFindメソッドでしょう。
この区別も考えてないのでは。
ーー
>検索ワードの有る行を表示し、無い行を非表示にする
これも普通はやらないでしょう。こういうシートの使い方は普通ではない。
該当セルに色付けするとか文字にフォント色を変えるとかが主流かな。
該当セルが見れるように画面をスクロールする必要はあるかも。
>BASICの基礎知識はあります。
BasicとVBAは異なるものです。Basicを使ってた時代から40年以上経っています。こんなことは忘れて、勉強すること。
===
結局エクセルの(操作による目的達成が、このソフトの主流の狙いかと)操作による、目的達成そこそこ勉強しないで、VBAをやろうというのは、順序として全くおかしい。
VBAは、操作でできることについて、ほとんど、VBAコードを書いて実行する方法でもでもできる、ってなもんです。
ただし繰り返し処理は圧倒的にプログラムが早いので、人手では出来ない(やる気がしない)ように思うことができるだけです。
ーー
自分の(やりたいことの例題をする)はやる気を抑えて、WEBや書籍の例題解説項目とそのキーになるコードを、ノートに整理するなりして、そこ数を充実するのが先だ、そこでセルの位置や数を変える、シートを変えるとどうなるか
、練習してみる。
==
VBAは、プログラムとしては比較して他のものに比べてやさしい。
でもプロでは、相手にしていない人もいるかも。(ポインターや番地やオブジェクト指向などは、前面に出てないので)にしろ、プログラムを独習するのは、難しいと思う。よくわかっている先達が居るとか、金はかかるが
学校で学ぶとかしないと、習得に時間がかかるし、不得意な点が残り勝ちです。
また大切なのは、処理ロジックだと思う。それが決まると、必要な機能やはっきりして、プログラムが大筋決まる。このことを気づいていない人がおおいようだ。ロジックはそのソフトの機能を知らないと決まらないので、卵と鶏の面があるが。
ーー
・プログラム学習(特に独学)は甘く見るな
・エクセルVBAはエクセル機能の学習が先。
・本件はスモールな問題だが、すぐ大人なら思いつくような問題をやろうとしないこと。まず本などに載っているコードをやって、少し広げてみるみる経験を増やすほうが先。

投稿日時 - 2019-05-31 10:19:05

お礼

文法や構文を知っていても単語を知らないと文章が書けない、と同義でしょうか
いただいた回答を読み返し勉強します
ありがとうございました

投稿日時 - 2019-05-31 22:05:48

ANo.3

ながれだけですがこんな感じでできると思いますよ。
> 20 一文字入力されるたびに検索を実行する
Worksheet_Changeイベントで実行します。
(イベントを一時無効にします)
(ちらつきなどが気になる場合は画面の更新を止めます)
> 30 検索ワードの有る行を表示し、無い行を非表示にする
フィルターを実行します。
(イベントを有効にします)
(画面の更新を再開します)

投稿日時 - 2019-05-31 07:30:05

お礼

いただいた回答を勉強します
ありがとうございました

投稿日時 - 2019-05-31 22:04:07

ANo.2

まず確認したいのですが、VBAを習得するしない以前に、まずエクセルの操作方法には習熟されていますか?
貴方はこの方法を、VBAではなくエクセル単体の操作で実現出来ますか? あるいは非VBAで出来る部分と出来ない部分を切り分けられますか?

端的に言えば、エクセルに詳しくない人がエクセルVBAを習得しようとしてもあまり意味がありません
端的に説明したページが以下になります
http://officetanaka.net/excel/vba/tips/tips130.htm

要は「エクセルの機能でやるべきこと。出来ること」がまずあり、それをより効率的に行うためにVBAを使うべきなのです。

一応参考になるページは置いておきますが、「まずエクセルを問題なく操作できるようになる」事から開始する事をお勧めします。
http://officetanaka.net/excel/vba/tips/tips155.htm

投稿日時 - 2019-05-30 23:13:59

お礼

文法や構文を知っていても単語を知らないと文章が書けない、と同義でしょうか
エクセルの機能も勉強しようと思います
ありがとうございました

投稿日時 - 2019-05-31 22:03:17

ANo.1

> 検索ワードの有る行を表示し、無い行を非表示にする

行に色を付けて強調するとかなら、条件付き書式を使えばOKなのでは。
VBAは不要です。

できるネット - 【エクセル時短】セルじゃなくて「行全体」の色を変えたい! 条件付き書式を工夫して見やすくするワザ
https://dekiru.net/article/15257/


Excelの行の表示/非表示は、行の高さを0にしたり戻したりなので、画面チラついたり、そっちの行の方を編集中に非表示、高さ0にされたり、あんまり賢い、いい方法ではないかも。

投稿日時 - 2019-05-30 22:18:11

お礼

すみません、言葉足らずでした
目的はVBAの習得なのです
それで何から手を付けようかなということで、検索プログラムを作ってみようと思った次第です

投稿日時 - 2019-05-30 23:01:41

あなたにオススメの質問