- ベストアンサー
Excelでコンソボックスの設定
カーソルを置いたセルに、コンソボックスで選択したデータを入力したいのですが、うまくいきません。 ”書式設定のリンクするセル”には、なにをいれたらいいのでしょうか? 任意のセルをいれると、作動はするのですが、データが順番の数字がでてしまいます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問からすると、表示→ツールバー→フォームで表示されるフォームダイアログボックスの コンボボックスを使用されていると思います。 Excelには、入力のためのコンボボックス的機能は3つあります。 (1)表示→ツールバー→フォーム で表示されるフォームのコンボボックスを使う (2)データ→入力規則 の機能を使う (3)表示→ツールバー→Visual Basicで表示されるVisual Basicの コントロールツールボックスのコンボボックスを使う (1)は古い機能で、仕様で選択リストの番号が出力さます。 ( ↑ 質問の『データが順番の数字がでてしまいます』) 選択リストそのものを表示しようとすると表示用のコード(プログラム)を書く必要があります。 昔はこれしかなく使っていましたが、近ごろは使っていません。カスタマイズもしづらいですね。 (2)は『入力値の種類』と『元の値』を指定すればコンボボックスから選択できます。 指定セル範囲に設定できます。一番簡単で効果的ではないでしょうか。 質問の機能はこれで解決できるかもしれません。 最後に、質問にある機能を簡単に実現するには(3)を使うことでしょうか。 ただ、『カーソルを置いたセルに』とあるので、この意味を実現するにはコードを書く必要があります。 Sheet1で行ってみます。 また、コンボボックスに表示するデータが、Sheet2のA2:A11にあるとします。 A.表示→ツールバー→Visual Basicで表示されるVisual Basicのツールバーから コントロールツールボックスをクリックします。 B.次にコントロールツールボックスからコンボボックスをシート上に1つ作ります。 C.コンボボックスを右クリックしてプロパティを選択。ListFillRangeに Sheet2!A2:A11 を入力 D.コンボボックスの高さや幅はデザインモードの時、変更できます。マウスで調整するか プロパティを変更します。(Width、Height、Font、BackColor・・・) E.『カーソルを置いたセルに』コンボボックスを表示するシカケを作ります。 ツール→マクロ→Visual Basic Editor で VBE画面に移動し、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示しSheet1をダブルクリック。 でてきたSheet1のコードウインドウに下記コードを貼り付けます。 普通ならコンボボックスの『ComboBox1_Change』イベントにセルに書き込む指示を書くのでしょうが、 質問のケースでは書き込むセル位置が変わるため、連続する2回の処理が同じテキスト(ListIndex)を 選ぶ場合、ComboBox1_Changeが発生しません。例えば、B10に『データ1』と入力すると次にB11に 『データ1』が入力できず、わざわざ『他のデータ』→『データ1』にする必要があるでしょう。 下では、『ComboBox1_Change』ではなく、『セルを選択した』動作をキッカケにしています。 今は、B列を選択したらコンボボックスを表示するようにしてあります。 コンボボックスを表示する場所を、rowPot(行、下がプラス)と columnPot(列、右がプラス)で指定します。 シートに戻って、編集モードを解除(三角定規と鉛筆のアイコン?)します。B列を選べばダイアログボックスが出るはずです。 ここから ↓ Const inpColumn = "B" 'この列を選択するとコンボボックスを表示する。今はB列 Const rowPot = 0 'コンボボックスを、選択したセルと同じ行(0)に表示 Const columnPot = 1 'コンボボックスを、選択したセルの右の列(1)に表示 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With ComboBox1 If Target.Column = Range(inpColumn & 1).Column Then .Visible = True .Top = Target.Offset(rowPot, columnPot).Top '縦位置を決める .Left = Target.Offset(rowPot, columnPot).Left '横位置を決める .LinkedCell = Target.Address 'リンクするセルを決める Else .Visible = False End If End With End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#2のご回答のnishi6さんの回答を拝見して、#1回答をいれた者として、間違ったかなとドッキリして、読ませていただきました。知らないこともあり、勉強させていただきました。ただしエクセル2000で#1のも動くことを再度確認しました。 コンボボックスのアイテムをクリックする時に、アクティブセルを指していたカーソルが一瞬消えるのですが、値は セットされます。
補足
回答どうもありがとうございます。 BVAは、まだ勉強中なので、基本的なとこも習得できてないので、今のところ難しくて手が出せません。 でも、将来的なやり方として参考にさせていただきます。 現状は、データ入力の手間を省くために、リストからの選択を考えたわけですが、他に簡単な方法があれば、どうのような手段があるのでしょうか?
- imogasi
- ベストアンサー率27% (4737/17069)
Sheet1にComboBoxを1つ配置し、 プロパティウインドウを開き、FillListRangeはA1:A5のようにし、A1からA5までのセルに、セットしたい項目(例東京、大阪、名古屋、福岡、仙台)を入力してください。 LinkCellは空白としておきます。 コンボボックスの上で右クリックし「コードの表示」をクリックし Private Sub ComboBox1_Change() End Sub が現われるから、 Private Sub ComboBox1_Change() ActiveCell = Worksheets("sheet1").ComboBox1.Text End Sub と1行入れて、デザインモードを終了し、Sheet1に戻りどこでも好きなセルを選択し、コンボボックスの1つのアイテムをクリックすると、そのクリックした値がセルにセットされる。 セットするセルを1つのセルに固定するなら、プロパティのLinkedCellが使えるが、その都度クリックしたところとなると、VBAを使わざるをえないのでは。
お礼
詳細な回答ありがとうございます。 上記で述べてるようにVBA(←上間違えた、失笑)はまだ、よく判らないため、(2)の方法で、いろいろ試していきたいと思います。 ありがとうございました。