• ベストアンサー

VLOOKUP もしくは違う方法で検索

今、会社で車の年式表を作っています。 VLOOKUPで検索できるように、車の号機を入れて、年式を出すようにしています。<=VLOOKUP(B3,B10:C65536,2,0)という関数で> でも、データの量が多く、シートのサイズ65,536行では足りなくなってしまいました。 VLOOKUP関数でも、他のやり方でも結構ですので、 良い方法を教えて戴けますか? 宜しくお願い致します。

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

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんにちは。 次のようにしても出来ると思いますよ。 65536を超える分は、新しいシート、例えば、Sheet2のB10:C65536に入れるとした場合 =IF(ISERROR(VLOOKUP(B3,B10:C65536,2,0)),VLOOKUP(B3,Sheet2!B10:C65536,2,0),VLOOKUP(B3,B10:C35536,2,0)) 現在のシートになかった場合はエラーになりますので、それを利用して、エラーであれば、Sheet2の表を検索するようにすれば出来るはずです。   また、超えた分を新しいシートに作るのが拙ければ 同じシートの未使用の部分に、超えた分の表を作る方法もありですね。 例えば同じシートの、E10:F65536に超えた分の表を作成した場合。 =IF(ISERROR(VLOOKUP(B3,B10:C65536,2,0)),VLOOKUP(B3,E10:F65536,2,0),VLOOKUP(B3,B10:C35536,2,0)) 以上です。  

chapuche
質問者

お礼

ありがとうございます! 教えて戴いた関数でちゃんと出来たので、これで 当分はやっていきます。

その他の回答 (6)

noname#22222
noname#22222
回答No.7

s_husky です。 ・Access で見積書データを管理しています。 ・ユーザーがカスタマイズできるようにExcel でも表示できます。 ・以下は、Access から Excel へ取り込むコードです。 dbsCurrent.OpenRecordset("見積書印刷データ") "見積書印刷データ"---> Select * from XXXX Where Kubun1="XXX" And Kubun2="XXX" と改造すべきかと。 Public Sub Import(ByVal strMDBName As String) On Error GoTo Import_ERR   Dim isClick    As Boolean   Dim I       As Integer   Dim strFields(14) As String   Dim strDatabase  As String   Dim dbsCurrent  As dao.Database   Dim rstEstimate  As dao.Recordset   If Not isClick Then     isClick = True     Set dbsCurrent = DBEngine.Workspaces(0).OpenDatabase(strMDBName)     Set rstEstimate = dbsCurrent.OpenRecordset("見積書印刷データ")     For I = 1 To 24       Worksheets(1).Cells(I, 1) = rstEstimate.Fields("品名_" & Format(I, "00"))       Worksheets(1).Cells(I, 2) = rstEstimate.Fields("規格_" & Format(I, "00"))       Worksheets(1).Cells(I, 3) = rstEstimate.Fields("数量_" & Format(I, "00"))       Worksheets(1).Cells(I, 4) = rstEstimate.Fields("単位_" & Format(I, "00"))       Worksheets(1).Cells(I, 5) = rstEstimate.Fields("単価_" & Format(I, "00"))       Worksheets(1).Cells(I, 6) = rstEstimate.Fields("金額_" & Format(I, "00"))     Next I     ' ヘッダー部見出し     strFields(1) = "見積書管理番号"     strFields(2) = "日付"     strFields(3) = "住所"     strFields(4) = "ビル等"     strFields(5) = "会社名"     strFields(6) = "店名"     strFields(7) = "電話等"     strFields(8) = "責任者名"     strFields(9) = "件名"     strFields(10) = "宛先名"     strFields(11) = "受渡期日"     strFields(12) = "受渡場所"     strFields(13) = "取引方法"     strFields(14) = "有効期限"     For I = 1 To 14       Worksheets(2).Cells(I, 1) = strFields(I)       Worksheets(2).Cells(I, 2) = rstEstimate.Fields(strFields(I))     Next I     isClick = False   End If Import_END: On Error Resume Next   rstEstimate.Close   dbsCurrent.Close   Exit Sub Import_ERR:   MsgBox Err.Description   Resume Import_END End Sub

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.6

エクセルで出来なくもありませんが#1の方の言うとおりでアクセスなどのデータベースへの移行をお勧めします。 現状のエクセルでなら 号機 年式 号機 年式 と複数列に展開して置く =VLOOKUP(B3,IF(COUNTIF(B10:B60000,B3),B10:C60000,D10:E60000),2,0)

chapuche
質問者

お礼

ありがとうございます。 やはり、アクセスでやる方がいいですよね・・・。 アクセスは今勉強中で、まだまだ分からないことがたくさんあるんです。なので、しばらくはエクセルで対応していこうと思っています。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

例えば、車の号機内容が不明ですが、車種-枝番の様に関連付けできるのであれば、表を2次元にする事でよりコンパクトになると思いますが如何でしょうか。 検索は、OFFSET関数とMATCH関数の組み合わせで以下の通りです。 (例)仮に行を車種、列を枝番とした表でその交点が年式とした場合、=OFFSET(基準セル,MATCH(車種,基準セル:最終行,FALSE)-1,MATCH(枝番,基準セル:最終列,FALSE)-1))で取り出しが可能です。 因みに基準セルは表の先頭行の最左セルを指します。

noname#22222
noname#22222
回答No.4

こういう場合、[メーカー][車種][排気量]などの管理区分データを入力し、区分によってデータを呼び出すと扱うデータが限定されてくると思います。 例えば、[メーカー]が4社、[車種]と[排気量]が3区分で、平均的にデータが登録されていれば、該当するデータは1820程度ということになります。 Excelは、一度しか使ったことがありません。 ですから、私が、示す改善要領は、非常に、初歩的なものでExcelの機能を利用したもでではありません。 1、一度、全体のデータを区分けする方法を考える。 2、区分に基づいてデータを区分数だけのファイルに出力する。 3、Excel では、指定された区分のデータを呼び込んで表示し編集する。 Access等へ転送し、Excelで抽出表示するというのが一般的と思いますが、その前段としての提案です。 ※ファイル出力、ファイル入力が至難であれば、区分毎の別シートをクリエイトし、区分毎に検索してもOKかと!

chapuche
質問者

補足

ありがとうございます。 今、アクセスは超初心者で、本当に勉強不足なんです。でも、よろしければ、"Accessへ転送し、Excelで抽出表示する"というのを、もう少し詳しく教えて戴けますか?Accessへ転送するやり方だけは分かります。 宜しくお願い致します。

  • sou999
  • ベストアンサー率21% (15/69)
回答No.2

あまりいい方法ではないかもですが、号機・年式を別シート2枚にしてVlookupを二行作って幅0にしてもう一行IFで拾っていくというのはどうでしょうか?処理重そうですけど

noname#123709
noname#123709
回答No.1

ACCESSへ移行された方がよいかと思いますよ。

関連するQ&A