
いつもお世話になっております
下記の部分が黄色くなり、
型が一致しませんとでます。
If .Value <> "" Then
わかる方おしえてくれませんでしょうか
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
With Target
st = .Address(False, False)
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
Select Case st
Case "B"
If .Value <> "" Then
With .Resize(, 7)
.Borders.LineStyle = xlContinuous
.Borders.ColorIndex = 6
.Borders(xlEdgeTop).ColorIndex = 6
End With
Else
.Resize(, 7).Clear
End If
End Select
End With
End Sub
No.3ベストアンサー
- 回答日時:
こんばんは
問題はWorksheet_Changeイベントの使い方にあります
複数選択したセルの場合 Target.Valueは取得できません
仮に操作するセルを1セルで行っても 複数セルの場合を排除する(処理しない)コードが無ければ エラーが発生します
(イベント抑制が無く複数セルを操作する処理がある場合)
これは
If .Value <> "" Then Trueの場合に問題が無くとも
空白にした場合 .Resize(, 7).Clear コードで再びイベントが発生して
Targetの中身が.Resize(, 7)となるからです
従ってWorksheet_Changeイベントで
セルの値を操作する場合に欠かせない
Application.EnableEvents = False ’イベント発生を抑止
処理
Application.EnableEvents = True
また、イベント発生時の選択範囲を取得して処理を分ける条件分岐
If Target.Count > 1 Then Exit Sub 1セルのみ実行
や
If Target.Count = 1 Then 複数範囲を処理をする場合など
処理 1セル
Else
For Each c In Target 複数セル
処理
Next
End If
など必須と考えて良いと思います
追加例
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
With Target
st = .Address(False, False)
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
Select Case st
Case "B"
Debug.Print .Address(False, False)
If .Value <> "" Then
With .Resize(, 7)
.Borders.LineStyle = xlContinuous
.Borders.ColorIndex = 6
.Borders(xlEdgeTop).ColorIndex = 6
End With
Else
.Resize(, 7).Clear
End If
End Select
End With
Application.EnableEvents = True
End Sub
いつもありがとうございます
なかなか奥が深いです
If Target.Count > 1 Then Exit Sub
ありがとうございました。
No.4
- 回答日時:
追記
複数範囲を処理をする場合など コピーや 範囲選択Delキー操作の時の例
Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
Dim i As Long
Application.EnableEvents = False
For i = 1 To Target.Count
With Target(i)
st = .Address(False, False)
st = Left(.Address(0, 0), IIf(.Address(0, 0) Like "[A-Z][A-Z]*", 2, 1))
Select Case st
Case "B"
If .Value <> "" Then
With .Resize(, 7)
.Borders.LineStyle = xlContinuous
.Borders.ColorIndex = 6
.Borders(xlEdgeTop).ColorIndex = 6
End With
Else
.Resize(, 7).Clear
End If
End Select
End With
Next
Application.EnableEvents = True
End Sub
For i = 1 To Target.Count
は一度にセルをdeleteするとすべてきえて
下記の場合消えない
If Target.Count > 1 Then Exit Sub
なるほどです
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) select caseの入れ子 3 2023/03/08 18:48
- Visual Basic(VBA) ワークシートチェンジで曜日を表示する方法 1 2023/03/04 21:51
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 配列からセルに「...
-
【VBA】【ユーザーフォーム_Lis...
-
Excelで空白セル直前のセルデー...
-
エクセル VBA ボタンをクリック...
-
VBAマクロ実行時エラーの修正に...
-
QRコード作成マクロについて
-
VBA:日付を配列に入れ別セルに...
-
特定の色のついたセルを削除
-
Excel VBAでCheckboxの名前を変...
-
Excel VBA 同じ処理を複数回行...
-
HTMLのテーブルのセルの値をPHP...
-
エクセル マクロ データの転記
-
DataGridViewのフォーカス遷移...
-
複数指定セルの可視セルのみを...
-
エクセルVBA 郵便番号の書式判...
-
Excel 範囲指定スクショについ...
-
データグリッドビューの結合セ...
-
DataGridViewでグリッド内に線...
-
【Excel VBA】マクロで書き込ん...
-
VBA にて、条件付き書式で背景...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excel UserForm の表示位置
-
特定の色のついたセルを削除
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
複数指定セルの可視セルのみを...
-
C# DataGridViewで複数選択した...
-
【Excel VBA】マクロで書き込ん...
-
データグリッドビューの結合セ...
-
DataGridViewのフォーカス遷移...
-
Excel 範囲指定スクショについ...
-
EXCEL VBA 文中の書式ごと複写...
-
【Excel VBA】一番右端セルまで...
-
【VBA】写真の貼り付けコードが...
-
QRコード作成マクロについて
-
入力規則のリスト選択
-
CellEnterイベント仕様について
-
エクセル、マクロで番号を読込...
おすすめ情報
下記のコードだけならうまくいくのですが、
わかりませんです。
空白でなければ線を引くでなければ消したいだけなのに。
If .Value <> "" Then
With .Resize(, 7)
.Borders.LineStyle = xlContinuous
.Borders.ColorIndex = 6
.Borders(xlEdgeTop).ColorIndex = 6
End With
End If
target.valueをactivecell.valueにしました。
だめでした
どうしたよろしいでしょうか
.Borders(xlEdgeTop).ColorIndex = 6がもんだいなのかな