これまでで一番「情けなかったとき」はいつですか?

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/21 20:37

#2のご回答のnishi6さんの回答を拝見して、#1回答をいれた者として、間違ったかなとドッキリして、読ませていただきました。

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

この回答への補足

回答どうもありがとうございます。
BVAは、まだ勉強中なので、基本的なとこも習得できてないので、今のところ難しくて手が出せません。
でも、将来的なやり方として参考にさせていただきます。

現状は、データ入力の手間を省くために、リストからの選択を考えたわけですが、他に簡単な方法があれば、どうのような手段があるのでしょうか?

補足日時:2002/04/21 20:28
    • good
    • 0

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報