閲覧ありがとうございます。当方VBA初心者です。
エクセルでタスク管理のできるカレンダーを作成中です。
日付ごとに3列あって、
1 | 2 | 3 |
---|---|---|
タスク番号欄 | メモ欄 | チェック欄 |
として運用予定です。
(メモ欄はコードで奇数列か偶数列かを判別して動かす都合上、2列を結合してあります)
VBAで色々と作成中なのですが、
「タスク番号に×をつけたら、他の日付に入れている同じタスク番号を全て削除する」
というコードが上手くかけずに困っています。
↓×を入れたら(×が入っている箇所以外の)黄色のセル全部(に入力されている値)が消えてほしいのですが…2カ所しか消えません。
やりたいこととしては、
0. タスク番号の横に×を入れる
0. その瞬間に「○○番は終了しました!○○番の予定をカレンダーから削除してよろしいですか?」とYesNoのmsgboxを表示
0. 「はい」を押したら、他の日付に入っている番号をカレンダーのセル上から削除する(×を入れたところは除く)
といった流れです。
消える箇所と消えない箇所があって、その法則性がわからず困っています。
お力添えいただければ大変助かります。
よろしくお願いいたします。
追記:
試しに番号をずらっと並べてみたらこんな感じで削除されます。
↓
VBA
1 2Private Sub Worksheet_Change(ByVal Target As Range) 3 4 Dim c As Range 5 Dim ws As Worksheet 6 7 '以下、カレンダーに入れた×をSheet2に転記するコード。×を入れたら動く 8 If Intersect(Target, Range("CT5:WO103")) Is Nothing Or Target.Count > 1 Then Exit Sub 9 10 With Target 11 12 If Not .MergeCells = True And .Column Mod 2 = 1 Then 'ターゲットが奇数列だった場合 13 14 Set ws = Worksheets("Sheet2") 15 Set c = ws.Cells.Find(What:=.Offset(, -3), LookIn:=xlValues, lookat:=xlWhole) 16 If Not c Is Nothing Then 17 c.Offset(1) = .Value 18 End If 19 20 21 22'以下、質問のコードです 23 If .Value = "×" Then 24 Dim htn As Integer 25 Dim nmb As Range 26 Set nmb = Target.Offset(0, -3) 27 htn = MsgBox(nmb & "番は終了しました!" & vbCrLf & vbCrLf & nmb & "番の予定をカレンダーから削除してもよろしいですか?" & vbCrLf & "(消すと元に戻りません)", vbYesNo + vbExclamation, nmb & "の削除") 28 29 If htn = vbYes Then 30 Dim a As Range 31 Dim peke As Boolean 32 Dim a2 As Range 33 34 Set a = Range("CT5:WO103").Find(What:=nmb.Value, After:=nmb, lookat:=xlWhole) 35 36 37 Do 38 If a.Offset(0, 3).Value = "" Then 39 Set a2 = a 40 a2.ClearContents 41 42 End If 43 44 Set a = Range("CT5:WO103").FindNext(a) 45 46 Loop Until a.Address = nmb.Address 47 48 End If 49 End If 50 End If 51end with 52end sub
「該当するセル全てを削除したい」というのは”セルの削除”ではなく”セルの文字列の削除”という意味でしょうか?
すみません、その通りです!セルの内容だけ削除したいのです。。ところどころ色をつけてるので文字だけの削除になります。
「Set a = Range("CT5:WO103").FindNext(a)」の後で、aに対象セルがセットされているかは確認されましたか?
確認していませんでした????
一番最初に貼った画像と同じ番地に111と入れて、
Set a = Range("CT5:WO103").FindNext(a)の後でdebug.printをしてみたところ、
$DJ$16
$DF$20
$DN$20←削除されていない
$DN$26←削除されていない
$CT$32
$DB$37
と表示されました。(この確認方法で合っていますかね…?)
また、CT16にも111と入れていて、コードを実行した結果削除されていますが上記には表示されていませんでした。
検索には成功しているなら、「If a.Offset(0, 3).Value = ""」のところではねられているのかと。セルに空白文字など入っていませんか?
!!
If Not a.Offset(0,3).Value="×"にしたらできました!
プルダウン選択なので "" で大丈夫だろうと思ってました・・・
ありがとうございました!!
回答2件
あなたの回答
tips
プレビュー