
いつもお世話になっております。
以前、頂いました、コードの
質問があります。
Case "E"
のところを
Range("D4") range("D5")どちらもIsdateだったら
という条件をつけるにはどうしたらいいの
おしえてくれませんでしょうか
よろしくお願いいたします。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim cnt As Long
With Target
st = .Address(False, False)
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
End With
Select Case st
Case "E"
If IsDate(.Value) Then
ActiveSheet.Shapes.AddShape(msoShapeOval, 74.25, 45.75, 43.5, 48.75).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
Selection.ShapeRange.Fill.Visible = msoFalse
End If
End Sub

No.7ベストアンサー
- 回答日時:
以下のようになります。
オートシェイプの位置は、調整してください。右側のオートシェイプは、F12、F13のセルを見ています。(G12,G13は誤記と解釈します)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim cnt As Long
Dim shape_obj As Object
With Target
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
Select Case st
Case "D"
If Target.Row <> 4 And Target.Row <> 5 Then Exit Sub
If IsDate(Range("D4").Value) And IsDate(Range("D5").Value) Then
If shape_exist("Dshape", shape_obj) = False Then
ActiveSheet.Shapes.AddShape(msoShapeOval, 74.25, 45.75, 43.5, 48.75).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.name = "Dshape"
Else
shape_obj.Visible = msoTrue
End If
Else
If shape_exist("Dshape", shape_obj) = True Then
shape_obj.Visible = msoFalse
End If
End If
Case "F"
If Target.Row <> 12 And Target.Row <> 13 Then Exit Sub
If IsDate(Range("F12").Value) And IsDate(Range("F13").Value) Then
If shape_exist("Fshape", shape_obj) = False Then
ActiveSheet.Shapes.AddShape(msoShapeOval, 237.75, 138.75, 43.5, 48.75).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.name = "Fshape"
Else
shape_obj.Visible = msoTrue
End If
Else
If shape_exist("Fshape", shape_obj) = True Then
shape_obj.Visible = msoFalse
End If
End If
End Select
End With
End Sub
Private Function shape_exist(ByVal name As String, ByRef shape_obj) As Boolean
Dim wshape As Object
shape_exist = False
For Each wshape In ActiveSheet.Shapes
If wshape.name = name Then
shape_exist = True
Set shape_obj = wshape
Exit Function
End If
Next
End Function

No.5
- 回答日時:
>下記のように
>Case "D"
>If IsDate(Target.Value) And IsDate(Range("D4").Value) And IsDate(Range("D5").Value) Then
>ためしたところRange("D4")に日付が入力された時点で
>msoShapeStylePreset7が出現してしまいます。
私が書いた回答は、以下のようにすることです。
Case "E"
If IsDate(.Value) And IsDate(Range("D4").Value) And IsDate(Range("D5").Value) Then
既存のマクロ(あなたが質問で提示したマクロ)は、添付図のように、E列(例えば緑のセル)に日付を入力したとき、
オートシェイプを表示するものと理解しました。
今回の要望は、E列に日付が入力されたとき、D3、D4(黄色のセル)が日付なら、オートシェイプを表示する
と理解したのですが、違ったでしょうか。
もしそうであれば、どのようにされたいのか、再度提示していただけませんでしょうか。(画像も添えていただければ助かります)
No.4
- 回答日時:
No.3 の訂正です。
最初有った「IF 文」が抜けてました。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim cnt As Long
If IsDate(Target.Value) Then
Select Case Target.Column
Case 4 'D列
If IsDate(Cells(Target.Row, 5).Value) Then
ActiveSheet.Shapes.AddShape(msoShapeOval, 74.25, 45.75, 43.5, 48.75).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
Selection.ShapeRange.Fill.Visible = msoFalse
End If
Case 5 'E列
If IsDate(Cells(Target.Row, 4).Value) Then
ActiveSheet.Shapes.AddShape(msoShapeOval, 74.25, 45.75, 43.5, 48.75).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
Selection.ShapeRange.Fill.Visible = msoFalse
End If
End Select
End If
End Sub
※ 大変申し訳ございませんでした。
No.3
- 回答日時:
先ほどは全部書きませんでしたがこちらでは問題なく動きますよ。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim cnt As Long
Select Case Target.Column
Case 4 'D列
If IsDate(Cells(Target.Row, 5).Value) Then
ActiveSheet.Shapes.AddShape(msoShapeOval, 74.25, 45.75, 43.5, 48.75).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
Selection.ShapeRange.Fill.Visible = msoFalse
End If
Case 5 'E列
If IsDate(Cells(Target.Row, 4).Value) Then
ActiveSheet.Shapes.AddShape(msoShapeOval, 74.25, 45.75, 43.5, 48.75).Select
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset7
Selection.ShapeRange.Fill.Visible = msoFalse
End If
End Select
End Sub
No.2
- 回答日時:
列対応なら
If IsDate(Target.Value) Then
Select Case Target.Column
Case 4
If IsDate(Cells(Target.Row, 5).Value) Then
'処理
Case 5
If IsDate(Cells(Target.Row, 4).Value) Then
'処理
End Select
End If

No.1
- 回答日時:
If IsDate(.Value) Then を
If IsDate(.Value) And IsDate(Range("D4").Value) And IsDate(Range("D5").Value) Then
にしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】2つのシートの値を比較...
-
Worksheets メソッドは失敗しま...
-
VBAで指定範囲内の空白セルを左...
-
【VBA】オートフィルタで抽出し...
-
VBAを使って検索したセルをコピ...
-
URLのリンク切れをマクロを使っ...
-
VBAで、特定の文字より後を削除...
-
マクロ 最終列をコピーして最終...
-
VBAを用いて条件付きの平均値、...
-
vba 2つの条件が一致したら...
-
VBAのFind関数で結合セルを検索...
-
ExcelVBAで、必要な列を抽出す...
-
【VBA】複数行あるカンマ区切り...
-
cellsプロパティ列名をアルファ...
-
エクセル VBA 条件にあうセルの...
-
Worksheet_Change(ByVal Target...
-
B列の最終行までA列をオート...
-
Excel VBAにおける複数条件での...
-
R言語で読み込んだデータの列名...
-
C# 列の挿入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
IIF関数の使い方
-
Changeイベントでの複数セルの...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
DataGridViewに空白がある場合...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBAでのリスト不一致抽出について
-
エクセル 2つの表の並べ替え
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBA 列が空白なら別のマクロへ...
おすすめ情報
いつもお世話になっております。
下記のように
Case "D"
If IsDate(Target.Value) And IsDate(Range("D4").Value) And IsDate(Range("D5").Value) Then
ためしたところRange("D4")に日付が入力された時点で
msoShapeStylePreset7が出現してしまいます。
説明不足で申し訳ございませんでした。
添付ファイルのようにしたいのです。
もし、お時間があれば教えてくれませんでしょぅか。
すみませんが宜しくお願い致します。
失礼いたしました。
どちらかが、空白セルなら、
オートシェイプを非表示
申し訳ございませんでした。
よろしくお願いいたします。