🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

2回答

7212閲覧

別ブックから複数の条件に合致した値の抽出

fukutyan

総合スコア4

VBA

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

0グッド

0クリップ

投稿2019/12/29 05:47

編集2020/01/03 03:36

##イメージ説明現したいこと

別ブックの指定範囲の中から、複数の条件に合致する値を抽出したいです。

取り出したいブックのシートの中に、複数の表があります。
それぞれの表にはタイトルがついているのですが、
合致するタイトルから値を抽出する表を決め、
次にその表の中にある日付の横にある数値を抽出したいです。
取り出したい数値は、日付を起点に、右に3、上に1の場所にあります。

ソースは検討がつかなく、何も書けておりません。
ヒントだけでも構いませんので、教えていただけませんでしょうか?

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

参照元
転記先

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

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

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

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

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

meg_

2019/12/29 05:55

VBAはどこまで出来ますか? エクセルブックを開くことは出来ますか?
fukutyan

2019/12/29 06:12

まだ勉強を始めたばかりで、主にマクロの記録をしてからどのように記述されているか見ているような状態です。 その上で、自分で変更できるところを変更して動かしながら調整しています。
meg_

2019/12/29 10:15

まずは、VBAで目的のブックを開いて表のあるシートを選択しましょう。 この辺りは「マクロの自動記録」で出来るでしょうか。 ※ちなみにOSの種類、Excelのバージョン等も質問に追記しましょう。
fukutyan

2019/12/29 12:28

すみません。 OSはwindows10でexcelはoffice365のものです。 マクロの自動記録で、目的のブックの複数の表の選択はできました。 問題は、その複数の表の中からタイトルと日付が合致する表の値を探すことだったのですが、関数のvlookupのような選び方はできるのでしょうか?
guest

回答2

0

んと、表計算ソフトで
表引きの計算をやるのに、
なぜマクロが必要なのでしょう?

セルに名前を付ければ、
名前でセル範囲を参照できるので、
数式だけで解決できるような気がします。
(名前は動的に変化する表でも定義できます。)
詳しくは、検索していただくか、
エクセルの掲示板で聞いたほうが良いかと思います。

マクロ化にしても、まずはエクセルの使い方をマスターすることが、
より近道かなとは思います。
まぁ、どの道を通ってもいいのですが。


追記

イメージありがとうございます。
よく読んでないですが、参照するファイルがどんどん変わってきて、
その与えられたデータをもう一方に転記蓄積したいということですかね?
ならば、マクロになるかと思います。

が、
エクセル方眼紙と呼ばれるような形でデータが与えられるのですね^^;
こういう形で作ると非常にデータの再利用が難しくなります。
変更が可能なら変えた方がよいです。
出来れば、結合セルを使わない方向で検討されることをお勧めします。
VBAでやるならどのようにも出来ますが、
これからVBAを勉強されるということならば、道のりは長いかと思います。

ちょっと、説明とか書く時間がなかなか取れないので、
気長にまっていただくしかないかと思います。
待っている間に基礎から少しづつ勉強しておいていただけるといいかなと思います。

次見たときに解決になっていなかったら何か書いてみます。


反応がないようだけど、まだ、諦めずに待っているのだろうか。。。

とりあず、
手動でやるときは(ってか手動でやればいいと思うけど。。。)、
渡されたデータを画面または印刷して、
タイトルAの必要な個所をみて、
蓄積していくブックのタイトルAのシート上の表の該当する位置に入力していくと思います。
マクロでセルに値を入れるときは、代入式で表現します。

例)B1セルの値をA1セルの値に設定する
Range("A1").value = Range("B1").Value

次に、
基準となるセルから相対位置でセルの位置を示す時は、
OffsetプロパティとCellsプロパティと2種類示す方法があります。
今回の場合はCellsプロパティを使用する方がよいでしょう。

例)新しいデータのブックのデータのシートのA27セルが今回の転記の基準セルとして、
I27セルを相対的に示す
Workbooks(新しいデータブックの名前).Worksheets(データのシートの名前).Range("A27").Cells(1,9)

なので、

ExcelVBA

1Sub 転記() 2 Workbooks("元").Worksheets("元").Range("B14").Cells(1, 2).Value = Workbooks("先").Worksheets("先").Range("A27").Cells(1, 9).Value 3 Workbooks("元").Worksheets("元").Range("B14").Cells(1, 3).Value = Workbooks("先").Worksheets("先").Range("A27").Cells(1, 10).Value 4 Workbooks("元").Worksheets("元").Range("B14").Cells(1, 4).Value = Workbooks("先").Worksheets("先").Range("A27").Cells(1, 11).Value 5End Sub

このように位置関係を示して、値の転記をしていけばよいです。

まずは、タイトルAの表に限ってコードを書いてマクロを書いてみてください。
あとは、基準のセルが変わるだけで(転記先のシートも変わるとは思いますが)、
相対位置は変わらないと思います。
なので、基準を変えて同じ作業を繰り返せばよくなります。
コンピューターは繰返しの作業は得意なので、とりあえず1つを出来るようになってください。
それが出来たら次の段階です。
上手くできたら、コードを提示してみてください。
それを見て、次の段階の説明をします。

投稿2020/01/02 00:14

編集2020/01/08 10:53
mattuwan

総合スコア2163

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

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

fukutyan

2020/01/02 12:29

mattuwanさんありがとうございます。 最初は関数でやろうと思ったのですが、 その場合に両方のブックを開いていないといけないのが問題になりました。 関数ならなんとかなりそうだったのですが、 色々調べているうちにマクロのほうがいいらしいということなり、 チャレンジしようと思ったのです。 ただ、マクロは自動記録しか使ったことがなく、 思うように進められずにいたところ、ここを知ってご質問させていただきました。
mattuwan

2020/01/02 14:09

誰が、そのエクセルファイルを使うのか解りませんが、メンテナンスを考えたら、数式で解決されたほうがよいように思います。 両方のブックを開いてないといけないことはないはずです。 まずは、それぞれのシートのイメージを提示して、実現したいことを書いてください。 漠然とした一般論を聞く質問にはどう回答していいか困ります。 具体的な事案であれば考えることが明確になり、回答側も答えやすいかとおもいます。 が、エクセルのことはエクセルの掲示板とかフォーラムといった場所で質問したほうがよいように思います。
fukutyan

2020/01/03 03:37

ファイルを使うのは現状私一人です(将来はわかりませんが)。 曖昧な質問ですみません。 実現したいことは、参照元になる表のデータを別なブックのシートの同じ形式の表に転記させることです。 参照元のデータは毎月数値が変わります。 転記先のデータは蓄積されていきます。 参照元のデータは毎月消去されます。 以上のことより、マクロのほうが適していると考えました。 具体的な表を補足情報に追加させていただきました。 アドバイスをいただけましたら幸いです。
fukutyan

2020/01/06 13:56

お返事ありがとうございます。 仰る通りで、参照するファイルが毎回変わり、 それを転記して蓄積していきたいと考えております。 今少しずつ勉強中ではありますが、 条件が二つという点と、転記先が毎回一番下になる点でわからなくなっております。 参照するのが常に2ヶ月毎で、9、10月の次は10、11月を参照します。 参照元が結合セルなのも頭を悩ませております。 ここは前任者が作ったものなのですが、 すでに同じ形式のシートが相当数あるのと、 別ブックがこれを関数で参照しているので 変更するのが難しい状態です。 ご教授いただけましたらとても助かります。 どうぞよろしくお願いいたします。
mattuwan

2020/01/06 14:06

実は条件は二つじゃないのかなど、思います。 視点を変えると、も少し簡単になると思います。
fukutyan

2020/01/09 02:15

ご回答ありがとうございます。 お返事が遅くなり、すみません。 私毎で恐縮ですが、夜チャレンジしてみたいと思います。 どうぞよろしくお願いいたします。
fukutyan

2020/01/09 13:05

位置指定の前に、データを転記するというところでつまづいております。 元のブックのシートのデータが消えてはいるのですが、新しいブックのシートに転記されておりません。 いただいた回答ができるようになったらコードを記載いたします。
mattuwan

2020/01/10 02:21

上手く行かないなら、上手く行かないコードを提示してください。どこがまずいか指摘できます。 こちらでは、そちらのパソコンが見れませんので、 「やってみたこと」をどんどん説明してやってください。 あと、消すというのはいつでも出来るので、後でセル範囲が上手く指定できるようになってから、 試してみてください。あれもこれもやってると混乱します。
guest

0

ソースの検討がつかないとの事ですので、関連しそうな関数を記載しています。

・別ブックを開く
Workbooks.Open
・別ブック開かずにデータだけ読込
ExecuteExcel4Macro
・シート名を指定する
Worksheets().Select
Worksheets().Activate
・指定のセルを検索する
Find関数とか(https://www.moug.net/tech/exvba/0050116.html)
・選択セルの右3、上1のセルを選択
Selection.Offset(-1, 3).Select

この辺りを使えばできるかと思います。

自動記録は、余計なコードも多く含まれて必要な部分がわかりづらいので、自分で"VBA"とかで検索して参考にした方がわかりやすいと思いますよ。

投稿2019/12/31 13:18

Akashic

総合スコア298

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

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

fukutyan

2020/01/02 12:29

Akashicさんありがとうございます。 ブックを開かず、シートを指定してキーワードに合致したタイトルの表の中から 数値を抽出したいと思っていました。 いただいたヒントを参考にチャレンジしてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問