• ベストアンサー

マクロで非表示シート内にあるデータの検索方法が知りたい

マクロの勉強をしているのですが、練習で郵便番号検索ツールを作成したいと思っています。 概要  まず、郵便番号7桁を入力する。変換ボタンを押すと、住所を検索し、漢字で住所を表示し、読み仮名をひらがなで表示する。 とまぁ、こんな感じのものを作りたいと考えています。 で、取りあえず郵便番号と住所(読み仮名つき)一覧表を作りました。 一覧表は・・ A1には郵便番号、A2には都道府県名、A3には市区町村名、A4には町名、A5には市区町村名(ふりがな)、A6には町名(ふりがな) となっています。 さて、ここからが問題なのですが・・・ ユーザーフォームを使ってこれを使えるようにしたいのですが、検索方法がわかりません。 イメージとして、テキストボックスに入力してもらい、変換ボタンを押すと、エクセルシートの中から該当する郵便番号を検索し、その隣にある内容を変数に代入し、持ってこようと思っていました。 でも、ここで問題が・・・ 検索してるところが見えるとかっこ悪い 笑 というわけで・・もうちょっと何とかしたいんですけど、シートを非表示にしちゃうと、マクロの記憶で得た検索方法はエラーになっちゃうんですよね。。 そんなわけで、これをどうにかできないか考えています。非表示シートの検索方法があれば一番いいのですが、もしない場合は代替案を教えていただけるとありがたいです。 よろしくお願い致しますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
noname#187541
noname#187541
回答No.3

こんにちは。 検索の前に一覧表の作り方ですが、行と列を逆にした方がいいです。 データ数がどのくらいか分かりませんが、項目が行方向ということはデータは列方向と言うことですよね?列は256しかないのですぐ足りなくなるのでは?と思います。 検索方法ですが、一般機能で言うと 編集→検索 をマクロで行っているのでしょうか? だとすれば見つけたセルがアクティブになるので「マクロの記録」で得たコードでは検索部分のコードの最後にActivateと付いていると思います。 Activeにするのではなくて、Range型のオブジェクト変数に検索結果のセルを入れてっこの変に対して処理をするようにすればいいと思います。 こんな感じです。例えばSheet1でcを検索しその右隣の値を表示します。 Dim myrng As Range Set myrng = Worksheets("Sheet1").Cells.Find(What:="c", _ After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext,MatchCase:=False, _ MatchByte:=False, SearchFormat:=False) MsgBox myrng.Offset(0, 1).Value どうでしょうか?

kenken0
質問者

お礼

あ、ズバリでした。すごい。。 ありがとうございます。 今回はこの方法で行きたいと思います。 ご解答いただいた皆様 ありがとうございました。

kenken0
質問者

補足

書き方間違いました^^; A1、B1、C1と列方向ですね。。 データ件数が12万件くらいなので行方向に項目を 割り振ったらシートがいくつあっても足りません 笑 ご指摘ありがとうございます&失礼しました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>シートを非表示にしちゃうと、マクロの記憶で得た検索方法はエラーになっちゃうんですよね 今日朝に回答した、別質問の回答を少しいじくって、 Sub test01() Worksheets("Sheet1").Visible = xlVeryHidden ' Worksheets("Sheet1").Visible = True Worksheets("Sheet1").Activate On Error GoTo err cd = InputBox("コード") dt = CDate(InputBox("日付")) d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row i = Worksheets("Sheet1").Range(Cells(2, "A"), Cells(d, "A")).Find(cd).Row j = Worksheets("Sheet1").Range("B1:AJ1").Find(dt).Column MsgBox Worksheets("Sheet1").Cells(i, j) Exit Sub err: MsgBox "見つかりません" End Sub を実行すると、うまく検索しましたが。 私の思い違いがあるかも知れませんので、質問者の自己テストや後続の回答によってチェックしてみてください。 もしOKなら、Findメソッド、Offset、シートへ実行用コマンドボタン貼り付けで(フォームを使わなくても)できると思います。

kenken0
質問者

お礼

今回はアクティブにしないことによってエラーが無事解消できました。 教えて頂いた書き方も試してみようと思います。 ありがとうございました

回答No.1

こんにちは。 現在どのようにして、検索しているのか判りませんが、 非表示のシートをアクティブにしようとしていませんか? 例えば、Sheet1が非表示だとして Sheets("Sheet1").Select や Sheets("Sheet1").Activate などとしていませんでしょうか? Find メソッドはシートをアクティブにしなくても Set r = Sheets("Sheet1").Cells.Find(What:=検索値) のようにして検索値の有るセルを取得できますよ 。

kenken0
質問者

お礼

ありがとうございます。マクロの記憶を利用していたので、ズバリアクティブにするにしていました 汗 これで無事に検索できるようになると思います。 ありがとうございました

関連するQ&A

  • EXCELでの検索マクロを作りたいのですが

    マクロの初心者です。氏名の検索マクロを作成したいのですが分かりません。 A列:名前 B列:郵便番号 C列:住所 と 名前等のデータを(ランダムに)入力したシート1を作成し、 シート2にシート1の「A列:名前」から性(たとえば青木)で検索して検索ボタン(マクロボタン)を押して該当データを表示させるようにしたいのですが。

  • VBAを使用してデータ抽出したい

    シート1に京都府の全市町村(町名・番地まで)の郵便番号一覧があるとします。 (A列に郵便番号 B列に市町村 C列に番地 という感じ)シート2でMsBOXで "検索したい住所入力" と出力されて 入力すると 該当する住所が表示されるようなVBAは作成可能でしょうか?うまく表現できませんがぜひご教授ください。

  • エクセル ツールバーからの呼び出しマクロのシート非表示 

    他部署から受け取った一覧表の内容をチェックするエクセルマクロをツールバーのボタンに割り当てていますが、一覧表を開いておいてボタンを押すとマクロを組み込んだエクセルシート(VBA上でのThisWorkbook.Sheet)が表示されるようになりました。以前は一覧表の裏に隠れていたはずなんですが、目障りなのでこのシートを表示しない方法を教えてください。複数体制なので共有ドライブに置いたエクセルマクロを各自が自分のツールバーに組み込んで使っています。 (アドインでは修正発生時に各自が再度取り込む必要があると思って避けています)

  • 現在管理している顧客住所録の郵便番号と市区町村名を最新のものにする必要

    現在管理している顧客住所録の郵便番号と市区町村名を最新のものにする必要があります。 合併などで郵便番号や市区町村名が変わっている地域の情報を最新のものにする方法を教えてください。 ※2002年1月から顧客住所を管理しています。 現在持っている住所録を読み込ませて、自動で最新の住所に変換できるツールはありませんでしょうか? 有料、無料問いません。 そういったツールがなければ、郵便番号もしくは市区町村地域名が変わった地域の一覧表はないでしょうか? よろしくお願いします。

  • エクセルのVLOOKUPで「検索値」を複数設定したいのですが。

    エクセルのVLOOKUPで「検索値」を複数設定したいのですが。 例えば A列 都道府県名 B列 市区町村名 C列 町名 D列 番地 E列 人口 F列 面積 という表Aがあります。 自分の持っている都道府県名、市区町村名、町名リスト(表Aの中から数個だけピックアップしたもの)に人口を(表Aから引っ張ってきて)投入したいのですが、町名だけでVLOOKUPを使うと、複数個の同じ町名があるためにうまく行きません。 そこでA、B列の都道府県名、市区町村名も「検索値」として含めて、3列とも合致するものを引っ張ってきたいのですが、どうしたらよいのでしょうか?

  • マクロで「別シートを検索・元シートへ転記」したいのですが・・・

    昨夜から20時間くらい悩んでおります・・・。どなたかよろしくお願いします。 (概要) エクセルで 「オーダー受付」と「顧客データ」の2つのシートがあります。 ●「オーダー受付」のセルには、K3電話番号 K4お名前 K5住所1 K6住所2 と縦に表示用セルを設けています。 ●「顧客データ」のセルには、A1 A2 A3 A4 と横に上記データを記録してあり、すでに1万行を超えています。 (やりたい事) ●お客様から電話があったときに「オーダー受付」シートの K3に電話番号をいれマクロを実行すると、「顧客データ」から残りの項目である 名前・住所1・住所2 が転記されるようにしたいです。 ●もし新規のお客様で、検索結果なしの場合は引き続きお名前・住所1・住所2 とお尋ねし、後からコピペでデータ一覧へ足しています。この辺の操作は検索・転記が解決してから挑戦しようと思っています。 是非、ご回答ください。

  • Excel マクロ 検索結果を別シートにコピー

    Excel2010の「ホーム」タブの「編集」グループより「検索と選択」の「検索」で住所録の「名前」を検索しています。 「検索する文字列」に「名前」を入力して「すべて検索」をクリックすると検索結果がでますが、検索結果の表示方法が「セル番地」だけを表示しているため一つ一つそのセルをクリックして内容を確認しています。 これを検索された複数のデータを住所録一覧表の項目名に合わせてまとめて別シートにコピーしたいのですが・・・。 Sheet1に次の項目名で住所録を作成しています。 A列:会社名 B列:名前 C列:住所 D列:電話番号 「名前」で検索して、検索されたデータのA列からD列までのデータを別シート(Sheet2)の同じ表にコピーしたいのです。 名字だけの検索ですので結果が複数ある場合は、すべての検索結果を数行にわたってコピーできればいいのですが・・・。 このメニューのコマンドを使わなくても、何か他の方法でVBAの例があれば教えていただきたいと思います。 宜しくお願いします。

  • エクセルマクロで住所を比較しコードを代入したい

    エクセル2003を使っています。 シート1に  A列にコード  B列に都道府県名  C列に市区町村名 の表があります。 シート2は  B列に住所 が入っています。 このシート2の住所とシート1の都道府県名と市区町村名をマッチングさせて シート1のコードをシート2のC列に代入したいのですが マクロを使ってやりたいのですがどうしたらよいでしょうか? よろしくお願いします。

  • 【Excel】マクロでメッセージを表示する

    Excel2003を使用しています。 Aという名前の一覧表を作成するマクロがあります。 マクロAは『Sheet1』を選択した状態で正しく実行されますので、うっかり他のシートを選択した状態で、マクロAを実行してしまうと、一覧表が正しく作成されません。 こうなった場合、誤って作成された一覧表を消去して、もう一度やり直せば済むことなのですが、『Sheet1』を選択していない状態でマクロAを実行しようとすると、何かメッセージ(例えば、“Sheet1を選択後、実行してください”みたいな)が表示されるようにすることはできるでしょうか? 参考書にダイアログボックスにメッセージを表示させるマクロが載っていましたので、マクロAにそのようなコードを追加する(?)ことで可能かな??と思い、質問させていただきました。 よろしくお願いします。

  • VBAを使用して住所自動出力できますか?

    シート1に京都府の全市町村(町名・番地まで)の郵便番号一覧があるとします。 (A列に郵便番号 B列に市町村 C列に番地 という感じ)シート2でMsBOXで "検索したい住所入力" と出力されて 入力すると 該当する住所が表示されるようなVBAは作成可能でしょうか?うまく表現できませんがぜひご教授ください。

専門家に質問してみよう