
ExcelでVlook関数を使ってデータを検索していたのですが、マスタの件数(15,000件)と数式が多くなってしまいブックの容量が大きくなってしまって動きづらくなってしまったので、マスタと検索のブックに分け、マクロを使おうと思ってます。
簡単にいうと、
【マスタブック】
A列 B列
1 1 あ
2 2 い
【検索ブック】
A列 B列
1 2 い
2
検索ブックA列1行目に、「2」を入力してマクロを実行すると「い」が表示されるようにしたいのです。
開いておくのは検索ブックはのみです。
Sub 転記()
Dim マスタ As Workbook
Dim 検索 As Workbook
Dim 行, 数字 As Long
Dim Bname As String
Bname = ActiveWorkbook.Name
Workbooks.Open Filename:="C:\Documents and Settings\mi200274\デスクトップ\\マスタ.xls"
Workbooks("マスタ.xls").Activate
Set マスタ = Workbooks("マスタxls")
Set 検索 = ThisWorkbook
Set ws1 = マスタ.Worksheets("Sheet1")
Set ws2 = 検索.Worksheets("Sheet1")
On Error Resume Next
行 = 1
Do Until ws2.Range("A" & 行).Value = ""
数字 = ws2.Range("A" & 行).Value
対象 = ws1.Range("A:A").Find(数字, lookat:=xlWhole).Row
ws2.Range("B" & 行).Value = ws1.Range("B" & 対象).Value
行 = 行 + 1
Loop
ActiveWorkbook.Close
Workbooks(Bname).Activate
End Sub
以上のマクロを知人に教わりながら作ってみたのですが、マスタを一度開かないと検索はできないのでしょうか?
重たいデータなのでできれば開かずに検索して値を転記したいので、そのようなコマンド等ご存知の方教えてください。
ちなみにマクロは「新しいマクロの記録」から作る程度の初心者です。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
VBEのツール-参照設定で
「Microsoft Active Data Object 2.x Library」
にチェックを入れる。⇒2.xは私の所だと2.8であった。
マスターシートの1行目はA1に「番号」B1に「記号」としておく。
Sub TEST()
Dim dbcon As New ADODB.Connection
Dim dbres As ADODB.Recordset
Dim r As Range
dbcon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=C:\Documents and Settings\mi200274\デスクトップ\\マスタ.xls;"
Set dbres = New ADODB.Recordset
dbres.Open "[Sheet1$A:B]", dbcon, adOpenForwardOnly, adLockReadOnly
For Each r In Range("A1", Cells(Rows.Count, 1).End(xlUp))
dbres.Filter = "番号 = " & r.Value
If dbres.EOF Then
r.Offset(, 1).Value = "×"
Else
r.Offset(, 1).Value = dbres!記号
'dbres.MoveFirst
End If
Next
dbres.Close
dbcon.Close
End Sub
マスターの方は閉じていても出来るはずです。
ただADOは2回目なので的はずれでしたらごめんなさい。
⇒ネットワークでの確認も環境がないので出来てません。
速度についてはどうかな・・・?
この回答への補足
回答ありがとうございました。
さっそくマクロを実行してみましたが、
dbcon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=C:\Documents and Settings\mi200274\デスクトップ\\マスタ.xls;"
この部分でデバッグになり、F1を押して確認しましたら
「選択内容があいまいです。
キーワードが選択されていないか、あるいは統合開発環境 (IDE) のコンポーネントについてのヘルプ トピックを表示しようとしました。キーワードを選択していた場合には、1 つのキーワードのみを指定するように、選択範囲を変更し直してください。IDE についての情報は、以下のトピックを参照してください。
コード ウィンドウまたはモジュール ウィンドウ
イミディエイト ウィンドウ
ローカル ウィンドウ
オブジェクト ブラウザ
ウォッチ ウィンドウ」 と表示されました。
どうすればいいのでしょうか(T_T) 教えてください。
また大変申し訳ないのですが、初心者なので分からないことがあるので教えてください。
VBEのツール-参照設定で「Microsoft Active Data Object 2.x Library」にチェックを入れましたが、他にもたくさん項目がありました。
自分の使用したい、作りたいマクロで標準設定されていない機能を使うようにできる項目が参照設定にある項目なのですか?
お忙しいとは思いますが回答お願いします。
No.5
- 回答日時:
n-junです。
こちらに回答する際に半角スペースを全角に置換しましたが、余計な部分まで行なっていたようです。
dbcon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=C:\Documents and Settings\mi200274\デスクトップ\\マスタ.xls;"
上記を全角スペースから半角に修正したものと入替えて下さい。
No.4
- 回答日時:
n-junです。
>「選択内容があいまいです。~
は
⇒この部分でデバッグになり、F1を押して確認しましたら
の動作によって出てきたメッセージですよね?
欲しいのはこの動作をやる前に出ていたエラーメッセージなんですけど。
こちらはWin:XP Excel:2002 で検証しました。
以降のバージョンだと検証できないかも知れません。(原因が不明)
この回答への補足
ご回答ありがとうございました。
このメッセージでよろしいでしょうか?
「実行時エラー'-2147467259(80004005)':
インストール可能なISAMドライバが見つかりませんでした」
こちらはWin:XP(professional2003SP2) Excel:2003です。
検証は難しいでしょうか?
お時間があるときで結構なので回答お願いします。
No.1
- 回答日時:
質問の答えにはなっていませんが、疑問に思ったので。
マクロ使うということを前提に。
マスターでは沢山のSheetを使っているのでしょうか、もしそうでなければマスターの中でデータシートから検索シートを追加して必要データを移し処理したほうが簡単な気がします。
やり方は、マスターのB列の"い"からそのアドレスを求めそれを起点に必要な範囲を決めそれを検索シートへコピー計算式をセット必要な結果を得る。
こうすれば新たなブックを作る必要はないと思います、データのフォーマットや処理の内容が分からないので勝手な思い込みかもしれませんが!!
この回答への補足
回答ありがとうございました。
説明不足ですみません。
マスタシートをサーバーにおき、複数のPCからそれぞれの検索ブックで見にいこうと思っています。
具体的にいうと、受注台帳が7つのPCにあり、それぞれの受注台帳でマスタコードを入力すると顧客名・電話番号がマスタから転記される仕組みにしたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントの詳しい方教え...
-
「パワーポイント」タイトルマ...
-
マクロ:別ブックのデータの値...
-
パワポのスライド番号に関する質問
-
パワーポイントのレイアウトで...
-
パワーポイントで全てのページ...
-
パワーポインタ2000にてデザイ...
-
パワポ2011マスタの画像を一枚...
-
データの並び替え
-
デバイスネット
-
Powerpoint2000 タイトルマスタ...
-
パワーポイントのタイトル欄不...
-
powerpoint マスタ 編集
-
パワーポイント画面にそのファ...
-
30分間の発表の原稿
-
ExcelVBAにて既に開かれているP...
-
パワーポイントで一ページだけ...
-
パワーポイント アニメーショ...
-
autorunについて
-
パワーポイントの新規作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイント画面にそのファ...
-
パワーポイント 配布資料で印...
-
パワーポイントのレイアウトで...
-
Accessの式の「!」エクスクラメ...
-
PowerPointでスライドマスタの...
-
Vistaでの、CD-Rのフォーマット...
-
実行時エラー -2147217900 ADO...
-
Powerpoint の フッター??...
-
POWER POINTの背景が保存されて...
-
パワーポイントでスライドマス...
-
pdf スライドをA4上下2段で配...
-
Excel VBAのプログラムのエラー...
-
スライドマスタごとスライドを...
-
PowerPointでのページ番号挿入
-
パワーポイントの余白設定
-
リレーション?参照整合性の謎?
-
パワーポイント スライドの拡大
-
Power Point 2000 タイトルやス...
-
Microsoft PowerPointのヘッダ...
-
PowerPointフッターの文字の大...
おすすめ情報