プロが教えるわが家の防犯対策術!

まだまだエクセル、アクセス等勉強中の者でございます。
試行錯誤しましたが、急ぎということもあり、
アドバイスいただきたく依頼させていただきました。

下記に貼り付けました表が“別シート”にてA、B、C(新規)とあります。
Aメニュー、Bメニューの表は管理簿の位置づけとして用いておりまして、
この二つのシートデータをIDで紐付けて、Cの新規シートにてA、Bメニューごちゃまぜの表を作成したいと考えております。

VLOOKUP関数を用いて作成できたのですが、データが重く開くのにとても時間がかかり、
使わずにできる方法が必要となってしまいました。
また、部署内全員で共有していくため、可能であれば関数で解決して誰でも修正が可能に
できるような形で残していきたいのです。

IFERROR、INDEX、MATCHを使う形ではA、Bの二つの別シートから検索、参照することは
できないのでしょうか。

自分の勉強不足で助けを求めてしまい、お恥ずかしいかぎりではございますが、
急を要します為、どなたかご教示いただけますよう、何卒宜しくお願い致します。

※Aメニュー、Bメニュー、C(新規)は貼り付けた画像とは異なり、“別シート”になります※

「【ご依頼】エクセル VLOOKUPを使わ」の質問画像

A 回答 (5件)

Vlookupの代用で用いられるのは「INDEX(検査範囲,MATCH(検査値,検査範囲,0)※行を確定させる、お好みの列番号 」という形式です。


much関数で、ヒットする行を確定さえて、今回の例だと右にずれたい分の列番号を指定します。

質問の内容からすると
①Aメニューのシートに合致するものがあるかをチェック
②あれば、上記の代用の関数を使って必要な値を持ってくる
③合致がなかった場合は、Aメニューのシートに合致するものがあるかをチェック
④あれば、上記の代用の関数を使って必要な値を持ってくる
⑤いずれもヒットしない場合はエラとする(もしくは代替文字を入れる)

こんな感じの事をされたいのかと思います。
想定通りだと、下記の様な関数になると思います。

IF(iserror(much関数でAシートを参照しているもの),IF(iserror(much関数でBシートを参照しているもの),"データがありません”,(上述の代替関数でBシートを参照しているもの),(上述の代替関数でBシートを参照しているもの)
※見た目重視なので、()の整合性まではとってません。

どのような使用意図や運用シーンがあるのか分からないので一概にはいえませんが、
1シートにしてデータの項目にABメニューを判別する情報を加えて方が運用上楽だと思います。
この手のリスト(マスター)のような情報はそもそも分散して管理するのではなく
一元管理しないとトラブルの温床になります。

個人的には、本来の質問内容からは外れますが、運用方法を変える方をおすすめします。
    • good
    • 0
この回答へのお礼

このたびは質問にお答えいただきまして、ありがとうございます。

お答えいただきました内容にて試してみたのですが、引数が多すぎるため...と表示され、うまくいきませんでした。
自身でもIFERROR,INDEX,MATCH関数を用いた形で試したところ、同じように引数が多すぎるため...と表示されました。
運用方法としましては、AメニューとBメニューの情報は分けることが必須なため、エクセル上で管理するうえでもシートを分ける必要があります。
VLOOKUPを使う以外だとやはり関数では限界なのでしょうか。

お礼日時:2018/01/08 18:33

Sheet A、B の範囲 C3:F12 に、それぞれ TableA、TableB という名前を付けておけば、Sheet C のセル D1 に次式を入力して、此れを右方および下方にズズーッとオートフィルするだけで、御の字になりますよ。


=IFERROR(IFERROR(VLOOKUP($C4,TableA,COLUMN(B1),FALSE),VLOOKUP($C4,TableB,COLUMN(B1))),"")

「VLOOKUP関数を用いて作成できたのですが、データが重く開くのにとても時間がかかり」とのことだけど、それはVLOOKUP関数の所為ではなくて、参照範囲を必要以上に広大なものにしたからであって、必要最小限の範囲を指定すれば問題ないかと。INDEX、MATCHと大差ないと考えます
「【ご依頼】エクセル VLOOKUPを使わ」の回答画像2
    • good
    • 0
この回答へのお礼

このたびは質問にお答えいただきまして、ありがとうございます。
選択範囲にTableAやTableBと名前を付けるというのはAメニュー、Bメニュー各シートのセルをいじらずに可能でしょうか。
また、貼り付けましたシートに関しましては例としてあげたものでございますため、データ量もセルの行で表すとAメニュー:32752、Bメニュー:25931となります。
例としてということを文言で記載しておりませんでした。申し訳ありませんでした。
参考にさせていただきまして、試行錯誤いたします。

お礼日時:2018/01/08 18:26

他の方と重複しますが


>VLOOKUP関数を用いて作成できたのですが、データが重く開くのにとても時間がかかり
は、
1、ファイルが大きく開くのに時間がかかるのか
2、再計算に時間がかかっているのか
たぶん、1ではないでしょうか。関数を変えても解決しない様な気がします。
運用の問題になりますが、データの全てが必要でしょうか?
別のファイルで必要なデータだけ抽出する機能を付けて
抽出後に、情報が不足している部分を補うリンクなどの方が便利ではないでしょうか。

別のファイルから必要なデータのみ抽出する方法
もう一つのデータの抽出(Microsoft Query)
https://ameblo.jp/hokora2016/entry-12333452045.h …
この辺りが参考になりませんでしょうか。
    • good
    • 0

№1です。



ほかの方へのお礼に書かれているデータ量だとどんな関数を使用しても
ファイルは重たくなりますよ。

関数でマージする量じゃないですね。
ACCESSも勉強されているなら、ACCESS側でマージされる方が
いいと思います。

ACCESSの方が、この手の作業は向いています。

データがどのようになっているのか詳細は分かりかねますが、
ACCESS側で両シートに対してリンクを付けて
テーブル作成クエリと追加クエリを組み合わせて使えばよいのではないでしょうか。

本当は、全部ACCESS側で行って必要な情報をExcelとして吐き出すような
運用の方が無難ですが・・・。

もしかすると、受発注や売上に強く関連するならば、
ちゃんと会社としてシステム化すべき課題のようにも思えるデータ量ですが・・・。
    • good
    • 0

[No.2お礼]へのコメント、


》 選択範囲にTableAや…各シートのセルをいじらずに可能でしょうか
どうしてそのような質問されるのでしょうか?私は「いじってくれ」と書いた覚えもありません。「Sheet A、B の範囲 C3:F12 に、それぞれ TableA、TableB という名前を付けて」のそれ以上でも以下でもありません。ひょっとして「名前を付けて」の意味が理解できないとか?それならそうと書くべきです。

》 データ量もセルの行で表すと…32752、…25931となります。
4万行でも100万行でも同じこと。データ量の制限についても何も触れなかったですよね。

》 試行錯誤いたします
そう、再質問する前に、先ずは試行すべきです。
ただし、試行法が分からなければその旨を簡潔に訊いてください。

それから、VLOOKUP関数は時間が掛かるなんてな勝手な思い込みはしない方がよろしいですよ。そういうことは回答者が考えます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!