- 締切済み
検索プログラム
知識不足で悩んでいるのですが どうしても以下のツールを作成したいのです。 "G5"に入力されたキーワードを シート2の"列A"で検索し該当した全ての 行のA~Hのデータをシートに一覧表示させる 動作をさせたいです。 また、"D5"にBと表示したら "列B"から検索するみたいな条件検索機能も 付けたいです。 "年齢→30歳"検索で Aさん 30歳 男 とでてきて "名前→Aさん"と検索しても上の情報が 出てくるような動作です。 (ようは小さなGoogleみたいなものを 作りたいのです) 本当に迷惑な質問ですが、よろしくお願いします。。
- usshi159
- お礼率33% (2/6)
- Visual Basic
- 回答数3
- ありがとう数0
- みんなの回答 (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)
標題は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 などが使えるかな。
- miran_2006
- ベストアンサー率25% (29/116)
シート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行目が削除される
- ベストアンサー
- Visual Basic
- エクセル 別れたシートでの条件検索
別れたシートでの検索で一致したものを探す関数について。 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です。 よろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- 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と合致する行を検索することになります。
- ベストアンサー
- その他MS Office製品
- エクセルで入力した文字を別シートで検索して・・・
エクセル初心者です。既にご質問、ご回答がありましたらすみませんがご教授願います。 シート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位まで
- ベストアンサー
- その他MS Office製品
- 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でプログラムを組むのもどうなんだろうと疑問に思ってます。
- ベストアンサー
- オフィス系ソフト