Excelでのカレンダーコントロール設定について

このQ&Aのポイント
  • Excelでカレンダーコントロールを設定する方法について説明します。ターゲットのセルが結合されている場合、カレンダーコントロールが正しく表示されない問題があります。
  • 結合されたセルのターゲットにカレンダーコントロールを表示するための解決策を探しています。結合を解除すれば問題は解決しますが、結合したままカレンダーコントロールを表示する方法はありますか?
  • Excelのフォームコードとシートコードを使用してカレンダーコントロールを設定しています。フォームコードではカレンダーコントロールのダブルクリックで値をセルに入力し、シートコードでは特定のセルを選択した際にカレンダーコントロールを表示するようにしています。
回答を見る
  • ベストアンサー

excelでのカレンダーコントロールの設定について

excelでカレンダーコントロールを設定しました。 ターゲットとしているセルが、結合セルなのですが、うまく表示されません。セルの結合を解除すればうまくいきます。 しかし、ターゲットのセルは結合させておきたいので、何か解決策はありますでしょうか? 以下、コードの内容です。 ■フォームコード Private Sub Calendar1_DblClick() ActiveCell.Value = Me.Calendar1.Value End Sub ■シートコード Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "$A$6" And Target.Address <> "$A$13" And Target.Address <> "$A$20" And Target.Address <> "$A$27" Then Exit Sub UserForm1.Show End Sub

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

  • ベストアンサー
noname#130090
noname#130090
回答No.1

これでいけるのではないかという案を。 どのセルが結合しているのかわかりませんが 仮に「A6とB6」が結合されているのでしたら Target.Address <> "$A$6" を Target.Address <> "$A$6:$B$6" ←と、 このように変えてみてはいかがでしょうか? ワイルドカードを使う方法も考えてみましたが ターゲットが「AA67」などの場合にも 誤作動してしまいそうなのでこの方法を提案します。

77panda
質問者

お礼

ご回答ありがとうございます! 結合しているセルはA6~A8でした。 ご回答を参考に$A$6:$A$8でやってみたところ、うまくいきました! ありがとうございましたm(_ _)m

その他の回答 (1)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

>ターゲットとしているセルが、結合セルなのですが、うまく表示されません うまく表示されないとは、UserFormが表示されないということですよね? 例えば、セルA6:A9 が結合されていたら、 Target.Addressは、$A$6:$A$9と結合セルの3セルのアドレスになります。 で、If Target.Address <> "$A$6" この結果は、常にTRUEになり質問のような結果になります。 結合セルありの場合でもうまくいくようにする方法を2つ提示しておきます。 '●(1)選択したセルの先頭セルのアドレスを比較-------  Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Target.Cells(1).Address <> "$A$6" And _     Target.Cells(1).Address <> "$A$13" And _     Target.Cells(1).Address <> "$A$20" And _     Target.Cells(1).Address <> "$A$27" Then Exit Sub   UserForm1.Show End Sub '●(1)Intersecメソッドを使う方法----------------  Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Intersect(Target, Range("A6,A13,A20,A27")) Is Nothing Then Exit Sub  UserForm1.Show End Sub '----------------------------------------- 以上です。

77panda
質問者

お礼

ご回答ありがとうございます! >うまく表示されないとは、UserFormが表示されないということですよね? →はい、その通りです。 基本的な用語も使えず、お恥ずかしい限りです(><;) 間違っていた理由も分かりやすいご説明のおかげで、理解できました! >●(1)Intersecメソッドを使う方法 他サイトで参考させていただいたなかに、ご提示のコード表示がありましたが、いまいち理解できず、If Target.Address <> "$A$6"にしていました。 今後も勉強していきます。ありがとうございましたm(_ _)m

関連するQ&A

  • Excel2007のカレンダーコントロール

    Excel2007のカレンダーコントロールで質問します。 Private Sub Calendar1_Click() ActiveCell.Value = Calendar1.Value ActiveSheet.Calendar1.Visible = False End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$4" Then ActiveSheet.Calendar1.Visible = True End If End Sub この状態ですと、セルA4をクリックしたときだけカレンダーコントロールが表示されます。 A列をどこでもクリックしたときにカレンダーコントロールが表示されるようにするには どこを、どう変更すればよいのでしょうか? 教えてください。

  • 指定セルクリックでカレンダー表示

    Excelsheet1VBAコードに下記に記載されておりA列全てのセルクリックでカレンダーが表示されますがA1セルクリックのみカレンダー表示するにはどのようにコードを変更すれば良いかお願いします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 複数セル選択時は無視 If Target.Count <> 1 Then Exit Sub ' A列以外は無視(今回サンプルの例) If Target.Column <> 1 Then Exit Sub ' カレンダーフォームを起動する Call ShowCalendarFromRange(Target) End Sub

  • マクロでカレンダーから選択したセルに日付を入力したい

    こんばんは。最近VBAの勉強を始め参考書を見ながら下記プログラミングを使い、選択したセルにカレンダーから日付をダブルクリックで入力したいのですが、記述が分かりません(○○○部分)。入力するセルは行や列を一行毎ずらしたりせず、自由に選択してダブルクリック入力したいのです。今の記述だと、1つのセルだけ入力した後、次のセル選択が出来ず困っています。ご指導宜しくお願い致します。 Private Sub Calendar1_Click() ActiveCell.Value = Calendar1.Value  ○○○○ End Sub ----------- Private Sub UserForm_Initialize() Calendar1.Value = Data End Sub ----------- Private Sub Sheet1_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column <> 1 Then Exit Sub UserForm1.Show Cancel = True End Sub

  • エクセルVBAについて

    エクセルVBAについて range("B5") = 1行の、選択したセルの値 というようなマクロを作成したいと思っています。 というのも、B5セルの値が、1行で選択したセルの値に変化できればと思っています。 ちなみに下のようなコードを書いてみたのですが、うまくいきません orz Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("B5") = Rows(1).ActiveCell.Value End Sub 初心者で申し訳ありませんが、よい方法がありましたら、 よろしくお願いいたします。

  • エクセルコードについて

    エクセルコードについて Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Target.Row >= 1 And Target.Row <= 10 And Target.Column >= 1 And Target.Column <= 10 Then     If Target.Value = "○" Then       Target.Value = ""     Else       Target.Value = "○"     End If     Cancel = True   End If End Sub ではセルA1~J10ですが、これをA1~A10などに変更するのにはどのようにすればよろしいでしょうか。

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • エクセルVBAについて

    エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub    '●複数セル選択は無視  If Target.Row <> 1 Then Exit Sub    '●1行目以外の選択は無視  If Target.Column > 6 Then Exit Sub   '●F列目以降の選択は無視  If Target.Value = "" Then Exit Sub   '●選択セルが未入力なら無視    Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。

  • エクセル フォームを閉じてセルに戻る

    何時もご指南頂きとっても感謝いたしております さて 先般こちらで ご指南頂き Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Cells.Count = 1 Then Select Case Target.Column Case 1 ' A列の場合 UserForm1.ListBox1.ControlSource = Target.Address UserForm1.Show Case 2 ' B列の場合 UserForm2.ListBox1.ControlSource = Target.Address UserForm2.Show End Select End If End Sub というコードを作りましたがそれぞれのフォームをリストボックスを選択した後 自動で其のフォーム閉じてシートに戻るとき最初にWクリックしたセルの右隣のセルに戻るようにしたいのですが いろいろ私なりに試してみましたがダメでした どうかご指南ください よろしくお願いいたします。

  • セル横にカレンダーを表示、入力したい。

    教えて!goo に昨日登録し、初質問させていただく  gekkadokusyaku(月下独酌) と申します。 新参者をよろしくお願いします。 Excel2010で家計簿を作成中です。セル横にカレンダー表示して日付をクリック入力したいのですが、カレンダーを入力セル横に持ってくるにはどうしたらよいでしょうか。(カレンダーが画面中央に来てしまいます。)カレンダーはネット上からダウンロードしたものを使用しています。 下記のマクロが家計簿シートに記してあります。これに何か書き加えて希望のものができないでしょうか。 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) '家計簿にカレンダー表示 If Target.Column = 1 Or Target.Column = 11 Or Target.Column = 21 Then If Target.Row >= 5 And Target.Row <= 65 Then frmCal.Show End If End If End Sub 以上よろしくお願いします。

  • エクセルのマクロコードに付いて教えて下さい。

    下記のマクロコードがありますが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With End Sub セル位置の指定を変更する場合は、どの様に 書けば良いのですか? このコードですと、セルA1の入力指定でなっていますが A1~A5までとか。A1、B1,C1とかにする場合はどの様に 書けば良いか教えて下さい。 マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

専門家に質問してみよう