エクセルVBA 検索データの表示方法

このQ&Aのポイント
  • エクセルVBAを使用して、ヒットしたデータを表示する方法について教えてください。
  • 顧客管理ツールを作成中で、エクセルブックAに保有している顧客データをオートフィルタで検索し、ヒットしたデータを別のエクセルブックBにコピーしたいと考えています。
  • また、コピーしたデータをブックBの別のシートに表示させる際、コマンドボタンでデータの参照先を変更する方法についても教えてください。
回答を見る
  • ベストアンサー

エクセルVBA 検索データの表示方法

大変困っているので、どなたか教えてください。顧客管理ツールを作っています。 顧客データを保有するエクセルブックAがあり、1顧客につき51個のデータを持っています。オートフィルタのあいまい検索によりヒットしたデータを別のエクセルブックBの(シート名:HITDATA)へコピーします。 (シート名:HITDATA)に抽出された各顧客データを同じブックBの(シート名:USER)に1顧客ごとの情報がわかるようにデータを表示させます。そして「次へ」「前へ」「最初へ」「最後へ」のコマンドボタンを押すことで、(シート名:HITDATA)に抽出されたそれぞれのデータ参照からの表示をコマンドボタンの意味通りに変更させたいのですが、どうすればいいのでしょうか? 「最初へ」と「最後へ」は、End(elUP)とEnd(elDown)を使って何とかできるのですが、「次へ」と「前へ」が出来ません。どのようなコードを書けばよろしいか、どなたか教えてください。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。例えばですが、標準モジュールに以下を貼り付けます。 Sisyo(),Saigo(),Mae(),Tsugi()の各サブモジュールをボタンに割り付けるとテストしやすいと思います Public trg As Range Sub Saisyo()  Set trg = Worksheets("Hit Data").Range("A3")  Call Tenki End Sub Sub Saigo()  Set trg = Worksheets("Hit Data").Range("A60000").End(xlUp)  Call Tenki End Sub Sub Mae()  If trg.Row >= 4 Then   Set trg = trg.Offset(-1, 0)   Call Tenki  Else   MsgBox "これより前のレコードはありません"  End If End Sub Sub Tsugi()  If trg.Row < Worksheets("Hit Data").Range("A60000").End(xlUp).Row Then   Set trg = trg.Offset(1, 0)   Call Tenki  Else   MsgBox "これより後ろのレコードはありません"  End If End Sub Sub Tenki()  Worksheets("User Sheet").Range("D9").Value = trg.Offset(0, 0)  Worksheets("User Sheet").Range("D10").Value = trg.Offset(0, 1)  Worksheets("User Sheet").Range("D11").Value = trg.Offset(0, 2)  Worksheets("User Sheet").Range("D12").Value = trg.Offset(0, 3) End Sub ただし変数trgはSaisyo()、Saigo()が起動される前は不定なので、"User Sheet"のシートモジュールに以下を貼り付けます(シートモジュールはシート名右クリック→コードの表示で開く画面) Private Sub Worksheet_Activate() Call Saisyo End Sub

immhiro
質問者

お礼

zap35さんへ すごい!!!出来ました。 標準モジュールに記入することは全く思いつきませんでした。操作の繰り返しだと思い、ずっと各コマンドボタンのCLICKに「Loop」や「Next」を記入して悩んでいました。 ありがとうございました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

良く理解していないまま回答しますが、HITDATAシートのある行をUSERシートに表示するのにどのようなVBAを使っていますか? Worksheets("USER").Range("A1").Value = Worksheets("HITDATA").Cells(i, y).Value のようにしているなら「次へ」で「i」の値に1加算すればHITDATAの1行下を参照できます そうではなく表示する対象をRange Objectで持っているなら set trg = trg.Offset(1,) で1行下に移動することが可能です

immhiro
質問者

補足

zap35さん。早々の回答ありがとうございます。 HITDATAシートのある行をUSERシートに表示する場合には、まず、抽出したデータの最初のコードをアクティブに設定し、以下のコードを書いています。 Worksheets("User Sheet").Range("D9").Value = ActiveCell.Offset(0, 0) Worksheets("User Sheet").Range("D10").Value = ActiveCell.Offset(0, 1) Worksheets("User Sheet").Range("D11").Value = ActiveCell.Offset(0, 2) Worksheets("User Sheet").Range("D12").Value = ActiveCell.Offset(0, 3) 続く・・・。 と言うように、全てのセルにアクティブセルを参照させてoffsetにて貼り付けています。 ちなみに「最初へ」には、 Dim srow As String Worksheets("User Sheet").Range("D9").Value = Worksheets("Hit Data").Range("A3") Worksheets("User Sheet").Range("D10").Value = Worksheets("Hit Data").Range("B3") Worksheets("User Sheet").Range("D11").Value = Worksheets("Hit Data").Range("C3") 続く と、具体的なセルを指定するコードを、 「最後へ」は、 Range("D9") = Worksheets("Hit Data").Range("A60000").End(xlUp) Range("D10") = Worksheets("Hit Data").Range("B60000").End(xlUp) Range("D11") = Worksheets("Hit Data").Range("C60000").End(xlUp) 続く と記載しています。 VBA初心者なので、お願いできるならば、記載必要なコードを教えていただけると助かります。よろしくお願いします。

関連するQ&A

  • Excelのコマンドボタンでアクセスのデータを返す。

    Excelのブックに2シートあります。 シート1にはコンボボックス商品を選択させる行が複数あります。 シート2には、商品名がずらっと並んでいます。 (その商品名をシート1のコンボボックスで選択) シート1上にコマンドボタンを設定して、 コマンドボタンを押すと、アクセスのクエリで 抽出したデータ(商品名)を返したいのです。 マクロに外部データの取り込み→アクセスクエリ→ シート2の行にデータを返す。 事はできましたが、それをコマンドボタンに 上記マクロを書き込むことはできるのでしょうか? 表現が下手ですみません。。 よろしくお願い致します。

  • VBAのデータ抽出について

     列  A   B   C 行1 番号  色   形  2  1   白   丸  3  2   赤   三角  4  1   赤   丸  5  3   黄   四角 (1)Excel Sheet1にコマンドボタン1があり、それをクリックするとUserForm1が表示されます。 (2)UserForm1には「番号」「色」「形」の各コンボボックス1,2,3が配置されています。 (3)各コンボボックス1,2,3に表示されるのは、Sheet1の各列のデータです。 (4)コンボボックス1,2,3のうち1つ選択→その条件に合うデータを抽出。  コンボボックス1,2,3のうち2つ選択→その2つの条件に合うデータを抽出。  コンボボックス1,2,3のうち3つ選択→その3つの条件にあるデータを抽出。 (5)Sheet1のコマンドボタン2をクリックすると、Sheet1は元のデータ一覧に戻る。 というようなプログラムを組みたいと思っています。 (4)のデータ抽出、(5)の戻し方がよくわかりません。 どなたかご教授下さい。

  • エクセルVBA 検索表示

    エクセルVBA 検索表示 例えばBooKの名前が”DATA”で Sheet1に下記のようなデーターがある場合   A  B  C  1 w 3  w 2 え 3  r 3 q 2  y 4 w 3  う 他のエクセルBook”検索”というエクセルを開き A1セルに”3”と表示させボタンをクリックすると 下記の表のように表示させたいです。   A   B  C 1 "3” 2 w  3  w 3 え  3  r 4 w  3  う "DATA"からB列の"3"を検索されデーターそのものが A2セル以降に表示させるにはどのようにすれば 良いですか? Private Const WBHName = "DATA.xls" Private Sub CommandButton1_Click() Dim WBH As Workbook Dim SH1 As Worksheet 'WBHのSheet1をセット Dim strMyBookPath As String Dim flag As Boolean 'ブックが空いているかの判定 Dim 最終行 As Long 'SH1の最終行を格納 Dim wb As Workbook Dim lng As Long strMyBookPath = ThisWorkbook.Path If Dir(strMyBookPath & "\" & WBHName) <> "" Then flag = False For Each wb In Workbooks If wb.Name = WBHName Then flag = True Exit For End If Next wb この後に続く記述を 教えて欲しいです。

  • エクセル VBA コンボボックスで検索

    エクセルVBA初心者です。 シート1行目には工場名、2行目に見出し、3行目からデータが記入されています。 2行目に見出しとして、A列には作業者名、B列に工事番号、C列から作業時間などが記入されています。 ユーザーフォームにコンボボックス、コマンドボタンを設置し、コンボボックスには工事番号一覧が表示されるようにするところまではできましたが、コンボボックスで工事番号を選択し、コマンドボタンを実行することで、1シート内の一致する行だけを表示したいのですが、いろいろなサイトを参考に試してみたのですがうまくいきませんでした。 同じ内容のシートが複数ありますが、シート毎での検索・抽出をしたいと考えています。 どのようなコードを作成したら良いのかご教授願えたら幸いです。 よろしくお願い致します。

  • EXCEL データの検索・抽出

    シート1と2に同じようなデータがあり   A   B   C    D    E    F 1 001  100 りんご  1個  @100  \100 2 001  101 みかん 1個  @110  \110 3 002  200 なし   2個  @120  \240 4 002  201 かき   3個  @130  \360 といったように最初にコードがあり、その中に違うコードがあるのですが、これを1行ずつ見比べて無いデータ、数値が違う(個数や単価)データを抽出したいのです。 シート1と2のデータは並び方もバラバラでシート1にあるデータが2にないデータもあります(そのデータは特に必要ありません) ※無いデータと数値が違うデータは別々に抽出したいので最後にオートフィルタがかけられるようにしたいです。 EXCEL2000です。宜しくお願いします。

  • VBA(エクセル)で自動的にボタンをクリックさせるには

    いつもお世話になっております。 下記のことがしたいのですがどうやって良いのかがわからなくって困っております。 やりたいこと。 AブックとBブックが有るとします。(双方ともエクセルファイル) エクセルのVBAで、Aブックのシート上のコマンドボタンを押すと Bブックのシート上のコマンドボタンをクリックするという動きを VBAでさせたいのですがどうしてもクリックさせることができません。 試したこと。 初めは、AのボタンをクリックするとBのボタンをセレクトして SendKeysでENTERを送ってみたりしたのですがうまくいきませんでした。 何かやり方が有りましたら、お教えいただけませんでしょう。 宜しくお願いいたします。

  • エクセルでシートを探しデータをフォームにコピー

    見ていただきありがとうございます。 エクセルを使って次のようなことを考えています。 発注のあったお客様の顧客番号001~300(順不同)が毎日更新されてきます。 A1には顧客番号、B2には日付、B3とC3にはコード 数量、B4からC13にデータがあります。 .........A............ B................C 1.....001 2...............2013/7/7 3.................コード..........数量 4..................AA1.............10  5..................AB2.............15 6..................BA1.............20 7..................BB1.............5  8..................CA2.............10 9..................CB1.............15 10................DA1.............10  11................DB2.............15 12................EA1.............20 13................EB2.............30 A1がシート名になってます。 ************************************************************************ このような場合、sheet1にコマンドボタンを設けて押したとき001~300のシート名がA列に抽出され、 順番にデータが見積もり、納品書、請求書のフォームに転記できるようにならないでしょうか? 各フォームのセルは共通でB1に顧客番号、C1に日付、B4~B13コード 数量、C4~C13に数量を コピーしたい。 教えてもらえたらうれしいです。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • エクセルVBAで指定先のセルの値でデータ抽出

    エクセルVBAで作った売上帳シートのF2セルに顧客名を入力するようにしています。 その入力した顧客名のみの内容をオートフィルで抽出させるようにしたいのですが、うまくいきません。 Sub 顧客抽出() Range("B4").AutoFilter Field:=2, Criteria1:="山田太郎" End Sub でマクロを実行させるとできるのですが、『山田太郎』の部分は、F2セルに入力した顧客名で実行させたいのです。 どのようにすればできるのでしょうか?

  • Excelのハイパーリンクで

    Excelで顧客管理をしています。Sheet2に顧客一覧表を作成し、顧客名に直接ハイパーリンクを設定してそれぞれの情報シートに飛べるようにしています。最近、顧客数が1000件近くになった為、V lookup関数を使用した抽出シートを同じBOOKのSheet1に作成し、「よみ」で検索させて顧客名や担当者を表示させる試みをしているのですが、Sheet2の顧客名に設定したハイパーリンクをSheet1の抽出結果の顧客名にも反映させることはできないのでしょうか?抽出された顧客名からも直接情報シートに飛べたらとても便利になるのですが…。 宜しくお願い致します。 環境は Excel2002を使用しています。OSはWindowsXPです。

専門家に質問してみよう