- ベストアンサー
エクセル 入力規則を使ったリストボックスの▼を常に表示したい
表題の通り、入力規則を使って、別シートからデータをリンクできるように名前の定義を利用してリスト選択できるようにしました。ですが、そのセルは特に目印がなく、リスト選択ボタンは、そのセルを選択しない限りは表示されませんよね?ですから、この▼のリストボタンだけを常に表示しておいて目印にしておきたいのですが、いろいろ過去ログみましたがわかりません。どのようにすればよいでしょうか?よろしくお願いいたします。ちなみにこれは印刷時にはこのボタンは見えないのが都合よく、パソコン上で編集の時のみ見えればそれでよいのですが。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#3の補足に対して #3のSelection.ListFillRange = "F1:F4"の下に Selection.LinkedCell = "A" & i を入れてください。これで選択されたコンボの値がセルの値になります。 そして 下記を実行して、印刷してみてください。 Sub teat02() ActiveSheet.OLEObjects.Visible = False End Sub 画面からはコンボが消えました。 復活する仕組みにするには、シートにコマンドボタンを貼り付け 消す・表示するをコントロールしてください。少しのVBAの知識を 前提にしてます。 表示に戻すには。 Sub teat03() ActiveSheet.OLEObjects.Visible = True End Sub コンボ等を抹消するのは Sub teat04() ActiveSheet.OLEObjects.Delete End Sub
その他の回答 (6)
- merlionXX
- ベストアンサー率48% (1930/4007)
> 印刷時にオブジェクトを印刷する、をチェックはずしました。そうすると、選んだ文字列まで消えてしまいました・・・ オブジェクトを印刷しないわけですから当然選択した文字(オブジェクト内)も印刷されません。 対応策 コンボボックスを右クリックし、「コントロールの書式設定」、「コントロール」で、リンクするセルを他のシートのセルに指定します。 指定したセルに選択したリスト番号が表示されます。 この番号からINDEX関数等でリストの文字を印刷したいシートのコンボボックスを配置したあたりのセルに評させます。 これで、選択した文字列は印刷されます。
お礼
ありがとうございました! 最初から順番に作ってみたらうまくいきました。 INDEX関数については、よくわからなかたのですが、 リスト番号の意味がわからずどうやって作ったらいいかと思いましたが、そのセルを参照するのだということで、行番号には行番号をいれずに該当セルを指定しました。すると可変状態になりますものね。 ということで、 もうひとかたの方法と、用途によって使い分けるとよいですね! 一度に二つの方法を教えていただけてうれしいです。
- imogasi
- ベストアンサー率27% (4737/17069)
画面上の方にOptionExplicit があれば、抹消してみてください。 (正式には、変数の定義Dimを入れて変数定義をする方向で解決すべきですが) なお私の回答は回答をあげる前に全てテスト済みです。
お礼
今やってみたら、できました。test04 まで、全部できました! ありがとうございます! お時間をさいて頂き感謝します!
- merlionXX
- ベストアンサー率48% (1930/4007)
No2です。 > コンボボックスをフォームから選ぶのは、マクロを利用したやりかたじゃないと、無理なのですよね? いいえ、フォームのコンボボックスはマクロとは関係なく利用できます。
補足
コンボボックスを出して、右クリックでコントロールの設定から、別シートのリストを導くことができました!そして、印刷時にオブジェクトを印刷する、をチェックはずしました。そうすると、選んだ文字列まで消えてしまいました・・・ フォームから選んだコンボボックスは、こういう性質なのですかね、 社外へのお知らせの文面に使うので、コンボボックスは見えないほうがよいのですが、できないものなのでしょうか・・・?
- imogasi
- ベストアンサー率27% (4737/17069)
入力規則のリストの置き場所に、当たる部分を、たとえば Sheet1の F1:F4に 東京 大阪 京都 名古屋 と入れておきます。 ーーーーー 下記VBAをコピーし、標準モジュールに貼り付けて実行してみてください。ほぼ望みのものができるようです。 Sub test01() Dim sh As Worksheet Set sh = Worksheets("Sheet1") For i = 1 To 10 l = sh.Cells(i, "A").Left t = sh.Cells(i, "A").Top w = sh.Cells(i, "A").Width h = sh.Cells(i, "A").Height sh.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _ Left:=l, Top:=t, Width:=w, Height:=h _ ).Select Selection.ListFillRange = "F1:F4" Next i End Sub ”A”とあるところはA列に表示することを決定している部分で ”C”とかに変えられます。 For i=1 to 10の1と10は第1行から第10行までを 決めている部分です。自由に変えられます。 ”Sheet1”の部分はシートを決める部分です。 Selection.ListFillRange = "F1:F4" はリストのあるセル範囲を指定している部分です。 (注)ツールーマクロ-VBE-でVBE場面が出ます。 そのメニューで挿入ー標準モジュールで標準モジュールの画面になります。
補足
詳しい説明ありがとうございます。やってみたらできました。常に表示状態になっているので思い通りのものができたようなのですが、印刷プレビューでは、このとおりのものが見えていますね、これはどうしたらよいでしょう?印刷時にだけは見えなくするには?他の方法で、ツールボックス→フォーム→コンボボックスを選んでシートへ作った場合には、右クリックしてコントロールの書式設定→プロパティ→オブジェクトの印刷をしない のチェックをはずすという方法で 見えなくすることができるのに、このマクロでできたコンボボックスには右クリックできず、印刷プレビューでもそのまま見えてしまっているのはどうしてでしょうか・・・?すみません、理解できなくて。。。
- merlionXX
- ベストアンサー率48% (1930/4007)
入力規則を使ったリストボックスではなく、メニューから「表示」、「ツールバー」、「フォーム」で、フォームのアイコンがいくつか表示されますので、その中から「コンボボックス」を選んで、シートに貼り付ければ常に表示されます。 印刷はしたくないのなら、コンボボックスを右クリックし、「コントロールの書式設定」、「プロパティ」で「オブジェクトを印刷する」のチェックを外せばいいです。
補足
ご回答ありがとうございます。 コンボボックスの右クリックで印刷時に見えなくすることができるのはわかりました。ですが、コンボボックスは作れても、これは入力規則を使ってのリスト作成とは、また違ったやりかたなのですよね? コンボボックスをフォームから選ぶのは、マクロを利用したやりかたじゃないと、無理なのですよね? となると、NO3様のマクロも利用してコンボボックスでそのセルがどこにあるかをはっきりさせ、しかも印刷時にはコンボボックスは見えないようにする、というやりかたは、できないのでしょうか・・・?
- mu2011
- ベストアンサー率38% (1910/4994)
安直ですが、該当セルにコメント挿入したら如何でしょうか。
お礼
それは簡単なやりかたで、いいですね! どうしても希望するやりかたができないとなったときは、 そのやりかたであきらめます。ありがとうございました!
補足
何度もお手数をおかけしております。 今会社で、家でしたように同じ事を試してみましたが、なぜか コンパイルエラーが出ます。内容は 「変数が定義されていません」 で、For i = 1 to 10 の、i が反転され、タイトルの test1・・が黄色になっています。 どうかえればいいのでしょうか? VBAに関してはまだよくわかっていないので、すみません。 でも、解決できればうれしいので・・・ とりあえず、業務で使うので コメントを使用して目印をつけました。