
現在下記のコードで”●”を転記することはできるのですがクリアすることもしたいのです
動作としてはsheet1のP.R.T列に値が入ったら各sheetの指定したセルに●を転記させています
今度はsheet1のP.R.T列に値が修正されたときや消されたときには今まで●が転記されていたsheetのセルから●を消したいのです修正された場合は今までのセルを消して指定したセルに転記です
AIに相談してもうまくいきませんでした、どのようにしたらうまくいくでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("AC:AC")) Is Nothing Then
If Application.WorksheetFunction.CountIf(Target, "撤去") > 0 Then
MsgBox "AC列の変更が検出されました。"
FindAndActivateSheet Target
End If
End If
Dim KeyCells As Range
Set KeyCells = Union(Me.Range("P:P"), Me.Range("R:R"), Me.Range("T:T"))
If Not Intersect(Target, KeyCells) Is Nothing Then
Dim cell As Range
For Each cell In Intersect(Target, KeyCells)
If cell.Value <> "" And InStr(cell.Value, "→") = 1 Then
Dim searchValues As Variant
searchValues = Split(Mid(cell.Value, 2), "-")
If UBound(searchValues) >= 2 Then
Dim sheetName As String
Dim cellRef As String
sheetName = searchValues(0)
cellRef = searchValues(1)
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Sheets(sheetName)
On Error GoTo 0
If Not ws Is Nothing Then
Dim checkCells As Range
Dim c As Range
Set checkCells = ws.Range("I3, I9, I15, I21, I27, I33")
For Each c In checkCells
If Trim(c.Value) = Trim(cellRef) Then
Dim markCell As Range
Set markCell = ws.Range("I" & c.row + 1 & ":AF" & c.row + 3).Find(What:=searchValues(2), LookIn:=xlValues, LookAt:=xlWhole)
If Not markCell Is Nothing Then
Dim words As Variant
words = Split(markCell.Value, " ")
Dim word As Variant
Dim markFound As Boolean
markFound = False
For Each word In words
If Trim(word) = Trim(searchValues(2)) Then
markFound = True
Exit For
End If
Next word
If markFound Then
markCell.Offset(1, 0).Value = "●"
End If
End If
End If
Next c
End If
End If
End If
Next cell
End If
' P、R、T列の値がない場合、各シートのマークがあるセルをクリアする
Dim ws_clear As Worksheet
For Each ws_clear In ThisWorkbook.Sheets
If ws_clear.Name <> Me.Name Then ' 自身のワークシート以外のみを処理
Dim markRange As Range
Dim clearCell As Range
Set markRange = ws_clear.Range("I:AF") ' マークを探す範囲を指定
For Each clearCell In markRange
' セルの上の行が存在し、かつセルの値が "●" の場合にマークをクリア
If Not IsEmpty(clearCell.Offset(-1, 0)) And clearCell.Value = "●" Then
clearCell.ClearContents ' 値がないのにマークがある場合、マークをクリア
End If
Next clearCell
End If
Next ws_clear
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
イベント処理のデバッグについて学習していないことがよくわかる
ご質問です。
というのはイベント処理というのはデバッグで
ステップ実行して追跡することが不可欠なんですけど
それをやっていないことがわかるコードになっているからです。
具体的に言うとこのコードの先頭の
If Not Intersect(Target, Me.Range("AC:AC")) Is Nothing Then
の行にブレークポイントをセットしていずれかのセルを
変更すると、その行で停止しますよね?
そこからステップ実行で動作を追跡しないといけないのです。
なぜそれをやっていないことがわかるかというと
このあとのコードでセルを変更したときに、先頭に戻ってしまう
症状を確認していないことがうかがえるからです。
Application.EnableEventsについて調べることを
お勧めします。
そっちのほうがご質問よりも先に解決すべき課題ですから。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) エクセルで連勤チェックをしたいです。 7 2023/12/25 09:14
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 以下のコードを実行しても、オブジェクト変数または、withブロック変数が設定されていませんとエラーが 1 2024/03/07 16:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報
各sheetには同じ場所に配置していますこの表に●をsheet1の列に入れた値で転記させています
そのsheet1の列で修正された場合に●のクリアまたは移動してくれたらありがたいのですが・・・