質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

465閲覧

特定の値を検索して、該当する全てのセルに入力されている値を削除したい

city_yoshy

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/06/28 12:04

編集2020/06/28 12:56

閲覧ありがとうございます。当方VBA初心者です。

エクセルでタスク管理のできるカレンダーを作成中です。
日付ごとに3列あって、

123
タスク番号欄メモ欄チェック欄

として運用予定です。
(メモ欄はコードで奇数列か偶数列かを判別して動かす都合上、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/06/28 12:51

「該当するセル全てを削除したい」というのは”セルの削除”ではなく”セルの文字列の削除”という意味でしょうか?
city_yoshy

2020/06/28 12:52

すみません、その通りです!セルの内容だけ削除したいのです。。ところどころ色をつけてるので文字だけの削除になります。
meg_

2020/06/28 13:30

「Set a = Range("CT5:WO103").FindNext(a)」の後で、aに対象セルがセットされているかは確認されましたか?
city_yoshy

2020/06/28 14:05

確認していませんでした???? 一番最初に貼った画像と同じ番地に111と入れて、 Set a = Range("CT5:WO103").FindNext(a)の後でdebug.printをしてみたところ、 $DJ$16 $DF$20 $DN$20←削除されていない $DN$26←削除されていない $CT$32 $DB$37 と表示されました。(この確認方法で合っていますかね…?) また、CT16にも111と入れていて、コードを実行した結果削除されていますが上記には表示されていませんでした。
meg_

2020/06/29 01:29

検索には成功しているなら、「If a.Offset(0, 3).Value = ""」のところではねられているのかと。セルに空白文字など入っていませんか?
city_yoshy

2020/06/29 02:52

!! If Not a.Offset(0,3).Value="×"にしたらできました! プルダウン選択なので "" で大丈夫だろうと思ってました・・・ ありがとうございました!!
guest

回答2

0

自己解決

Do Untilの中にある

VBA

1If a.Offset(0, 3).Value = "" Then 2

VBA

1If Not a.Offset(0, 3).Value = "×" Then

にしたら解決しました。思い込みと単純なミスでした…(前もやらかした気がします)

投稿2020/06/29 02:55

編集2020/06/29 02:56
city_yoshy

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Offsetのパラメータが-33を使ってますが、-2 2 の間違いでは?

投稿2020/06/29 00:43

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

city_yoshy

2020/06/29 02:47

メモ欄は2列を結合して作ってあるので、3または-3にしないと動かないみたいです。。
ttyp03

2020/06/29 03:00

おぅ、そこは見逃してました。
city_yoshy

2020/06/29 03:42

なんとか解決しました!前に引き続きありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問