• 締切済み

検索プログラム

知識不足で悩んでいるのですが どうしても以下のツールを作成したいのです。 "G5"に入力されたキーワードを シート2の"列A"で検索し該当した全ての 行のA~Hのデータをシートに一覧表示させる 動作をさせたいです。 また、"D5"にBと表示したら "列B"から検索するみたいな条件検索機能も 付けたいです。 "年齢→30歳"検索で Aさん 30歳 男 とでてきて "名前→Aさん"と検索しても上の情報が    出てくるような動作です。 (ようは小さなGoogleみたいなものを               作りたいのです) 本当に迷惑な質問ですが、よろしくお願いします。。

みんなの回答

noname#22222
noname#22222
回答No.3

スーツのデザイナーでプログラマではありません。 Excel も操作したことがありません。 そこで、No2 さんのアドバイスを手がかりにチクッと挑戦してみました。 多分、以下に示すコードを改良すれば、何とかなるかも知れません。 a1 に入力されたキーを含む列をa2:a10から見付けるというものです。 Excel2003で、なんとか動作はしています。 Option Explicit Const conCURRENT_SHEET = 1 Private Sub CommandButton1_Click()   Dim I    As Integer   Dim N    As Integer   Dim strKey As String   Dim strHani As String      strKey = Worksheets(conCURRENT_SHEET).Range("a1") & ""   strHani = "a2:a10"   If strKey <> "" Then     ReDim fdatas(99) As String     N = DFind(strKey, strHani, fdatas())     MsgBox N + 1 & "件のデータが見つかりました!"     For I = 0 To N       MsgBox fdatas(I)     Next I   End If End Sub Public Function DFind(ByVal strKey As String, _            ByVal strHani As String, _            ByRef fdatas() As String) As Integer   Dim C As Range   Dim F As String   Dim N As Integer              With Worksheets(conCURRENT_SHEET).Range(strHani)     Set C = .Find(strKey, LookIn:=xlValues)     If Not C Is Nothing Then       F = C.Address       Do         fdatas(N) = C.Value         N = N + 1         Set C = .FindNext(C)       Loop While Not C Is Nothing And C.Address <> F     End If   End With   DFind = N - 1 End Function

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

標題はVBとなっているようですが、エクセルVBAの質問ですね。 >迷惑な質問ですが、ではなく自分の勉強の程度に、多分あってない、背伸びした質問です。 (1)AdvancedFilterを使う (2)Find,FindNextを使う どちらもWEBにコード例があるはずです。 (1)は http://hp.vector.co.jp/authors/VA016119/excel/fltrcpad.txt などそうではないかな。 (2)は http://www.moug.net/tech/exvba/0050116.htm などが使えるかな。

回答No.1

シート2とか言っているのでエクセルでの操作でしょうか? カフェからなので手元にエクセルがないので確認できませんが、条件式でif文を使ってAがG5と同じならAの内容を表示する。と、同じ要領でB,C,Dって作ってあげればでませんか? それかアクセスにインポートして、アクセス側で抽出フィルターをかけるとか・・・ VBでやるなら、DAO,DACを使う。

関連するQ&A

  • Excel VBA Sheet2で指定した条件でSheet1の行削除

    Sheetが2つあるExcelブックがあります。 Sheet2で検索条件(列とキーワード)を指定し、 この条件でSheet1を検索、 Sheet1で検索にヒットした行を行削除したいと考えています。 汎用性を高める為、Sheet2で指定する検索条件は可変とし、 検索対象とする列とキーワードは任意のものを必ず指定(""は無し)。 列&キーワードをひとつの検索条件として、 Sheet2の2行目~最終行までLoopしたいのです。 InStrを使用するなど、部分的には分かるのですが、 2つの条件を同時に変えながらLoopさせる方法が 色々試してみましたが、どうしても分かりません。 VBAに詳しい方、同様の処理をしたことがある方、 どうか助けてください!宜しく御願い致します。 [Sheet1] ・・・ 元データ     A   B   C ---------------------------- 1   あ ---------------------------- 2   い   該当 ---------------------------- 3   う       閉鎖 ---------------------------- 4   え   該当 ---------------------------- 5   お ---------------------------- [Sheet2] ・・・ 行削除する範囲とキーワードを指定。     A   B ---------------------------- 1   列   キーワード ---------------------------- 2   A   あ ---------------------------- 3   B   該当 ---------------------------- 4   C   閉鎖 ---------------------------- [求めている結果] 1, 2, 3, 4行目が削除される

  • エクセル 別れたシートでの条件検索

    別れたシートでの検索で一致したものを探す関数について。 VLOOKUP関数だと列に対してだと思うのですが、行に対して検索したいです。うまく伝えられないので、例えば 【シート1】    A   B   C   1  555 2  666 3  777 4  222 【シート2】    A   B   C   D 1  777    555    222 2 3 上のようなシートがあり、 シート1のA列の番号がシート2の1の行に有ったら、 シート1のB列にOKと表示、無かったらNGと表示、 の様な関数ってありますか? どなたか解る方お願いします。

  • Google検索をして、その下に検索結果(URL)

    A列1行から、ずっと右へキーワードが記入されています。 調べたいキーワードは、400近くあります。 その1行目にあるキーワードをGoogle検索をして、 検索結果のURLだけを、そのキーワードの下に表示させたいです。 検索結果は全部で10ページくらい、大体100個のURLになるかと思います。 (youtube動画や広告などは含めないです) このようなことは、Excelのマクロでできるでしょうか? できるとしたら、どのようなマクロの記述になるでしょうか? Excel2016です。 よろしくお願いいたします。

  • InputBoxの値で検索して転記するマクロ

    1.InputBoxを3回表示させます。 2.ユーザーに入力してもらいます。 入力できるのは半角英数字のみでそれ以外は エラーメッセージを出したいです。 3.1回目は18桁か22桁以外の場合、 2回目と3回目は4桁以外の場合はMsgBoxを表示して 再入力を促します。 4.InputBoxに入力された値の3個を連結した値で Sheet2のA列を検索して 合致したらその行のG列の値を見ます。 5.G列に"済"とあったら MsgBoxを表示して 中止するか継続するか判断します。 6.継続した場合 その該当行の各列の値をSheet1にそれぞれ転記します。 Sheet2の該当行のB列→Sheet1のセルB3 Sheet2の該当行のC列→Sheet1のセルC3 Sheet2の該当行のD列→Sheet1のセルD3 Sheet2の該当行のE列→Sheet1のセルE3 Sheet2の該当行のF列→Sheet1のセルF3 7.かつSheet2の該当行のG列に 済 と転記します。 すでに済が記入されている場合は上書です。 以下のように作成しましたがエラーで動かなくて動作確認が出来ません。 どう直せばいいのか教えてください。 イレギュラー時の対応処理が必要だとも思うのですが動作しない為 思いつきません。 記述が滅茶苦茶なのですがこれが限界です。申し訳ありません。 Sub 表示板作成() Dim 検索値1 Dim 検索値2 Dim 検索値3 Dim 検索値4 Dim 判定値 Dim 判断 Dim 記録 Dim 確認 検索値4 = 検索値1&検索値2&検索値3 Do 検索値1 = Application.InputBox("型番を入力してください") If Len(検索値) < 18 Then MsgBox "18桁未満です。再入力しますか?" Loop Else Exit Do '検索値2と3も上記と同じ記述をここへ入れる '(現在省略) End If 判定値 = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 7, 0) If 判定値 = "済" Then 判断 = MsgBox("発行済みです。再度データ取得しますか?", vbYesNo) Else Select Case 判断 Case vbNo Exit Sub Case vbYes Range("B3").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 2, 0) Range("B4").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 3, 0) Range("B5").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 4, 0) Range("B6").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 5, 0) Range("B7").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 6, 0) End Select End If 記録 = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 7, 0) 記録.Value = "済" 確認 = MsgBox("これは●●用です。いいですか?", vbYesNo) Select Case 確認 Case vbNo Exit Sub Case vbYes Call 印刷 End Select End Sub

  • エクセルでHLOOKUP関数の選択範囲について

    エクセルでHLOOKUP関数を使って、検索したいのですが、 シートは、一覧表のシートと データが入っているA101、B203、C305、...シートは300シートくらいあります。 一覧表のシートには、下のような表になっていて、      A列  B列  C列  D列 ...          1003、1004、1005、1006、... 2行目 A101  3行目 B203 4行目 C305       .       .       . データのはいっているシート、A101は下の表になっています。      B列 C列 D列、・・・、Z列 2行目 1004、1005、1006、... 3行目 100、 200、 150、... 一覧表のB列の2行目には HLOOKUP(B2、シートA2のB2:Z3、2行目、FALSE) という感じで、シート名をセルA2のものを参照にして 探して表示させ、B列、C列、D列の2行目から下の行も 表示させたいのですが、うめくできませんでした。 INDIRECT関数を使ってみましたが、セル範囲が無効という エラーがでてしまいます。↓こんな感じで入力してみたのですが... SUMPRODUCT((INDIRECT($A2&"!$B$2:$Z$3"))=$B$1,(INDIRECT($A2&"!$B$2:$Z$3"))) 1つづつデータを見て手打ちはデータが多く、 どんどんデータが増えていくので できれば関数を使って表示させたいと思っています。 詳しい方いらっしゃいましたら、どうか教えてください よろしくお願いします。

  • EXCEL VBAで複数のシートの中から該当値を検索する方法について

    すいません、EXCEL VBAで複数のシートの中から該当する値を検索する方法について教えていただきたいことがあります。      Sheet1              A列   B列  C列   1行  11  りんご  31  2行  12  バナナ  32  3行  13  みかん  33  4行  14  ぶどう  34   ・   ・   ・     ・        Sheet2              A列   B列  C列   1行  31  すいか  11  2行  32  レモン  12  3行  33  パイン  13  4行  34  ざくろ  14   ・   ・   ・     ・ というデータが入っているブックについて 「全部のシートを検索し、A列に11の値が入っているセルの行数及びその行のB列の値」 をSheet1のD1セルとE1セルにそれぞれ返す方法はどうしたらよろしいんでしょうか。 For Each を使うのではないかと思って色々やってみたのですが、どうも上手く作動してくれません。 よろしくお願いいたします。

  • 別シートから値のある行を検索し、別シートに転記

    シート1とシート2があり、 シート1のA7がシート2のB列にあり、シート1のB20がシート2のその行のD列の値と同じ場合、シート2該当行のF列の値をシート1のL20に書き込むのですが、どのようにマクロを記述すればいいでしょうか 例えば、 シート1のA7に「A社」、B20に「商品A」があり、 シート2のB10に「A社」が、D10に「商品A」がある場合、F10の値をシート1のL20に返す方法です。 シート2のB列には「B社」や「C社」もあるため、B列の中からシート1のA7と合致する行を検索することになります。

  • エクセルで入力した文字を別シートで検索して・・・

    エクセル初心者です。既にご質問、ご回答がありましたらすみませんがご教授願います。 シート1のA1に入力した文字を シート2の1行目から検索 検索された文字の同列の2行目の数値を シート1のB1に表示させるにはどのようにしたらよろしいでしょうか? また、シート1のA1に入力した文字を シート2のA列から検索 検索された文字の同行のB列の数値を シート1のB1に表示させる場合はどのようにしたらよろしいでしょうか? 説明がヘタでわかりづらいかもしれませんが、2通りのご教授を宜しくお願い致します。

  • エクセルで一覧から値を検索して抽出

    エクセルで一覧から値を検索して抽出 エクセル初心者です まる一日がんばりましたがギブアップです。 (今日の成果ゼロで上司の目が痛いです。。) 下のようなシートが2つあり、 シート2[A2からA51]の売上ランキングから シート1[B2からCX9000]を検索して →商品名をシート2のB2からB51に表示させたいと思っています ※本来ならばVBAですべき計算かもしれませんが関数で教えていただけるとうれしいです 何卒よろしくお願いいたします (シート1) A列 B列   C列   D列 時間 商品あ 商品い 商品う・・ 0時 1098 7232 1211 1時 3460 5656 4342 2時 9843 9843 9322 3時 9843 9977 2323 4時 1111 3232 2323 5時 4783 8045 3874 ・・ ※商品名は約1,000個 ※時間は日付含め約8,000行 (シート2) A列     B列 ランキング  商品名 9977  (  ) 9843  (  ) 9322  (  ) 8425  (  ) 8045  (  ) ・・ ※ランキングは50位まで

  • EXCEL で検索、更新したい

    EXCEL でわからない箇所があり質問します。 前提条件 Sheet1 A列:名前 B列:年月 C列:値 データは、名前と年月で一意になるデータシートがあり マスターデータとして全データが登録されている Sheet2 A列:名前 B列:年月 C列:値 ある条件でとあるデータベースから抽出した名前と年月の一覧がある この段階で値のセルには何も入っていない やりたい事 (1)この状態でマクロを実行し、A列、B列を条件に該当する行から    C列を抽出しSheet2 にセット (2)Sheet2のC列の値を変更後、マクロの実行で    A列、B列の条件を元該当する行から、Sheet1の C列に値を更新 (3)もし、Sheet2のA列、B列の条件に該当しない行がある場合、    Sheet1に行追加しC列を格納 という事をしたいと考えています。 Sheet1 の全ての行をマクロでループさせて A列、B列をif分で比較し行を取得し、Sheet2 に張る場合、 遅くなるのであまりやりたくないと思っています Find 関数も考えたのですが、ヘルプを見る限り、条件が1つしか指定でき ないように思えるのですが、複数列の条件を指定できる Find 関数 あるいは、類似の関数とあかがあるのなら教えてください 最悪は、EXCEL ADO で、自分自身をSQLで抽出、Update、Insert を行う 事も考えていますが、 EXCELのセル内の式で、INDEX関数やDGET関数で簡単に抽出できるのに (ただ、値を変更するので式はかけないけど・・・) わざわざ、ADOでプログラムを組むのもどうなんだろうと疑問に思ってます。

専門家に質問してみよう