- ベストアンサー
ifとvlookupに代わるようなマクロ
お願いします。 一行1件で900件程度のデータがあります。1件当たりの項目(列)は150ほどです。住所録.xlsというファイルです。 これとは別に、個別1.xls~個別30.xlsというファイルがあり、それぞれシートが30ずつあります。 このシート全てに同一の個票フォーマットを作りました。vlookupやifとvlookupの組み合わせ関数をそれぞれの該当セルに入れれば各データは取り出せるのですが、非常に重く実用に向きません。こういった作業を効率よく行えるマクロをお教え願えませんでしょうか? 宜しくお願いいたします。
- gs-wing
- お礼率66% (8/12)
- オフィス系ソフト
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なぜ、重くなるのか、というと、Vlookup などは、その戻り値を確保していないので、複数の場所に、そういった関数があると、すべてが連動してしまうからです。簡単な方法は、再計算を手動にすることですが、意外に効率が落ちます。 それをそのまま、マクロに以下のように移植してあげればよいわけです。 Rtn = Application.WorksheetFunction.Vlookup(検索値,範囲,列番号,検索の型) を、Rangeオブジェクトと、数値で与えてやればよいはずです。 Rtn は、エラーも返ることもあるので、注意してください。 If IsError(Rtn) =False Then MsgBox Rtn End If とでもしてください。 難しく考えないでよいと思います。 ただし、.Formula = "=式" のようなスタイルにはしないでください。 結局のところ、ワークシート関数にまさるマクロ関数はないと言っても過言ではありません。Find メソッドなど、VBAネイティブメソッドと比較すると、遥かに、ワークシート関数のほうが処理が速いです。 最後に、そのようなファイルは、Accessなどのデータベースに移したほうがよいのではないか、と個人的には思います。
関連するQ&A
- エクセル2007 マクロについて教えてください
エクセルのデータが2個あります。 それぞれ、ファイル名は 顧客データ.xlsと個別シート.xlsです。 顧客データ.xlsには、10名のお客様の情報があり、A1セルには ID番号 と入力してあり、 A2~A11セルにID番号が入力されています。 『個別シート.xlsにマクロで顧客データ.xlsのデータをコピーし、ID番号のフォルダをデスクトップに新規作成し、ID番号を付けて保存する』マクロを作成中です。 顧客番号が1234のお客様のデータを、個別シートにコピーし、デスクトップに1234というフォルダを新規作成し、その中に 個別シート_1234.xls というファイル名で保存をしたいです。 顧客データを自動でコピーするまではできましたが、それ以降ができません。 MkDir "C:\ Documents and Settings\xxx\デスクトップ\nknk\ID " ChDir "C:\ Documents and Settings\xxxi\デスクトップ\nknk\ID " ActiveWorkbook.SaveAs Filename:="個別シート_" & ID & ".xls" ActiveWorkbook.Close マクロを実行すると『実行時エラー76:パスが見つかりません』とエラーになります。 (フォルダ作成の命令文のところが黄色くなります。) ちなみに、個別シートの指定したセルに、IDはコピーされています。 正しく実行できる文を教えてください。また、以降の命令文は正しいでしょうか。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- IFとVLOOKUP関数
VLOOKUP関数を使って検索結果を出そうと思いましたが、 データ量が93000行X8列になりますので、 共通分けして複数のシート(A、B、C、D)に分けました。 あるセルに『A』と入れると『シートA』の表から検索を行う、 あるセルに『B』と入れると『シートB』の表から検索するといった感じにするには、 IFとVLOOKUPを使用するなら、どのような式を入れたらいいのでしょうか? また、他の関数を使う式があるのでしょうか? マクロやVBAも考えましたが、 あまり知識がありません。 データ量から考えると マクロやVBAで行った方がいいのでしょうか?
- ベストアンサー
- Windows系OS
- エクセルマクロでマクロをアクティブにしたくない
エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。
- ベストアンサー
- Excel(エクセル)
- VLOOKUPのような操作ができるマクロ
VLOOKUPのような操作を マクロで行いたいのですが、 その組み方を教えていただけませんでしょうか。 下表のように 入力作業を行うシート「sheet作業」(シート数は10あります)と データが入力されているシート「sheetデータ」があり、 「sheet作業1」(~「sheet作業10」)のセルにNo.を入力すると、 「sheetデータ」のNo.列を参照して、 同じ番号の、"姓"から"点数"までのデータをコピーして、 「sheet作業」の、"姓"から"点数"までのセルに、 値のペーストで貼り付ける というような形でマクロを組みたいのですが、 どのように組めばよろしいでしょうか? ------------------------------------------------- 「sheetデータ」 No. 姓 名 点数 101 あい うえ 10 102 かき くけ 20 103 さし すせ 25 104 たち つて 30 105 なに ぬね 45 ------------------------------------------------- 「sheet作業1」 No. 姓 名 点数 102 (かき) (くけ) (20) ↑ (No.を入力してマクロを実行すると、 "姓"から"点数"までのデータがペーストされる。) 「sheet作業2」 No. 姓 名 点数 105 (なに) (ぬね) (45) ------------------------------------------------- 分かりづらい文章ですみません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VLOOKUPについて
EXCEL2000のvlookupについての質問です。 下記のような使用法方法 =VLOOKUP(RC[-1],[コード.xls]Sheet1!R1:R65536,2,FALSE) はできるようになったのですが、 複数ファイル(シート全体)を検索する場合は どのように記述すれば良いのでしょうか? また、下記のエラーについて悩んでいます。 あるシートの値をvlookupで検索すると見つからないの ですが、普通に編集→検索をすると見つかります。 これはvlookupで検索できないということでしょうか?
- ベストアンサー
- オフィス系ソフト
- シート単体の時のみマクロを有効に。
メニュー画面となる「menu.xls」ファイルと、コードごとの管理の為の「コード.xls」ファイルがあります。 「menu.xls」はシート「メニュー」・「リスト」・「フォーマット」の構成で、この「フォーマット」シートにコードの名前をつけて保存したものが、「コード.xls」となっています。 「フォーマット」シートにはいくつかのVBAを施してあるんですが、これを 「menu.xls」として開くときには実行させず(無効化)、「コード.xls」として開くときには実行(有効化)させたいのです。 現在、「コード.xls」としてシート「フォーマット」を開いた時はマクロがWorkbook_Openで動作してくれて構わないのですが、「menu.xls」として開いた時もシート「フォーマット」のWorkbook_Openが動作してしまい、エラーが出てきてしまいます。 「フォーマット」シートに実行判定を付ければいいのでしょうか? どうしたらいいか全くわかりませんので、ご教授頂きたくお願い申し上げます。
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ Vlookupに似たマクロはありますか?
度々すみません。 わからない事がいくつか出てきてしまって。どなたかご教示いただけると嬉しいです。 今は手作業で以下のような作業をしております。 データ元のシート(以下(1))とそれ加工して作るシート(以下(2))があります。 (1)のデータを2度sortするのですが、一度目のsortでtotalが入っている行は全てdelete。 残ったデータでもう一度sortし、種類別に並び変えます。 その後、コラムAがUSDである物はシート(2)のUSDページに貼り付け、コラムAがEURであればシート(2)のEURページに貼り付け・・・としていきたいのですが、マクロの記録を使おうにも、毎回コラムAは目視で確認しコピー・貼り付けをしていますのでマクロの記録は使えないですし、エクセル関数ではVLOOKUPがありますが、それをマクロに書き込む方法もどこにも載っておらず、どうしていいか息詰まった状態です。 sortするのはマクロの記録を使って作成できましたので、 ・コラムAがtotalになっている行より下はdelete ・コラムAがUSDならシート(2)のUSDシートへ貼り付け・・・ のマクロを作成したいです。 どうか宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- VLOOKUP 参照について
ファイルAのなかにリストと重量のシートがあります。 VLOOKUP'重量'にて参照させてます。 同じファイルを数人に分散し、結合時にファイルBに追加したら、VLOOKUP'[データA.XLS]重量'となりました。再起動時に「このブックには他のデータソースへのリンクが含まれている」とメッセージが出ました。 各自、「重量シート」にないものは、任意入力してますので、ファイルBの式を追加分にコピーしたら任意入力したものが消えてしまいます。 最終的にはファイルBのみ保管したいのですが、良い方法があれば教えて下さい。
- 締切済み
- オフィス系ソフト
- vlookup関数の引数を変数で指定することはできますか?
エクセルのVBAでマクロを組み、同じフォルダ内にあるファイルにvlookup関数でリンクを張ろうかと考えています。 ファイルの構成は以下の通りです。 マクロを組んでいるファイル:Book1.xls マクロが適応されるファイル:Book2.xls vlookup関数で参照されるファイル:Book3.xls 実際にBook1に組んだマクロは以下の通りです。 Workbooks.Open ThisWorkbook.Path & "\Book2.xls" Workbooks("Book2.xls").Activate myFile = ThisWorkbook.Path & "\" & "Book3.xls" b = 2 Do Until ActiveSheet.Cells(b, 1) = "" ActiveSheet.Cells(b, 6) = "=VLOOKUP(E" & b & ",myFile!$A:$F,5,0)" b = b + 1 Loop 上記マクロで実行すると、Book2が開き、vlookup関数が挿入されるところまではいきますが、 変数myFileが正常に変換されないらしく、ファイルが見つからない状態となってしまいます。 myFileの代わりにフルパスでファイルをしていすると正常にマクロは起動することは確認しましたが、 毎回作業するフォルダが変わる為、フルパス指定はできるだけ避けたいです。 基礎的な質問で恐縮ですが、 vlookup関数の引数(参照範囲)を変数で指定する方法を教えてください。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます。 明快なご回答、是非使わせていただきたいと思います。 Accessは…会社のOfficeのバージョンアップのため、現在使用禁止令が出ていなければ使いたいところです。