[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ドロップダウンリストでカレンダーに入力』(あやちゃん)
初心者です。
ドロップダウンリストで月と日を別々に確定し、更にテキストに入力した数字を、別途作成したカレンダーに反映させる、というような事はできるのでしょうか?例えば毎日の注文件数を記録したい場合「4月14日、注文150件(“150”をテキストに入力)」→カレンダーの4/14のセルに150が入力される。宜しくお願いします。
マクロ(VBA)を使えば出来ると思いますが、 シートのレイアウトが分からないと回答しにくいです。
(INA)
ありがとうございます。 今考えているレイアウトは…
A1に月のドロップダウンリスト B1に日のドロップダウンリスト C1に数を入力するテキスト
別シートにカレンダーを作成 1つのセルに1日 たとえば、4/14 だったら D5 あたりになるでしょうか。
というものです。分かりますでしょうか…? ちなみに複雑なマクロ(VBA)を使って作業をした事がないのですが こんな私でも出来るでしょうか?
マクロのプログラム自体は、それほど複雑ではないです。 最初からご自分で作るとなると難しいと思いますが、 教えられたプログラムを、おおまかに理解することは出来ると思います。
プログラムなので、重要なのは カレンダーシートの作り方です。 これがしっかり決まっていないとダメです。
カレンダーは、1ヶ月ぶんを1シートですか? シート名は?
月、日付、テキストのセルの位置関係は? 日付のセルに入力される 値 と 表示形式 はどうなっていますか?
(INA)
INAさん、度々ありがとうございます。 まったく分からない状態でやっているので、分かりづらい説明ですみません。 これから作成しようとしているので、どのようなレイアウトにするかは 少しずつ勧めていこうと思っていましたので… レイアウトが決まっていないと難しいんでしょうか?
カレンダーは、1ヶ月分を1シートです。 シート名は月名で「4月」とします。
>月、日付、テキストのセルの位置関係は? これはどういう意味でしょうか? 月、日付、テキストは、フォームから作成しています。
また >日付のセルに入力される 値 と 表示形式 はどのようにしたら分かりますか?
お手数かけます。宜しくお願いします。
>レイアウトが決まっていないと難しいんでしょうか? 難しいと言うより、無理です。 適当にマクロを作っても、レイアウトによって変更が必要になるでしょうし、 場合によっては、ほとんど作り直しにもなりかねません。
>シート名は月名で「4月」とします。 4 は 全角ですね。( これも重要なので。)
>これはどういう意味でしょうか? >月、日付、テキストは、フォームから作成しています。 フォームというのが、よくわかりませんが、 シート上のレイアウトを知りたかったのです。 たとえば、
[4月]シート A B C D E F G 1 4/1 4/2 4/3 4/4 4/5 4/6 4/7 2 ←テキストを入力する行 3 4/8 4/9 4/10 4/11 4/12 4/13 4/14 4 ←テキストを入力する行 5 6
です。
>>日付のセルに入力される 値 と 表示形式 >はどのようにしたら分かりますか?
上記の例で言えば、 A1 セルには 月日 が入力されていますが、 4月のシートなので、日付の 1 だけの入力にするか 4/1 と入力するか、です。
さらに 4/1 と入力すると、 自動的に 2004/4/1 とセルに入力されます。 しかし、表示されるのは、セルの書式設定の表示形式によって変わってきます。 セルに 「年月日」で入力されると、 セルの表示形式は、 「日付」 となります。 この場合、Excel は文字でなく日付として、処理されます。 (日付としての計算が可能)
しかし、単純に 4/1 と セルに入力し、表示も同じようにするのであれば、 セルの表示形式は、「文字列 」にする必要があります。 そうすると、ただの文字として扱われます。
(INA)
INAさん、初心者相手に細かく教えて下さってありがとうございます。 初心者の私でも分かりやすい説明で助かります!
レイアウトはINAさんが表示して下さった形ですが、 通常のカレンダーのようにしたいので 日付の表示形式は「1」「2」…としたいと思っています。 ただ、元のドロップダウンからカレンダーに反映させる時に、月別のシートを作成する事を考えると 「4/1」「4/2」と確定する方が楽なんでしょうか? これは素人考えで思った事なので、関係なかったら無視して下さい。
>通常のカレンダーのようにしたいので となると、1行目に「曜日」を表示するようにした方が良いのでしょうか?
>日付の表示形式は「1」「2」…としたいと思っています。 セルには、2004/4/1 と入力して、 セルの書式設定の 「ユーザー定義」 で、 d 入力して、設定してください。 そうすれば、セルには年月日が入力されますが、表示されるのは、日にち だけとなります。
ちなみに、2004/4/1 と入力したセルからオートフィル(連続データ) を 横方向に使うと、入力する手間が省けます。
http://hp.vector.co.jp/authors/VA014071/tips/fill_1.html
(INA)
>通常のカレンダーのようにしたいので >となると、1行目に「曜日」を表示するようにした方が良いのでしょうか?
おっしゃる通りです。 ここまでの情報でどのようなマクロのプログラムにしたらよいか分かりますか?
どうでっか?マクロは捗ってまっか? シートに貼り付けたコントロールは扱いが難しいんですワ。 同じシートやったら問題おまへんねんけど、シート間にまたがる作業は色々難点が おまっせ。 まあ試しにテストしてみてくだはい。
新しいブックのSheet1にツールボックスでコンボボックス2個とテキストボックスを 配置して下さい。 シート名ですけど全角で 4月 とか 5月とかにしておくんなはれ。 シートのレイアウトはそれぞれ、3行目のA列からG列まで1〜7、6行目は8〜14、 後同じように3行置きにそれぞれ日付を書き込んでくだはい。 単なる数値でよろしいで。日付っちゅうんは誰が見ても解りますさかいナ
日付の下の行以外は好きに使うてもろて結構です。 その数値の下の行に転写するようにしてありますさかいナ。 シート名も日付もそれを頼りに検索しますからくれぐれも間違わんように頼んます。
[Alt]+[F11]でVBEを開きます。 左のプロジェクト欄のSheet1をWクリックしてそのシートモジュールに下のコードを コピペしてくだはい。 '============(で囲んだ範囲) '============================ Dim day_s As Integer Dim manth_s As Integer '-------------------------- Private Sub ComboBox1_Change() With ComboBox1 For i = 0 To 11 If .ListIndex = i Then manth_s = i + 1 Exit For End If Next i
End With TextBox1.Text = "" With ComboBox2 .Clear Select Case manth_s Case 1, 3, 5, 7, 8, 10, 12 For i = 1 To 31 .AddItem i & "日" Next i Case 4, 6, 9, 11 For i = 1 To 30 .AddItem i & "日" Next i Case Else For i = 1 To 29 .AddItem i & "日" Next i End Select End With End Sub '------------------------ Private Sub ComboBox2_Change() With ComboBox2 For i = 0 To 30 If .ListIndex = i Then day_s = i + 1 Exit For End If Next i End With
End Sub '---------------------------- Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim i As Integer, n As Integer
If KeyCode = vbKeyReturn Then Application.ScreenUpdating = False data = StrConv(manth_s, vbWide) & "月" With Worksheets(data) Worksheets(data).Select For i = 3 To 18 Step 3 Next i
End With Application.ScreenUpdating = True End If
End Sub
'================================== 次に「挿入」→「標準モジュール」を選択して そのモジュールに下のコードをコピペしておくんなはれ。 コピーが終わったら「Alt」+「Q」でエクセルに戻ります。
一番最初だけ「Alt」+「F8」でauto_openを実行してくだはい。 2回目からはこのファイルを開くと同時に勝手に作業してくれます。
さあ、これで準備はOKですけど旨いこといきましたか? 再確認しながら進めてくださいよ。
今度はコンボボックスのスクロールをクリック(月のボックス)したら12ヶ月分 のデータがべろりとぶらさがりまっしゃろ。 そのうちの1つを選択してConboBox2をクリックですワ。 最後はテキストボックスにデータを放り込んでエンターキーを叩いてくだはい。
入力した月のシートをめくってみたら、そうでんねん、ちゃんとカレンダーに転送 されてまっしゃろ?
せやけど、これ、あんまりええ方法やとは思いまへんけどなぁ。 ほな...(弥太郎) '----------------------- Sub auto_open() Dim i As Integer With Worksheets("sheet1").ComboBox1 For i = 1 To 12 .AddItem i & "月" Next i End With End Sub
弥太郎さん、うまいこといきました!ありがとうございます!! これを私一人でトライしようとしてたとは、何と無謀だったか という事がよ〜く分かりました… カレンダーの色付け等、これからがんばってやります。 また分からない事があったら教えて下さい!
弥太郎さん、プログラムを作成していただいた上で、更に質問があります…。 通常のカレンダーのような見た目にしたいのですが、月ごとに1日がスタートする 曜日が違いますよね?それを設定する事は可能でしょうか? A列から日曜日、4月なら、E3 から1日がスタート、のように…。 こうする事によってプログラムが面倒くさくなるようでしたら、そのままで 全然かまいませんので… 宜しくお願いします。
あやちゃんさん、ごめんなはれや。 ヒマ見つけてという条件でよければ考えてみますワ。(笑) 仕事に、ヤキウ観戦に忙しい(弥太郎)
弥太郎さん、ありがとうございます。 「おヒマな時間があったら」で結構ですので、宜しくお願いします。 そんなに急ぎの件ではないので、ホント、時間がある時で結構です。 余談ですが…。ヤキウ観戦、阪神ファンですか? (あやちゃん)
世間一般の通例として「ヒマがでけたら」等の文言を口にする手合いには、永久に ヒマがでけんモンなんですが、キーワード「阪神」の文字が出てきた途端にヒマがで けるっちゅうやから世間って不思議な巡りあわせになってまんなぁ。(笑)
ところで、もったいぶる程ほないにたいそうな変更はおまへんねんで、えぇ。
For n = 1 To 7 If .Cells(i, n) = "" Then Exit Sub If .Cells(i, n) = day_s Then .Cells(i + 1, n) = TextBox1.Text Worksheets("sheet1").Select Application.ScreenUpdating = True Exit Sub End If
Next n ’ここんところを
For n = 1 To 7 If .Cells(i, n) <> "" Then If .Cells(i, n) = day_s Then .Cells(i + 1, n) = TextBox1.Text Worksheets("sheet1").Select Application.ScreenUpdating = True Exit Sub End If End If Next n
こないに変えてもろたらすべてOKですワ。 いやぁ、マクロで曜日入りのカレンダーを作れというご要望かと勘違いしてましてナ、 それやとちょっと無い頭を絞らなアカンから時間の余裕が欲しい思いましてんけど、 こんなんやったら直ぐお答えでけたのになぁ。(この早トチリめ!)
まぁ、折角やさかいCommandButton1もチョット触っときましたから差し替えといて おくんなはれ。閏年の日付の問題で28日と29日がでてきまっしゃろ? それを解消しときましたワ。 ほな...(弥太郎)
'----------------------- Private Sub ComboBox1_Change() Dim i As Integer, f As Integer
With ComboBox1 For i = 0 To 11 If .ListIndex = i Then manth_s = i + 1 Exit For End If Next i
End With TextBox1.Text = "" With ComboBox2 .Clear Select Case manth_s Case 1, 3, 5, 7, 8, 10, 12 f = 31 Case 4, 6, 9, 11 f = 30 Case Else If Year(Now()) Mod 4 = 0 Then f = 29 Else f = 28 End If End Select For i = 1 To f .AddItem i & "日" Next i End With End Sub
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.