[[20070216094359]] 『コンボボックスを別シートから参照する』(たか) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コンボボックスを別シートから参照する』(たか)

先日はありがとうございました。

また、伺いたいことがあります。

"Sheet1"と"Sheet2"があり、"Sheet1"にコンボボックスを作成して、

"Sheet2"のD7から、D8、D9…D1000まで参照して、

例えば今はD100までしかデータがないのでコンボボックスの中にD100までの

文字を入れるにはどうしたらよいのでしょうか?

コンボボックスは、同一シートであればデータを抜き出すことが(ListFillrange)

から出来ましたが、別シートからでは出来ませんでした。

たびたび申し訳ございませんがお願いいたします。


 Sheet2!$D$7:$D$100と指定すれば、参照しましたよ。
 
次のような手順で可変範囲とすることも出来ます。
挿入>名前>定義 で
名前  :LIST
参照範囲:=OFFSET(Sheet2!$D$7,0,0,COUNTA(Sheet2!$D:$D)-COUNTA(Sheet2!$D1:$D6),1) 
コンボボックスのListFillrangeプロパティで LIST を指定します。
(みやほりん)(-_∂)b


ありがとうございます。

すいませんが、=EMBED("Forms.ComboBox.1","")

のところをSheet2!$D$7:$D$100に変更するのでしょうか?

>ListFillrangeプロパティで LIST を指定を

ですが、LISTと打つことが出来ても、

Enter押すと記入がなくなります。

宜しくお願いします。


 >同一シートであればデータを抜き出すことが(ListFillrange) 
 >から出来ましたが、
 ↑
この書き込みがあったのでListFillrange設定方法はご存知、と思い、省略しましたが。
 
すでにコンボボックスをシートに配置済みの場合は、
コントロールツールボックスツールバーのデザインモードボタンクリック、
コンボボックスを選択して右クリック、プロパティを選択し、
ListFillrangeプロパティに LIST や Sheet2!$D$7:$D$100 を設定します。
 
配置したコントロールを選択したときに数式バーに表示される
「=EMBED("Forms.ComboBox.1","") 」は普通編集しません。
(みやほりん)(-_∂)b

(みやほりん)(-_∂)bさんありがとうございます。

ListFillrangeプロパティに今まで"="を打っていた為、表示が出来ませんでした。

助かりました。

もうひとつ伺いたいですが、そこに"Sheet2"のB7とC7とD7以下B8、C8、D8・・・と

コンボボックスにひとまとめで出すにはどのようにしたらよろしいでしょうか?

たびたび申し訳ございませんがもう少しお願いします。


 スミマセン、「ありがとうございます」以下を見落としていました。
文章だけではイメージできませんが、コンボボックスの表示を3列に、ということ?
ListFillrangeに「Sheet2!$B$7:$D$100」、ColumnCountに「3」と指定すれば、
ドロップダウンリストには3列が反映されます。
 
最終的にどんな運用を目指すのか説明がございませんが、Listの列関係のプロパティは
以下の通り。

BoundColumn
何列目をコンボボックスの値とするかを設定します。この場合の値とはLinkedCellで取り出せる値です。
ColumnCount
リストの列数を設定します。-1を指定すると表示可能な列をすべて表示します。
ColumnHeads
リストの見だし表示をするかどうかを設定します。ListFillrangeによりリスト設定している場合、Trueにすると、リストの一行上の行が見出しとして扱われます。
ColumnWidth
列の幅を指定します。50;100;50 とすると、50pt 100pt 50ptの幅で表示されます。
TextColumn
選択したリストのうち表示する列の番号を指定します。

 ただし、選択後のコントロールのテキストに表示設定できるのはTextColumnに指定した
1列だけですし、プロパティの設定によって取り出せる値もBoundColumnで指定した列。
LinkedCellを指定してもBoundColumnで指定した列の値しか返せません。
3列のうち、リストで一意となるものがあれば、その列をBoundColumnで指定し、
他の列の値はVLOOKUP関数や、INDEX関数&MATCH関数で他のセルで検索・表示
させてください。
リストからの選択だけにより3列の値を取り出すとなると、マクロの世界突入。
 
(みやほりん)(-_∂)b

(みやほりん)(-_∂)bさんありがとうございます。

上記大変参考になりました。

もうひとつだけ伺いたいのですが、データ量が多いのか100件の選択でも

”メモリ不足です。完全に表示できません。”

となってしまうのですが、これは単純にPCのスペックが

足りないという事ですよね?

もし、表示をさせないようにすることが出来るならお教えいただけないでしょうか?

(たか)


すいません。

上記のコンボボックスで表示された

”たか”という人物の写真を同一シートに作成したイメージに

写真を貼り付けるにはどうしたらよろしいでしょうか?

構成としてはフォルダの中に上記のエクセルシートと”写真”フォルダがあり、

写真フォルダの中にコンボボックスと同じ

”たか” ”A子” ”C男”というJPG形式の

写真があります。

途中まで本を見ながら作成したのですが、上手く出来ません。

表示するシートには

Private Sub Worksheet_Activate()

     Dim myDir As String
     Dim myFName As String

     myDir = ActiveWorkbook.Path & "\写真\"
     myFName = Dir(myDir & ".JPG")
     Do While myFName <> ""
     ComboBox1.AddItem myFName
     myFName = Dir()
     Loop
End Sub

Private Sub ComboBox1_Change()

     Dim myDir As String
     myDir = ActiveWorkbook.Path & "\写真\"
     Image1.Picture = LoadPicture(myDir & ComboBox1.Text)
End Sub

と本来は「ユーザーフォームにリストボックスを作成して、写真フォルダ

からリストボックスに追加し、リストボックスの一覧になったファイル名を

クリックすると画像が表示される」

というのからリストボックスをコンボボックスとして変更してみたのですが

上手くいきません。

宜しくお願いします。


 Combobox、ListBoxに絡む「メモリ不足です。完全に表示できません。」に関しては
MSサポートに以下のバグに関する記事があります。
該当しないか、まず確認してください。
 
[ズームが設定された Excel シートのコンボ ボックスやリスト ボックスを操作すると メモリ不足が発生する]
http://support.microsoft.com/kb/842231/ja
 
>上手くいきません。
どのステートメントで止まる、期待しているものと結果がどのような点が異なる、
など、具体的情報もあると、回答するのに助かります。
 
たぶん、コンボボックスに画像フィル名のリストが作成されないのだと思われます。
myFName = Dir(myDir & "*.JPG")
ワイルドカードの指定がありません。
(みやほりん)(-_∂)b


返信遅くなり申し訳ございません。

実行時エラー53
ファイルが見つかりません。
となり、
Image1.Picture = LoadPicture(myDir & ComboBox1.Text)
が黄色くなります。

宜しくお願いします。
本来は、コンボボックスには別シートのD3から、D100までの部分を

選べるようにしたいのですが。

そこもご指導いただければと思います。

(たか)


すいません。
お礼忘れていました。

>ズームが設定された Excel シートのコンボ ボックスやリスト ボックスを操作すると メモリ不足が発生する

は解決しました。みやほりんさん、ありがとうございました。

具体的にしたいことなのですが、Sheet2の選択範囲(D3〜)から、

sheet1に作成したコンボボックスに人の名前を持ってきます。

そして、そのコンボボックスに表示された人の写真を取り込みたいのです。

Aさん、Bさん、Cさんとクリックしたときにその写真も同時に変わるようにしたいのです。

写真の場所は、ファイルAの中にエクセルシートとその中に”写真”と記入した

ファイルがあり、その中にJPG形式の写真がいくつかあります。

場所を具体的に示すと

C:\Documents and Settings\PC-USER\デスクトップ\A

となります。


 コードを見る限りではWorksheet_Activateイベントでコンボボックスに
ActiveWorkbook.Path & "\写真\" というフォルダにある jpg ファイルの
実際のファイル名を AddItem してリストを作成しています。
このイベントマクロでリストが正確に作成されていれば、
「実行時エラー53 ファイルが見つかりません。」はありえません。
少なくともこちらでは myFName = Dir(myDir & "*.JPG") の修正で動いています。
 
また、ファイル名はSheetがアクティブになるたびにコンボボックスへ次々と
リストを追加していく仕様になっているので、削除・移動・名前変更したファイル名が
残っているということはないでしょうか。
 
あるいは、
>コンボボックスには別シートのD3から、D100までの部分を選べるようにしたい
とのことですので、もし、シートのリストを作成する仕様としているならば、
「D3から、D100」の部分が怪しい(実際のファイル名と違う)、と推測しますが、
いかがでしょうか。
 
あるいは、もしかして、(前段の流れから)リストとして取り込んでいるのが複数列のリストで、
TextColumn で「Aさん」などのリストを表示するようにして、A.jpgなどもリストに
取り込まれている場合、コンボボックスに「Aさん」が表示されている状態なら、
myDir & ComboBox1.Text のコードでは
C:\Documents and Settings\PC-USER\デスクトップ\A\写真\Aさん
を開こうとするのであり、A.jpgはターゲットになりません。
 
「Aさん」などの名前をコンボボックスに表示し、その結果をA.jpgなどのファイル名と
したいのであれば、BoundColumn でA.jpgなどの格納される列を指定し、
myDir & ComboBox1.Value を指定してください。
 
ちなみに、
>ファイルAの中にエクセルシートとその中に”写真”と記入した 
>ファイルがあり、その中にJPG形式の写真がいくつかあります。 
 ↓
「フォルダAの中にエクセルブックとその中に”写真”と記入した 
フォルダがあり、その中にJPG形式の写真がいくつかあります。 」
 
だと推測します。
(みやほりん)(-_∂)b

みやほりんさん、ありがとうございます。

みやほりんさんのおっしゃるとおり、この使用に関しては

写真を追加するたび、コンボボックスに追加していく形になっています。

それをSheet2のD列を本来はコンボボックスの中に表示し、

それとJPG形式の写真の名前例えば、(た か)という人を

コンボボックスで指定した場合、写真の(た か)という人を

コントロールツールボックスで作成したイメージ(Image1)に

もって来たいのですが・・・

どのように変更したらよろしいのでしょうか?

>ファイルAの中にエクセルシートとその中に”写真”と記入した

>ファイルがあり、その中にJPG形式の写真がいくつかあります

→みやほりんのご指摘どうりです。申し訳ございません。


 コンボボックスで「たか」を選んでも「たか.jpg」は開けません。
ComboBox1.Text = "たか"  だからです。
「たか.jpg」がそのフォルダにあっても同じものと推測はしてくれません。
ComboBox1.Text & ".jpg" とすれば「たか.jpg」を開けるかもしれません。
 
なんだかいろんなやり方が錯綜してますね、どの方針でアドバイスしてよいのやら。
jpgファイル名の取り込みはシートへ行うのを優先にするのですよね。
(みやほりん)(-_∂)b

ありがとうございます。

私がやりたいのはコンボボックス(別シート)から選んだ人の名前と写真ファイルの名前が一致したときに、アルバムのようにエクセルシートに作成したイメージボックスにその人の写真を反映させたいだけです。

それをAさん、Bさん…と選んだらその人の分を反映させたいのですが…

難しいのでしょうか?


 難しくはないです。
ただファイル名と言うのは拡張子も含めてのものですから、
どこかでそれを補う必要があります。
すでに手法も提示しているのですが、
御理解頂けていますか?
みやほりん

みやほりんさん、ありがとうございます!
分かりました。

リストから選択にしているのですが、
リストには名前だけとなっているのを

.JPGとしたら出来ました!!!

お手数をおかけしまして申し訳ございません。

今後も宜しくお願いいたします。

(たか)


もうひとつだけ質問をさせてください。

上記の写真の添付はみやほりんさんのお力添えもあり、

何とか完成することが出来ました。

但し、現在作成しているアルバムで、

B列に例えばB3に(たか.JPG) B4に(山本.JPG)

としてあるのですが、住所などを検索する為に

A列に例えばA3に1 A4に2とナンバリングしているのですが、

そのA列の数字を返したいのですが、LOOKUP関数で表示できないのでしょうか?

何度か試しているのですが、認識できません。

ナンバリングした数字が表示できれば、

VLOOKUP関数にて住所などを一覧からもってくることが

可能かと思うのですが・・・

宜しくお願いします。


すいません。説明不足です。

コンボボックスで選んだ名前でというのが

表記されていませんでした。

コンボボックスは、リストのB3、B4…を表示するのですが、

表示したときに、A3、A4のナンバーを反したいのです。

(たか)


 コンボボックスのリストとしてB列のファイル名を表示しているのはわかりました。
 
>そのA列の数字を返したいのですが、
>表示したときに、A3、A4のナンバーを反したいのです。 
 
上記は「どこに」返したいのでしょう?
(みやほりん)(-_∂)b

返事遅くなり申し訳ございません。

コンボボックスが表示されているSheet1のZ3に持って来たいのですが。

ちなみに説明不足かもしれませんので、補足を…

Sheet1とSheet2があり、Sheet2は一覧表(住所などをデータベースとして記載)

Sheet1は住所などをSheet2から選んだ人(コンボボックスで選んだ人)の

個人情報を転記するフォーマットになっています。

(たか)


 コンボボックスのリストにはリストの「何番目が選ばれたか」を示す
ListIndexプロパティがあります。
Sheet2の一覧表とコンボボックスのリストが一致している、という前提ならば、
次のように書けるでしょう。
 
Private Sub ComboBox1_Change()
Me.Range("Z3").Value = Worksheets("Sheet2").Range("A3").Offset(Me.ComboBox1.ListIndex, 0).Value
End Sub
 
Sheet2!A3からListIndexのぶんだけ行方向へOffset。
なお、ListIndexは 0 からスタートなので注意。
(1番目を選ぶと0、2番目を選ぶと1)
(みやほりん)(-_∂)b
# .Valueを忘れたので追記(なくても動きますが)

みやほりんさん…なんと言っていいのか…

本当にありがとうございます。

ここの、Worksheets("Sheet2").Range("A3").Offset

という部分が気づきませんでした…

Range("Z3").Value = ComboBox1.Text

とやっていた為、名前.JPGはかえったのですが、

今まで出来ませんでした。

本当にありがとうございます。

今後も、出来る限りVBの勉強をしていき、

いつかはみやほりんさんの様に、教えていけるよう

がんばっていきます。

本当にありがとうございました。

(たか)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.