質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Q&A

2回答

381閲覧

VBAもしくは関数の質問です。

zuzu1984

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

0グッド

0クリップ

投稿2017/07/02 11:13

関数でできればいいのですが、恐らくVBAの範囲かと思います。
以下を行いたいのですが、どうすればいいでしょうか。

・ファイルを開く(毎回異なる)。
・様々な項目がある中から、例えば"ベンツ"という種類の"Speed"という項目の値を抽出。

以下はイメージです。
イメージ説明

御教授頂けますよう、お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

マクロでのアドバイスはseastar3さんから出ているようですので、私からはExcel関数での実現方法をご紹介します。

まず「ブックを開く」の部分ですが、
=HYPERLINK(ファイルパス)
のような式を記述したセルを用意し、これをクリックすることで実現できると思います。

次に開いたブックからのクロスサーチの部分ですが、以下のように列・行それぞれからMATCH関数で対象セルの位置を見つけて、INDEX関数で値を取得する方法で実現可能です。

例)Catalog.xlsxのSheet1からベンツのSpeedを取得する場合

=INDEX([Catalog.xlsx]Sheet1!B2:Z99,MATCH("Speed",[Catalog.xlsx]Sheet1!A2:A99,0),MATCH("ベンツ",[Catalog.xlsx]Sheet1!B1:Z1,0))

ご覧のとおり、(当然ではありますが)ブック名・シート名が関数内に記述されています。
毎回ファイル名・シート名が異なるようでしたら、ここを毎回変更してあげなければなりません。


上記に加えてINDIRECT関数も利用すれば、関数自体を毎回いじる必要はなくなります。
しかしその分さらに複雑な式になってしまいます。

例)A1セルにブック名、A2セルにシート名、A3セルに車種、A4セルに項目を入力してINDIRECTで参照する場合

=INDEX(INDIRECT("[" & A1 & "]" & A2 & "!B2:Z99"),MATCH(A4,INDIRECT("[" & A1 & "]" & A2 & "!A2:A99"),0),MATCH(A3,INDIRECT("[" & A1 & "]" & A2 & "!B1:Z1"),0))

というわけで結構複雑な式になってしまいますので、自分なら「どうしてもExcel関数で実装したい」という場合でもなければVBAで実装すると思います。
Excel関数でもできないわけではないよ、ということを選択肢の一つとしてご紹介させていただきました。

参考になれば幸いです。

投稿2017/07/03 01:36

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

役に立ちそうなコマンドやプログラムを引いてみました。

シートやブックを越えたRangeオブジェクト取得
Find・FindNextで全ての行番号・列番号を取得するExcelマクロ
エクセルVBA入門】For Each~Nextでフォルダ内のブック全てを参照する

マクロを持つブックを探したいブックと同じフォルダに置き、見つける度にファイル名・シート名・行列番号・値を記録していくマクロを作ることになるでしょう。

投稿2017/07/02 12:40

seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問