皆様、毎度お世話になっております。
いまExcelでマクロを組んでおりまして、色々なサイトを見て勉強しながら作成しております。
通常、VLOOKUP関数のみで参照範囲から検索すると、条件が1つのみになってしまうのですが...
(本来なら条件を複数設定できるのかもしれませんが、、、何分、私が知識不足でして)
皆様のお手を煩わせて申し訳ありませんが、ご教授いただけませんでしょうか?
参照元データを「Book2.xls」、マクロを走らせるデータを「Book1.xls」とします(office2000を使用しております)
「Book2.xls」には以下の内容を入力したとします。
A B C
1 1 a ア
2 2 b イ
3 3 c ウ
4 4 d エ
5 5 e オ
6 6 f カ
7 ・
8 ・
「Book1.xls」の標準モジュールに以下のマクロを組んでいます。
'===================================================
Sub main()
Dim rs As Object
Dim sql_str As String
Dim retcode As Long
retcode = open_ado_excel(ThisWorkbook.Path & "\book2.xls")
' ADOでExcelブックBook2.Xlsに接続
If retcode = 0 Then
f_num = Application.InputBox("input find number")
'↑ 検索するナンバーを入力
If TypeName(f_num) <> "Boolean" Then
sql_str = "select [名称] from [Sheet1$] where [NO] = " & f_num & ";"
'ナンバーを検索するSQLの作成
Set rs = exec_sql(sql_str, retcode) 'SQLの実行
If retcode = 0 Then
If rs.EOF <> True Then ' 見つかった
MsgBox rs![名称]
Else '見つからない
MsgBox "not found"
End If
rs.Close
Set rs = Nothing
Else
MsgBox Error$(retcode)
End If
End If
call close_ado()
Else
MsgBox Error(retcode)
End If
End Sub
別の標準モジュールに
'=============================================================
Public cn As Object 'コネクションオブジェクト
'=============================================================
Function open_ado_excel(book_fullname As String) As Long
'ADOでExcelブックに接続する
'in book_fullname -- 接続するブックのフルパス
'ot open_ado_excel-- リターンコード 0-正常 その他--エラー
On Error Resume Next
Set cn = CreateObject("ADODB.Connection")
link_opt = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & book_fullname & ";" & _
"Extended Properties=Excel 8.0;"
cn.Open link_opt
open_ado_excel = Err.Number
On Error GoTo 0
End Function
'=================================================
Sub close_ado()
'接続したExcelブックの切断
On Error Resume Next
cn.Close
Set cn = Nothing
On Error GoTo 0
End Sub
'=================================================
Function exec_sql(sql_str, retcode) As Variant
'SQLの実行
'in : sql_str --- 実行するSQL
'ot : retcode ---リターンコード 0-正常 その他--エラー
'exec_sql--------SQLを実行した結果
' 今回は、Recordsetオブジェクトを返す
On Error Resume Next
Set exec_sql = Nothing
Set exec_sql = cn.Execute(sql_str)
retcode = Err.Number
On Error GoTo 0
End Function
このマクロだと条件が1つのみになってしまうのです。
これを複数の条件を指定できるようにしたいのです。
(できれば、ユーザーフォームで複数条件を指定したいのですが・・・)
どのようにマクロを組めばよろしいのか、恐れ入りますがご教授ください。
なるべく早い回答をお願いします。
システムへデータを上げなければならないので・・・
私情を挟み申し訳ありませんが、何卒宜しくお願いします。
リストを、長さが動的に変化する配列のデータ型とみなし以下の関数を作成せよ。
1、リスト中の要素を参照する関数refは(ref l n)の形式である。ここに、lは参照するリストである。nは整数値であり、l中の参照する要素の位置を示す。
2、リストに要素を追加する関数addは(add e l n)の形式である。ここに、eは追加する要素、lはeを追加するリスト、nは整数値であり、lのn番目の要素の直前にeを追加することを意味する。
3、リストから要素を削除する関数delは(del l n)の形式である。ここに、lはリストである。nは整数値であり、lのn番目の要素を削除することを意味する。
Lispで作成しなければなりません。
どのようにプログラム組めばよいのかわかりません。教えてください。