• ベストアンサー

Excelでコンソボックスの設定

カーソルを置いたセルに、コンソボックスで選択したデータを入力したいのですが、うまくいきません。 ”書式設定のリンクするセル”には、なにをいれたらいいのでしょうか? 任意のセルをいれると、作動はするのですが、データが順番の数字がでてしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

質問からすると、表示→ツールバー→フォームで表示されるフォームダイアログボックスの コンボボックスを使用されていると思います。 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

malts
質問者

お礼

詳細な回答ありがとうございます。 上記で述べてるようにVBA(←上間違えた、失笑)はまだ、よく判らないため、(2)の方法で、いろいろ試していきたいと思います。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2のご回答のnishi6さんの回答を拝見して、#1回答をいれた者として、間違ったかなとドッキリして、読ませていただきました。知らないこともあり、勉強させていただきました。ただしエクセル2000で#1のも動くことを再度確認しました。 コンボボックスのアイテムをクリックする時に、アクティブセルを指していたカーソルが一瞬消えるのですが、値は セットされます。

malts
質問者

補足

回答どうもありがとうございます。 BVAは、まだ勉強中なので、基本的なとこも習得できてないので、今のところ難しくて手が出せません。 でも、将来的なやり方として参考にさせていただきます。 現状は、データ入力の手間を省くために、リストからの選択を考えたわけですが、他に簡単な方法があれば、どうのような手段があるのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

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を使わざるをえないのでは。