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

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

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

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

Q&A

解決済

2回答

3752閲覧

ファイルを開かずリストを参照したい

mi_ku

総合スコア10

VBA

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

0グッド

0クリップ

投稿2020/05/27 01:10

ブックAのシート上にコンボボックスを置いています。
そこに表示させる選択肢はブックBのSheet1にあります。

今は入力範囲を「ブックB.xlsm!Sheet1」としているのですが、
この方法だとブックBを開いたままにしておかなければなりません。

ブックBを開かずに済む方法を教えていただけませんでしょうか?
AddItemで一つずつ登録してみたりもしたのですが、
選択肢は増えたり減ったり、内容が変わることがありますので、
できれば別な方法を教えていただけましたら幸いです。

よろしくお願いいたします。

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

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

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

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

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

ttyp03

2020/05/27 02:06

ブックAを開いている間にブックBの内容が変わることがあるのでしょうか? ブックAを開いたときのみブックBからコンボボックスが生成されればよいのでしょうか? マクロは使っていいのでしょうか?
mi_ku

2020/05/27 08:07

ttyp03さん、ありがとうございます。 ブックAを開いているときにブックBの内容が変わることはあります。 ブックAを開いたときのみブックBの選択肢が使いたいです。 マクロは使っても大丈夫です。 よろしくお願いいたします。
ttyp03

2020/05/27 23:57

ブックAを開いているときにブックBの内容が変わるのであれば、ブックBは開きっぱなしにしておくしかないのでは。 ブックAを開いたときにブックBの最新の情報を使うのでよければ、開いて読み込んですぐに閉じれば済みますが。
mi_ku

2020/05/28 00:26

ご回答ありがとうございます。 >ブックAを開いたときにブックBの最新の情報を使うのでよければ、開いて読み込んですぐに閉じれば済みますが。 こちらのほうで問題ありません。 その場合はどのようにしたらいいのか教えていただけませんでしょうか?
ttyp03

2020/05/28 01:42

コンボボックスはフォームコントロールですか?ActiveXコントロールですか?
mi_ku

2020/05/28 05:33

コンボボックスはフォームコントロールで、シート上に直接配置しております。
guest

回答2

0

こちらが参考になるんではないかと。
ブックを開かないでセルのデータを読む

投稿2020/05/27 01:36

kaputaros

総合スコア1844

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

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

mi_ku

2020/05/27 08:05

kaputarosさん、ありがとうございます。 こちらも検討したのですが、これをどう選択肢に使うのかわかりませんでした。
kaputaros

2020/05/28 01:11

VBAあまり詳しくはないのでなんとなくになってしまうのですが、 ExecuteExcel4Macro("'C:[Book1.xls]Sheet1'!R" & i & "C1") 変数になってるのでわかりにくいかもですが、 'C:[Book1.xls]Sheet1'!R1C1 (i=1と仮定)  ↓↓ 'パス+[ブック名]シート名'!参照セル このR1C1が何を表すのか分かるならその範囲指定ができれば値を引っ張れそうで、 マクロの関数か何かを作ってそこでリストの値を返すようにしてコンボボックスに指定したら行けそうな気がします。
mi_ku

2020/05/28 05:37

ブックを開かずに処理を行うことについてネットで検索したらよくこちらのコードが出てきました。 何とか範囲を指定するところまではできそうですが、その先をどうしたらよいのかわかりません。
mi_ku

2020/05/28 09:22

アドバイスありがとうございます。 参考にさせていただきます。
guest

0

ベストアンサー

ブックAを開いたときにブックBの最新の情報を使う

この方法のサンプルコードです。
ThisWorkbookに貼り付けてください。
ファイル名とかシート名とかコンボボックス名とかは適宜修正してください。
あとブックBのA列1行目から下に向かって空セルまでをコンボボックスに登録しているので、こちらも適宜修正してください。

VBA

1Private Sub Workbook_Open() 2 3 Dim r As Long 4 Dim shA As Worksheet 5 Dim bkB As Workbook 6 Dim shB As Worksheet 7 Set shA = Worksheets(1) 8 Set bkB = Workbooks.Open("c:\temp\ブックB.xlsx") 9 Set shB = bkB.Worksheets(1) 10 11 r = 1 12 With shA.DropDowns("Drop Down 1") 13 .RemoveAllItems 14 Do While shB.Cells(r, 1).Value <> "" 15 .AddItem shB.Cells(r, 1).Value 16 r = r + 1 17 Loop 18 End With 19 20 bkB.Close 21 22End Sub

ファイルを開かず

この主旨を忘れました。
上のコードでは一瞬開いて直ぐに閉じる作りになっています。
もし一瞬でも開くのが困る場合は、別回答にある開かずに参照する方法を組み合わせてください。

投稿2020/05/28 08:19

編集2020/05/28 08:21
ttyp03

総合スコア17000

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

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

mi_ku

2020/05/28 09:21

ありがとうございます。 一瞬開くのは問題ありません。 無事実行できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問