• ベストアンサー

エクセルvlookup関数で値を取得したいリストの行数が多すぎてエクセ

エクセルvlookup関数で値を取得したいリストの行数が多すぎてエクセルで表示できない 単純にa列をキーにしてb列の値を取得したいですがリストの行数が65***行以上でエクセルで開くと欠落します。リストはcsvでオープンしないで値を取得することはできますか? 宜しくお願いいたします。

  • fsoyu
  • お礼率76% (13/17)

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

面白半分でユーザー定義関数を作成してみました。 A1に検索する値があるとして、B1に次の様に入れます。頭の1は検索する値がcsvの何列目かを示し、末尾の2は引用する列番です。 =extVlookup(1, A1, "C:\sample.csv", 2) 10万行のcsvで試験してみましたが、予想通り遅くて実用的ではないです。 'Microsoft ActiveX Data Object 2.x Libraryに参照設定要 'Schema.iniを同じフォルダーに作成しないと「抽出条件でデータ型不一致」のエラーになる事がある 'Schema.iniの内容例 '[sample.csv] 'ColNameHeader = False 'CharacterSet = OEM 'Format = CSVDelimited 'Col1=F1 Char Width 255 'Col2=F2 Char Width 255 Function extVlookup(searchColNo As Long, searchVal As Variant, fileFullPath As String, refColNo As Long) As Variant Dim filePath As String, fileName As String Dim strSQL As String Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim lastBackSlashPos As Long Dim errFlag As Boolean fileFullPath = UCase(fileFullPath) If Right(fileFullPath, 4) <> ".CSV" Then extVlookup = CVErr(xlErrValue) GoTo errorHandle End If Set CN = New ADODB.Connection lastBackSlashPos = InStrRev(fileFullPath, "\") fileName = Mid(fileFullPath, lastBackSlashPos + 1, Len(fileFullPath) - lastBackSlashPos) filePath = Left(fileFullPath, lastBackSlashPos) CN.Provider = "Microsoft.Jet.OLEDB.4.0" '見出し行を対象としない CN.Properties("Extended Properties") = "Text;HDR=NO" CN.ConnectionString = filePath CN.Open 'Schema.iniと矛盾するとNG If IsNumeric(searchVal) Then strSQL = "SELECT * FROM " & fileName & _ " WHERE [" & Replace(fileName, ".CSV", "#CSV") & "].F" & CStr(searchColNo) & _ "=" & searchVal & ";" Else strSQL = "SELECT * FROM " & fileName & _ " WHERE [" & Replace(fileName, ".CSV", "#CSV") & "].F" & CStr(searchColNo) & _ "='" & searchVal & "'" End If Set RS = New ADODB.Recordset RS.CursorLocation = adUseClient RS.Open strSQL, CN, adOpenStatic, adLockOptimistic If RS.RecordCount <> 1 Then extVlookup = CVErr(xlErrValue) GoTo errorHandle End If extVlookup = RS.Fields(refColNo - 1) errorHandle: If RS.State = 1 Then RS.Close Set RS = Nothing If CN.State = 1 Then CN.Close Set CN = Nothing End Function

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

MATCH関数やCOUNTIF関数などを作業列に入力しておき、その列での値を利用してB列のデータを表示させるようにしてはいかがでしょう。

fsoyu
質問者

お礼

リストの行数は141千行ありました リスト分割すれば何とかなりますが 1回でできる方法があれば・・・

関連するQ&A

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • エクセル 関数 ISERROR VLOOKUP

    エクセル関数でご教授お願いします。 今「LIST」シートのA列に品番、B列に単価が入力されています。 これを「入力」シートのA列1行目に品番を入力して、B列1行目に単価を引っぱってくる関数を作りました。 以下関数です。(「入力」シートのB列の関数です) =IF(ISERROR(VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)),"品番ミス",VLOOKUP(A1,LIST!$A$1:$B$3,2,FALSE)) 品番が間違っている場合は”品番ミス”と入力されます。 この状態で問題なのは、入力シートのA列に何も入力されていない時に、B列に品番ミスと入ってしまう事です。 何とか、空白にしたいのですがいい方法はありませんでしょうか?

  • VLOOKUPでは値が返せられないです。

    本当のドシロウトです。 用語での質問の仕方すら難儀しています。 VLOOKUPでは出来ませんでした。 =VLOOKUP(A1,C:D,2) とやりましたら、B列に関係のないC列の文字列を拾っていまいます。 =VLOOKUP("*"&A1&"*",C:D,2,FALSE)も出来ませんでした。 A列にはそれぞれセル内に改行された文字列が入っておりセル内行数も一定ではございません。文字列の行の順番も不規則で、 5000行位まであります。(>_<) 例を作ってみました。↓         A                        -----------------------                       色別リスト:赤  1行  色別リスト:赤:りんご     果物:りんご     色別リスト     色別リスト:赤:りんご:青森産      果物:りんご     ---------------------------------------     野菜:大根 2行  種類:根野菜     色別リスト:白     色別リスト:白:大根   ---------------------------------- C列に   C --------------------- 色別リスト:白 --------------------- 色別リスト:ピンク -------------------- ・・とやはり数千行あります。 A列以外は、セル内改行文字列はございません。 A列各セル内にC列の文字列が含まれている場合、C列右隣のD列の値をB列に返したいのですが、、、ご教示お願い申し上げます。 会社で使っているオフィスは2007なのですが、今自宅では2000を使っています。

  • Excelの値取得関数について

    Excelで表を作成する際、コードから値を取得する方法について教えてください。 以下のようなことをやりたいです。 画像の場合、 1. 社員コードに"A001"を入力。 2. 各マスタの領域にある値を取得し、検索結果の各セルに値を表示。  ※B5,B6 の部分に値を取得する関数を設定したいです。 社員名は、C4のセルに記載したような、VLOOKUPで値を取得できました。 出身地と所属部署を取得する場合、 VLOOKUP に VLOOKUP を入れるような形で ないと取得できないのでしょうか。 ※出身地  社員コード"A001" をキーに社員マスタから出身地"T001"を取得し、地方マスタより、"青森県"を取得したいです。 ※所属部署   社員コード"A001" をキーに社員マスタから所属部署"S001"を取得し、部マスタより、"総務部"を取得したいです。 アドバイスをお願いします。

  • エクセルでVLOOKUP関数

    お世話になっています。 Excel2003を使っています。 元となる名簿のブックAがあります。 それぞれ、違うブックにVLOOKUP関数を使って、範囲をAからリンクさせるようにしています。 ブックAの名簿は人が増えたり、個人データを新たに追加する毎に行や列が増えていきます。 今のところ =VLOOKUP(A1,'[ブックA.xls]名簿'!$A$3:$W$100,3,0)) この式を違うブックに入れているのですが、 ブックAの行数が増えても、「100」のまま動きません。 ブックAの行数・列数が増えたら、リンクしてる関数を入れている、他ブックも自動的に増えるようにする方法はありますか? 初歩的な質問ですみませんが、よろしくお願いします。

  • エクセルで別シートの値を取得したいです。

    エクセルで質問があります。 別シートからセル値を取得したいです。 ただ、セル番地は行番号、列番号で指定し、 行、列番号はセルに入力してある値を使いたいです。 例 Aシート(値格納シート) B1セル値=1000 -------------- Bシート(値取得シート) A列=行番号入力 B列=列番号入力 C列=Aシートの取得関数 A2セル値=1 B2セル値=2 C2セル=1000(取得値) C2セルの関数に、A2とB2の値を使って Aシートのセル値を取得したいです。 よろしくお願いします。

  • VLOOKUP関数をVBAで書くには

    EXCEL VBAの初心者です VLOOKUP関数をVBAで書きたいのですが、よくわかりません すいませんがどなたかご教授、願えないでしょうか? sheet1     sheet2 A    B  A    B      名称 CD    名称 CD 滋賀県 25     滋賀県  25 京都府 26     大阪府 27 大阪府 27 兵庫県 28     兵庫県 28 sheet2のA列をキーにsheet1のA列と照合して sheet2のB列にsheet1で一致した行のB列をコピーする VLOOKUP関数を使うと、sheet2のB2は =IF($A2="","",VLOOKUP($A2,Sheet1!$A$2:$B$5,2,0)) としたら、25を得ることができました VBAでする場合、どのように書けばいいのでしょうか? よろしくお願いします

  • Excel 2007のVLOOKUP関数について

    Excel 2007のVLOOKUP関数について教えてください。 A列に(大根、人参、キャベツ)の3項目をプルダウンメニューで 選べるように設定します。 A列にある項目を選択した時に B列にそれぞれの数字が自動で表示されるように 設定したいと思います。 大根→1 人参→2 キャベツ→3 A列のプルダウンメニューは「データ入力規則」の元に値に 直接項目を入力します。 VLOOKUP関数を使用すると思いますが、 どのような方法で使用すればよいのかわかりません。 教えてください。

  • vlookup関数とHlookup関数の組み合わせ

    Excelの関数で、HLOOKUPやVLOOKUPがありますが、この 2つの関数を合わせた様な感じで、列の値と行の値の 2条件がマッチした値を別シートに作成した集計表から 取得させたいですがどの様にすればよいでしょうか。 質問が分かりにくいですがどうぞよろしくお願い致します。

  • vlookupの結果があるセルの書式を取得したい

    vlookupの結果があるセルの書式を取得したい =VLOOKUP(検索値,範囲,列番号,検索の型)で値を取ってくることは 出来ますが、その値の入っているセルの書式を取得したい。 Sheet1の セルA1に、検索したい値が入っていて、 セルB2にVLOOKUP関数が入り。 範囲はSheet2のA1:D1000となっていて、 列番号に4と入っていて10行目に 検索値と一致する値が入っていた場合に、D10の値は VLOOKUP関数で持ってこれますが、D10のセル書式を セルB2に反映させたいのですが、どのようにすれば良いでしょうか? VBAでプログラムしないとダメでしょうか?

専門家に質問してみよう