画像のようなカレンダー兼タスクリストを作成中です。
Sheet1にカレンダー、Sheet2にタスクリストを作っています。
左側にタスク番号、右側はプルダウンになっていて、作業が済んだら×をつけるようにしています。
すると、Sheet2にある該当するタスク番号の真下の結合セルに×が転記されるようにしています。
コードは下記のとおりです。
VBA
1Private Sub Worksheet_Change(ByVal Target As Range) 2 Dim c As Range 3 Dim wS As Worksheet 4 Dim rng As Range 5 6 7 If Intersect(Target, Range("B5:KU103")) Is Nothing Or Target.Count > 1 Then Exit Sub 8 With Target 9 If .Column Mod 2 = 1 Then 10 Set wS = Worksheets("Sheet2") 11 Set c = wS.Cells.Find(what:=.Offset(, -1), LookIn:=xlValues, lookAt:=xlWhole) 12 If Not c Is Nothing Then 13 c.Offset(1) = .Value 14 End If 15 End If 16 End With 17End Sub 18
大きな問題はないのですが、「Sheet1のタスク番号の横の×を残して番号を先に消した時、またはタスク番号と×を同時に消した時」に、「Sheet2に転記された×が残ってしまう」のが少し不便だなと思っています。(×を先に消した時はもちろんSheet2の×も消えます)
どちらを先に消しても転記された×が消えるのがベストなのですが・・・何か良い方法があれば教えて下さい。
追記:sheet2のデータが1000行以上あるので、関数を使うととても重くなってしまいます。
sheet1には同じタスク番号が入らないことを想定としています。
これってSheet1には同じタスク番号が入らない想定でしょうか?
それならVBAを使わなくても、関数を使うことで今回の問題も解決しそうですが。
sheet1には同じタスク番号が入らないことを前提としています。
最初は関数で作成していたのですが、1000行程度あるためかなり重くなってしまい、断念してしまいました…
なるほどなるほど・・・
ちなみに関数は何をお使いでしたでしょう?
=IFERROR(INDIRECT("Sheet1!"&ADDRESS(SUMPRODUCT((Sheet1!$A$1:$KU$103=B4)*ROW($A$1:$A$103)),SUMPRODUCT((Sheet1!$A$1:$KU$100=B4)*COLUMN($A$1:$KU$1))+1))&"","")
という式です。
>Sheet1のタスク番号の横の×を残して番号を先に消した時
1)なんで消すんですか?カレンダー側は記録として残しておいた方がよくないですか?
2)タスクtリスト(?)の方は、当日の予定を表示(または指定の日付の予定)を表示するのですか?
ならば、タスクリストの方でのシートで日付を入力し、「その時」にマクロを起動してはいかがでしょうか?
3)いろいろ考えると、タスクリストの方で入力し、カレンダーに反映させた方がよいように思えますが、いかがでしょうか?
あぁ、でも時間が関係ありますか。。。。
でも、タスクリストには時間が表示されませんね。。。。
1)間違えて入力してしまった時などですね…ないとは思うのですが…。データの量が多いので、万が一タスクリストの方に×が残ってしまうと漏れが発生して面倒になってしまうので です
2)カレンダーを横長につくって、広い範囲のスケジュールを見えるようにしています。
当日だけを表示…というのは考えてはいないです
3) スケジュールがダブらないようにしたいので、カレンダーを基準として管理したいのです
すみません。2)を読み間違えていました。
2)タスクリストは全体を表示するようにしています。特にその日にやるタスクを表示~とかはしていないです。
回答1件
あなたの回答
tips
プレビュー