
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
Excel 数値の前の「 ' 」を一括...
-
病院側から早く来てくださいと...
-
VLOOKUP関数を使用時、検索する...
-
小数点以下を繰り上げたものを...
-
リンク先のファイルを開かなく...
-
エクセルで空白セルを含む列の...
-
値が入っているときだけ計算結...
-
勃起する時って痛いんですか? ...
-
MIN関数で空白セルを無視したい...
-
彼女のことが好きすぎて彼女の...
-
2つの数値のうち、数値が小さい...
-
レインボーシックスシージをし...
-
エクセルのラベルの値(文字列...
-
腕を見たら黄色くなってる部分...
-
エクセルで数式の答えを数値と...
-
検便を取ったのですが、棒から...
-
値が入っている一番右のセル位...
-
増減表のプラスマイナスの符号...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
値が入っているときだけ計算結...
-
彼女のことが好きすぎて彼女の...
-
尿検査前日に自慰行為した時の...
-
VLOOKUP関数を使用時、検索する...
-
Excel 数値の前の「 ' 」を一括...
-
精液の落とし方を教えてください
-
【Excelで「正弦波」のグラフを...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
精子に血が・・・
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
イタリアから帰国する際、肉製...
-
excelでsin二乗のやり方を教え...
-
腕を見たら黄色くなってる部分...
-
病院側から早く来てくださいと...
-
ワードのページ番号をもっと下...
おすすめ情報