excelでフォームを使ってシートにデータの入力をしているのですが、
日付の入力で○月○日のところを月、日それぞれ、コンボボックスを使って2桁の文字列入力にしています。例えば4月のところは「4」ではなく、「04」と入力します。
 コンボボックスなので、直接入力もできるため、たまに一桁で入力してしまうことがあり、計算結果が狂うことが起こっています。このミスを防ぐため、入力先のセル自体に入力規則(2桁のみ可)を設定しましたが、フォームからの入力ではエラーとならず、そのまま入力されてしまいます。
 リストボックスを使ってリストのみから入力できるようにすればよいのかもしれませんが、コンボボックスの方がなにかと都合がよいのでコンボボックス自体に入力規則を設定できればと思っています。何かよい方法があるでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

私が良く使う方法を書いておきます。

参考になるでしょうか?

1:コンボボックスの "MaxLength" プロパティを "2" にします。
2:コンボボックスの "AfterUpdate" イベント内に、1桁入力の場合に "0" を補うコーディングを入れます。

Right$("0" & ComboBox1.Text ,2)

これで、0~9の入力のときは、01~09になります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル、フォームでのVBAについて(コンボボックス)

エクセル97でフォームのコンボボックスを使用する場合の質問です。
ワークシートにコンボボックスを10個配置しました。
入力範囲はすべて同じです。
このコンボボックスで特定の項目(入力範囲6番目)を選んだ場合、次のマクロを実行するようにしようと思っています。マクロを10個書いてそれぞれのコンボボックスに登録してもいいのですが、それよりはどのコンボボックスが使用されたか特定できればすべてのコンボボックスに一つのマクロで対応できます。
コンボボックスに番号(たとえばコンボ1~コンボ10)を振ってその番号の取得ができればいいのですが、どのように記述したらよいのか検討がつきません。
お教えください。

Aベストアンサー

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、ヘルプで調べてみてください。引数、ByVal、ByRefなど。

で、更なる質問部分についてですが
DrawingObjects("Combo1")といった表現をする場合はまとめられないんです。。。
が!
もう一度、考え直してみました。

Sub Combo1()
Call NextMacro(1)
End Sub

Sub NextMacro(ByVal SelCombo As Integer)
Dim ans As String
If Sheets("LOG").Range("C1") = False Then
Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex _
= Sheets("LOG").Range("H" & (30 + SelCombo)).Value
Exit Sub
End If
If Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex = 6 Then
ans = InputBox("地域を入れてください。", "地域設定")
Worksheets("LOG").Range("J" & SelCombo) = ans
End Sub

で、いいのでは。
ちゃんと全部キレイにまとまるやん♪
と、言いたいところなんですが、テストしてません。
動かなかったらごめんなさい。(^-^;;;

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、...続きを読む

Qエクセルの「入力規則」→「リスト」の機能を、あるセルに使った時に、そのセルにリスト以外の文字も入力出来るようにするには?

エクセルの「入力規則」→「入力値の値」の
「リスト」の機能は便利な機能だと思いますが、
急遽、リスト以外の文字も入れなければいけない事態が
あった場合に、他の文字が入力できなかったりします。
私がファイルを全て管理す分にはリストの範囲を
広げたり修正したりできるのでいいのですが、
他の(あまりエクセルを使った事がない)人が
使う場合に、他の文字をいれたい場合に、入れれないで
戸惑ってしまうかもしれません。
ドロップダウンで文字を選択する機能も残しつつ、
手入力も出来るように機能を追加する事はできますでしょうか?

Aベストアンサー

実は私も同じことで以前なやんだのですが、実は単純に
リストを設定する際に、「エラーメッセージ」タブをクリック⇒「不正なデータが入力されたらエラーメッセージを表示する」に入ってるチェックをはずす、これで、リストから選ぶまた、リストにない値を入力するということができるようになります。

Qコンボボックスの設定  【エクセル】

エクセルのコンボボックスについてです。
コンボボックスのリストとして


黄色
というリストをコンボボックスの‘入力範囲’に指定します。

コンボボックスの
‘コントロールの書式設定’→‘リンクするセル’
でセルを指定すると、赤を選んだとき リンクさせたセルには
「1」とでますが、なぜ1と出るのか、というのと
私は「赤」と表示させたいのですが、そのやり方を教えて頂きたいです。

コンボボックスを初めて使うので初心者的な質問だと思いますが宜しくお願いします。

Aベストアンサー

この質問もあいまいな点あるのだが。
(1)データー入力規則ーリストー元の値のドロップダウンリスト
ガあるのだが知っていて使わないのか?
これだと質問のようなことはない。選択したドロップダウンの出るセルに文字が出る。
(2)シートやユーザーフォームにコンボボックスを貼り付けているのか
A。質問者はどうもフォームのコンボボックスを使っているらしい
(「入力範囲」という言葉から)
下記Bをお勧めします。
しかし現状のままだと別のセルに一旦数字を出して(J2とでも仮定して)赤白黄うお出したいセルに
=INDEX(H1:H3,J2)
と入れると良い。
H1:H3に赤、青、黄といれて置く(入力範囲)。
ーー
B.コントロールツールボックスのコンボぼっくすを使うと
FillListRangeに例えばH1:H3  H1:H3に赤、青、黄といれ
LinkedCellを例えばD2にすれば、選択後出るには赤とでる。
ーー
>「初心者的な」といいながら、一番難しい方法でやっているようだ。

Q入力規則のリストボックス

エクセルの入力規則でリストボックスを使って選択したいのですが
その時に、数字のみを抽出する方法はないですか?
例えば
1:りんご
2:みかん
3:バナナ
をリストから選択する時、番号のみが表示されるように
したいのです。
リストにはその番号がどれに該当するかわかるように
りんご、みかん、バナナという内容も表示させたいのです。
よろしくお願いします。

Aベストアンサー

「入力規則」にタグ「入力時メッセージ」があります。
ここの“メッセージ”に対応表を書き込むと
セルを選択したときに、ポップアップで対応表が表示されます。
あとは、好みの位置に移動すれば出来上がり。

上記方法は如何でしょう。

Qエクセル、コンボボックス/フォームのとコントロールツールボックスの

エクセル2000です。
今まではワークシートにフォームのコンボボックスを貼って使ってきました。
でも色を変えたり出来ないので、今度はコントロールツールボックスからコンボボックスを貼ってみました。

質問ですが、コンボボックスに表示させるリストを設定するのに、これまでのフォームのコンボボックスだと書式設定で入力範囲をカーソルをあてて一度に簡単に指定できたのですが、コントロールツールボックスのコンボボックスだとそれが出来ません。VBEditorのプロパティのところのListFillRangeの右側にいちいち手でSheet1!A1:A5のように打ち込まなければならないようです。これではけっこう手間がかかってしまいます。
わたしのやりかたが間違っているのでしょうか?

Aベストアンサー

#2です。
>この意味が良くわかりませんでした。
エクセル(VBA)ではリストに出す範囲を指定するだけですが、
VBのコンボボックスの項目(アイテム)の登録はListFillRangeがないので、AddItemを項目数だけ、記述
する必要があると言うことを言いたかったのです。
エクセル(VBA)では手数が省けていると思います。

QVBA のフォームでTxtボックスとコンボボックス

エクセル2013で、やっとのことでマクロのフォーム(txt入力のみを5項目)を完成させることができました。
次に、そのうちの一つは曜日の入力なのでこれをコンボボックスにして、一覧を出してマウスで選択するように変更したいのですがどうもうまくいきません。マクロは初めてなので基本的な考え方ができていないのです。
 
そこで質問なのですが、参考書には 

Private Sub UserForm_Initialize

End Sub

にマクロを記入するとなっていますが、これをもとの曜日入力ボックスと置き換えることはできないのでしょうか。それとも、終了ボタンのマクロと同じように、別のプロシージャにしないといけないのでしょうか。

それから、これはあまり重要ではないかもしれませんが、私がコンボボックスを作成するとマクロに
Combbox_Changed
のようなプロパティ(?)が表示されて、ヘルプを見てもよくわかりません。これはどういうことなのでしょうか。

よろしくお願いします。

Aベストアンサー

目についたので回答してみます。
私もそんなに詳しくないので間違っていたらすみません。

基本的な概念がわかればご自身でも勉強できそうなので
VBAの初歩の考え方を少しご説明します。

-------------------------------
Private Sub UserForm_Initialize

End Sub
-------------------------------

まずVBA(及びVB)の基本的なコードの見方として以下の様な見方をします。
オブジェクト名:好きに付ける事ができます。
イベント名:VBの中で決まっており、オブジェクトによって可能な動作に違いがあったと思います。
------------------------------------
Private Sub オブジェクト名_イベント名
ここには処理を書くよ!
End Sub
------------------------------------

上記の「イベント名」と表現したのは、VBAのプログラムが
イベント駆動型プログラミングだからです。
どういった物がイベントになるかというと、「クリック」や「選択」(チェクボックスのチェックなど)が
それに当たります。

そしてオブジェクト名というのはVBAの世界でフォーム、ボタン、ラベル、コンボボックスなど
すべて「オブジェクト」と呼ばれる物になります。

これらの内容を合わせて先ほどのコードを見ると以下の様な感じになります。
--------------------------------------
※オブジェクト:UserForm・・・フォームを作成した時の元から設定されているフォーム名
※イベント名:Initialize・・・イニシャライズなので初期化とかの意味

Private Sub フォームの_初期化時

'フォームが表示された時に動かす処理

End Sub
---------------------------------------

これは後に書いている質問の回答になります。
バージョンによって少し違うのかもしれませんが・・・

イベントとの中で、コンボボックスはChangedイベントというイベントが存在します。
何かというと、ComboBoxで何かが選ばれたら処理をするというイベントです。

以下が日本語で表した場合の例になります。
-------------------------------------------------
Private Sub ComboBox1_Change()
   'ComboBox1のリストの中から何か選ばれた場合の処理
   処理1:ComboBox1の値が土曜か日曜の場合は画面に「今日は休日です」を表示
   処理2:ComboBox1の値が月曜日~木曜日の場合は「今日は平日です」を表示
End Sub
-------------------------------------------------


######### ↓ここからが今回の本題↓ ###############

なぜCombBoxの値の設定に、フォームの初期化の処理がでてくるのか・・・
それは、フォームの初期化時にCombBoxのリストの内容を追加しているからです。

※ComboBox1の部分は作成しているCombBox名によって変わります。
  (Excel2007の一つ目に作成したComboBoxはComboBox1)
------------------------------------
Private Sub UserForm_Initialize
'ここには処理を書くよ!
  ComboBox1.AddItem "月"
  ComboBox1.AddItem "火"
  ComboBox1.AddItem "水"
  ComboBox1.AddItem "木"
  ComboBox1.AddItem "金"
  ComboBox1.AddItem "土"
  ComboBox1.AddItem "日"
End Sub
------------------------------------

なかなか説明は難しいものですね。
参考になれば幸いです。

目についたので回答してみます。
私もそんなに詳しくないので間違っていたらすみません。

基本的な概念がわかればご自身でも勉強できそうなので
VBAの初歩の考え方を少しご説明します。

-------------------------------
Private Sub UserForm_Initialize

End Sub
-------------------------------

まずVBA(及びVB)の基本的なコードの見方として以下の様な見方をします。
オブジェクト名:好きに付ける事ができます。
イベント名:VBの中で決まっており、オブジェクトによって可能な動作に違いがあったと思い...続きを読む

Qエクセルに貼りついたコンボボックスについて

パソコン初心者です。よろしくお願いします。

インターネットの画面をコピーしてエクセルに貼り付けました。
余分な部分まで貼り付けてしまい削除したのですが、コンボボックスがどうしても削除できません。(リンクははずしました。)
ドラッグすることもできず、行を削除してもコンボボックスは残っております。どうしたらコンボボックスを削除できるでしょうか?
ご回答よろしくお願いいたします。

Aベストアンサー

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
3)これでツールバーが追加されて「デザインモード」というアイコンが表示され
  ていれば、下記の作業を行ってみて下さい。

次に、コンボボックスの削除を行います。
※添付画像もご覧下さい。

4)ツールバーの「デザインモード」のアイコンをクリックして、くぼんだ状態に
  して下さい。(※デザインモードをONの状態にします。)
5)シート上の消したい「コンボボックス」にマウスを当ててクリックして下さい。
  ※これで「コンボボックス」が選択状態になり、周囲にサイズ変更用の
   マークが表示されると思います。
6)上記5)でコンボボックスが選択状態になったら、[Del]キー(デリートキー)
  を押して下さい。
  ※これで「コンボボックス」が削除されれば完了です。
7)続けて、他のコンボボックスなどのコントロールを削除したい場合は、
 上記5)、6)の作業を繰り返して下さい。

8)なお、シート上のコントロールを全て削除したい場合は、下記の操作を
 行って下さい。
 ◎あらかじめ「デザインモード」をONの状態にします。
   ↓
 ◎メニュー: 「編集」→「ジャンプ」
   ↓
 ◎表示された「ジャンプ」ダイアログの「セル選択」ボタンをクリックします。
   ↓
 ◎表示」された「選択オプション」ダイアログの中の「オブジェクト」という
  項目(オプションボタン)を選択します。
   ↓
 ◎「OK」ボタンをクリックします。
   ↓
 ◎これでシート上の全てのコントロールが選択された状態になります。
   ↓
 ◎ここで[Del]キー(デリートキー)を押せば、全てのコントロールが削除
  されます。

9)作業が終了したら、「デザインモード」アイコンを再度クリックして、
  デザインモードをOFFにします。

以上で作業完了です。

もしも上手くいかなかった場合はすみません。
参考になれば幸いです。

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
...続きを読む

Qエクセル 入力規則を使ったリストボックスの▼を常に表示したい

表題の通り、入力規則を使って、別シートからデータをリンクできるように名前の定義を利用してリスト選択できるようにしました。ですが、そのセルは特に目印がなく、リスト選択ボタンは、そのセルを選択しない限りは表示されませんよね?ですから、この▼のリストボタンだけを常に表示しておいて目印にしておきたいのですが、いろいろ過去ログみましたがわかりません。どのようにすればよいでしょうか?よろしくお願いいたします。ちなみにこれは印刷時にはこのボタンは見えないのが都合よく、パソコン上で編集の時のみ見えればそれでよいのですが。

Aベストアンサー

#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

QエクセルVBA コンボボックスで強制終了

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボボックス22リスト設定:データ数80

現象
 (1)コンボボックス22を▼でなく入力し、保存すると強制終了
 (2)上記現象発生後、コンボボックス1の▼押下で強制終了
 (3)複数のPCで試したが、性能の良いPCでもたまに起こる。
  性能が悪いPCの場合、確実に起きる。
 (4)他のフォームはいくらやってもこの現象は発生しない。
  但し、コンボボックス2~21のような大量なコンボボックスはない

考えること
 (1)コンボボックスのリストの限界等はあるのでしょうか。
 (2)メモリ等の関係で発生するのでしょうか。
 (3)コンボボックスに入力不可とするか、テキストでNoを入力
  させる方法をとった方がよいでしょうか。

長々とすみません。
よろしくお願いいたします。

   

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボ...続きを読む

Aベストアンサー

こんにちは。

>VBAを組んだのは2007で今、それを動かしているのは2002です。
>こんなことをしているのが悪いのでしょうか・・・。

一般論なのですが、VBAの場合は、下位互換は期待しないほうがよい、ということです。下のバージョンでは、テキストコード(.bas)で、エクスポート・インポートをしたほうが良いかもしれません。特に、2007と2003では、ファイルフォーマットが違いますからね。

>自分で設定しない限りは、Add-inの機能はエクセルに入ってないという認識でよいでしょうか?

今、私は、「自分で設定しない限り」だったか、ちょっとはっきり答えられません。これは、当面、そのままにしておきます。

QExcel VBA ユーザーフォームのコンボボックスに表示する値の入力方法

Excel Xを使用して、VBAのユーザフォームにコンボボックスを作りましたが、どうしてもコンボボックス内に表示する値の入力方法が分かりません。
WEBや本などで「これ」と思われるものを実験していますが、どれも表示することができません。
できるだけ詳しく教えていただけませんか?

したいことは、
 cbocenter というコンボボックスに値を出します。
 値は List シートの A2 から A18 に入力済みです。
 それと値から選択した値を data シートの J列 に
 表示させたいのです。(行の指定はできています)

本当に困ってます。よろしくお願いします。

Aベストアンサー

#2です。

全容が見えないので何とも言えないのですが、現在アクティブのCellがJ上にある場合、次のコードで放り込めます。

VBAがそこそこわかっておられるようなので、このヒントで組みこんでもらえるのでないでしょうか?

Excelの場合、コンボボックスに1列しか表示できないので、とりあえず、その値を放り込んで残りの値(shinsei hizuke bangou)はlookup関係の関数を用いれば、引っ張ってこられると思います。Accessのコンボだと、コンボに列方向にも値を持たせられるんですが、、、Excel For Macにこれが採用されているなら、これを利用した方が簡単かと思います。


Private Sub ComboCenter_Change()
'Private Sub ComboCenter_Click() ← Click イベントでもいいかも
Dim Num As Integer

Num = ComboCenter.ListIndex

If ActiveCell.Column = 10 Then
ActiveCell = Worksheets("List").Cells(Num + 2, 1)
End If

End Sub

#2です。

全容が見えないので何とも言えないのですが、現在アクティブのCellがJ上にある場合、次のコードで放り込めます。

VBAがそこそこわかっておられるようなので、このヒントで組みこんでもらえるのでないでしょうか?

Excelの場合、コンボボックスに1列しか表示できないので、とりあえず、その値を放り込んで残りの値(shinsei hizuke bangou)はlookup関係の関数を用いれば、引っ張ってこられると思います。Accessのコンボだと、コンボに列方向にも値を持たせられるんですが、、、Excel For Macにこ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報