- 締切済み
検索結果をセルに表示させるマクロ
こんにちは。 エクセルのマクロ初心者です。 シート1に作ったあるリストから、シート2のあるセルにキーワードを入力すると、隣のセルに検索結果を表示させるマクロと作りたいのですが…。 エクセルの検索機能を使って、キーワードを入力し、次を検索をクリックすると、シート1のリストの中の部分的に合致するセルをカーソルは選択しますよね? その選択したセル内容をシート2のセルに表示させる方法がわかりません…。 アドバイスいただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- n-jun
- ベストアンサー率33% (959/2873)
質問内容を取り違えていたらごめんなさい。 検索ダイアログ http://homepage3.nifty.com/boole/dia/act37.htm 検索ダイアログに検索したい文字列を入力し「次を検索」を押すと、 シート1内でセルが移動する。 その移動に合わせてシート2へ値を転記する。 と言った感じに受け取れたのですが。 これ以上は経験不足のため回答には至りませんでした。 的はずれですかね。
- imogasi
- ベストアンサー率27% (4737/17069)
#1,#2で満足な回答かもしれません。 しかし質問を読むと、したいことの詳細がはっきりしません。 >シート1に作ったあるリストからシート2のあるセルにキーワードを入力すると 入力規則のリストをシート1に作って(名前定義など使って)、Sheet2のドロップダウンリストから。1つを選択した結果、 あるセルに値(検索後)がセットされるのかな。 しかし考えてみてください、こんなことをこの質問に書く必要ないでしょう。手入力しようが、リストから選択しようが、VBAでセットしようが、関係ない(セルの値の来歴同質性)。質問を複雑そうに見せるだけ。 =>もう一度読み直すと、検索対象がシート1にあるということらしい。紛らわしい。リストというよりシート1のある列の(検索)データと表現すればよい。 >エクセルの検索機能を使って、キーワードを入力し これも読み返しましたか。 >エクセルの検索機能を使って、その結果検索?キーワードをするってどうするの。 「キーワードを入力し、エクセルの検索機能を使って、」の意味では。語句の並びの前後は大事ですよ。 >シート1のリストの中の部分的に合致するセルをカーソルは選択しますよね 質問者が勝手に言っているだけでは。 全文字一致の検索する方式もあります。それを知らないだけでは。 >選択したセル内容をシート2のセルに表示させる方法がわかりません Find.Selectでもやれば、次に Selection.Valueででも値が取れるのでは ----- http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_find.html http://oshiete1.goo.ne.jp/qa2358126.html http://www.k1simplify.com/vba/tipsleaf/leaf51.html ---- 例データ Sheet1 東京都 山田 大阪府 大下 鹿児島県 木村 大阪府 市川 東京都 近藤 鹿児島県 鈴木 福岡県 田中 鹿児島県 川村 コード http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_find.html を一部改変させてもらった。 Sub Find_01() Worksheets("Sheet2").Cells.Clear Dim c As Object Dim myKey As String, fAddress As String k = 1 myKey = InputBox("県名=") With Worksheets(1).Range("A1:A30") Set c = .Find(What:=myKey, LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, MatchByte:=False) If Not c Is Nothing Then fAddress = c.Address Do c.Interior.ColorIndex = 4 '明るい緑 Worksheets("Sheet2").Cells(k, "A") = c.Value Worksheets("Sheet2").Cells(k, "B") = c.Offset(0, 1).Value k = k + 1 Set c = .FindNext(c) If c.Address = fAddress Then Exit Do Loop End If End With End Sub ーー 実行して、「鹿児島県」と応答して Sheet2は 鹿児島県 木村 鹿児島県 鈴木 鹿児島県 川村 ==== こういう風に模擬実例を書けば判りやすいのです。
- zap35
- ベストアンサー率44% (1383/3079)
シート1のリストに部分一致の値が複数ある場合はどうすればよいのですか? 最初に見つかった値だけを転記すればよいのでしょうか? またマクロを実行するのは手動ですか? それとも検索キーワードが入力されたセルが変更されたときですか? 以下のサンプルはシート2のA1セルに入力してある検索キーワードでシート1を検索し、最初に見つかったセルの値をB1に転記するものです。 シート2のA1セルが変更されたらマクロが実行されるようにしますので、マクロはシート2の「シート名タブ右クリック」→「コードの表示」で開く画面に貼り付けてください Private Sub Worksheet_Change(ByVal Target As Range) Const adr As String = "A1" '検索キーワードを入力するセル Dim rng, trg As Range Set rng = Intersect(Target, Range(adr)) If Not rng Is Nothing Then Set trg = Sheets("Sheet1").Cells.Find(what:=Range(adr).Value, _ LookIn:=xlValues, lookat:=xlPart) If trg Is Nothing Then Range(adr).Offset(0, 1).Value = "該当なし" Else Range(adr).Offset(0, 1).Value = trg.Value End If End If End Sub 複数の値がヒットする可能性があるならFindNextメソッドで「次を検索」してシート2に転記することも可能ですが、そこまでは書きません。ヘルプを見て試してみてください
- pbforce
- ベストアンサー率22% (379/1719)
Sub Macro1() ' Macro1 Macro ' マクロ記録日 : 2008/1/12 ユーザー名 : Pbforce Sheets("Sheet1").Select Cells.Find(What:=Sheets("Sheet2").Range("A1"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate Selection.Copy Sheets("Sheet2").Select Range("B1").Select ActiveSheet.Paste End Sub マクロの記録と言う機能を試してください。
補足
早速ありがとうございます。 つくりたかったものがつくれました! 補足で質問なんですが、回答いただいたマクロでボタンをつくると、複数該当した場合、何度押しても次を検索してくれます。 これを一度だけというふうにするにはどうすればいいでしょうか?