EXCEL2016にて週間カレンダーを何とか作ることが出来たのですが、
個人別シートに記入した参加予定日をカレンダーに反映させる方法がわからないため質問させていただきます。
予め対象者に参加希望日を尋ね、週間予定に集計する作業ですが、
その作業にEXCELが使えればと思い作成をはじめました。
しかし
実際の運用イメージ画像を添付しました。
結合セルは手書きだった頃の名残です。
個人別シートにチェックを入れると週予定シートの該当日に個人名が載るようにしたいと思っています。
個人名はシート名からでも任意のセルからでもかまいません。
日によっては3人分の名前が載っていたり一人分だったりします。
やりたいことは思いつくのですが、実力が伴わず途方に暮れています。
アドバイスよろしくお願いいたします。
No.9ベストアンサー
- 回答日時:
No.8です。
通常最終行を求めるのには下から上に向かって『値』の入っているセルにぶつかったらと調べるのですが、こちらも当初最終行の次の行を得るのにちょっと手こずって補正はしたつもりでしたが、お互いの仕様の違いがあるのかもしれませんね。
なので今回は上から値が入っていないセルを探す旅をさせてみましたので、過去のコードは消していただいてこちらを貼り付けてください。
"〇" については先日回答したようにそちらの環境に調整願います。
Sub megu_2()
Dim rd As Range, rs As Range, r As Range
Dim sn As Integer, s_day As Integer, e_day As Integer
Dim rr As Long, c As Integer
Dim i As Integer, s_mon As Integer, st As String
s_day = 100: e_day = -1
st = "月火水木金土"
With Worksheets("週予定")
s_mon = .Range("A30").Value
For i = 2 To 12 Step 2
Set rd = .Cells(2, i)
If Month(rd.Value) = s_mon Then
s_day = IIf(Day(rd.Value) < s_day, Day(rd.Value), s_day)
e_day = IIf(Day(rd.Value) > e_day, Day(rd.Value), e_day)
End If
Next
Set rd = Nothing
s_mon = IIf(s_mon < 4, (s_mon + 9) * 2, (s_mon - 4) * 2)
For sn = 2 To Worksheets.Count
Set rs = Worksheets(sn).Range("A3").Offset(s_day - 1, s_mon).Resize(e_day - s_day + 1)
If WorksheetFunction.CountIf(rs.Offset(, 1), "〇") > 0 Then
For Each r In rs
c = InStr(st, Format(r.Value, "aaa")) * 2
rr = 3
If r.Range("B1").Value = "〇" Then
If .Cells(3, c).Value = "" Then
.Cells(3, c).Value = Worksheets(sn).Range("B1").Value
Else
Do
rr = rr + 2
Loop Until .Cells(rr, c).Value = ""
.Cells(rr, c).Value = Worksheets(sn).Range("B1").Value
End If
End If
Next
End If
Set rs = Nothing
Next
End With
End Sub
早速のご対応ありがとうございました。
新しいコードを貼り付けたところ、2名以降も反映されました。
当初想定していた形を実現することができ、感激しております。
これから実在の人物と予定で試験運用を始めたいと思います。
この度はありがとうございました。
No.7
- 回答日時:
No.4の補足に対して。
エラーもでず転記もされないって事でしょうか。
幾つか懸念していた件はあったのですけどエラーが発生せず何も起きないってのは、
>If WorksheetFunction.CountIf(rs.Offset(, 1), "〇") > 0 Then
~
>If r.Range("B1").Value = "〇" Then
個人別の予定に書き込んでいる"〇"の記載している文字コードとセルに入力した文字コードが違う場合であれば転記処理は飛ばされるので、エラーも出ず何も変化がないと思われます。
この場合 〇 をセルを選択すると数式を入れる所に表示されるでしょうから、その 〇 をカーソルで選択してコピーし上記の2つの 〇 を消して貼り付け(上書きでも良いです)してみて下さい。
No.5
- 回答日時:
No.4です。
個々のデータのA列が4月でしたので、12月の次に1~3月のデータもあると踏まえて作成してます。
なければないで特に問題にはならないと思いますけど。
No.4
- 回答日時:
No.3です。
・個々の予定欄については該当日に合わせ"〇"を入力
・全てのシートは1つのBookにあり、『週予定』シートが一番左にあるとする
・週予定シートのセルA30を基にその月限定で振り分けを行う
と言う感じですかね。
Sub megu()
Dim rd As Range, rs As Range, r As Range
Dim sn As Integer, s_day As Integer, e_day As Integer, c As Integer
Dim i As Integer, s_mon As Integer, st As String
s_day = 100: e_day = -1
st = "月火水木金土"
With Worksheets("週予定")
s_mon = .Range("A30").Value
For i = 2 To 12 Step 2
Set rd = .Cells(2, i)
If Month(rd.Value) = s_mon Then
s_day = IIf(Day(rd.Value) < s_day, Day(rd.Value), s_day)
e_day = IIf(Day(rd.Value) > e_day, Day(rd.Value), e_day)
End If
Next
Set rd = Nothing
s_mon = IIf(s_mon < 4, (s_mon + 9) * 2, (s_mon - 4) * 2)
For sn = 2 To Worksheets.Count
Set rs = Worksheets(sn).Range("A3").Offset(s_day - 1, s_mon).Resize(e_day - s_day + 1)
If WorksheetFunction.CountIf(rs.Offset(, 1), "〇") > 0 Then
For Each r In rs
c = InStr(st, Format(r.Value, "aaa")) * 2
If r.Range("B1").Value = "〇" Then
Select Case True
Case .Cells(3, c) = ""
.Cells(3, c) = Worksheets(sn).Range("B1").Value
Case Else
.Cells(Rows.Count, c).End(xlUp).Offset(1).Value = Worksheets(sn).Range("B1").Value
End Select
End If
Next
End If
Set rs = Nothing
Next
End With
End Sub
ご検証お願いします。
No.3
- 回答日時:
No.2です。
個人別のA列(及び以降の日付列)は文字列なのですか?
日付(シリアル値)ではなく?
日付なら楽なのですけどね。
あと『週』とは前月末及び翌月の月初めは考慮しないと考えてよろしいのでしょうか?
すなわち『週予定』の2行目に表記されている日付(当月分?)だけ考えればよいと?
ご回答ありがとうございます。
個人別シートは現在文字列です。
翌日以降は『=A3+1』と記入しているくらいです。
>あと『週』とは前月末及び翌月の月初めは考慮しないと考えてよろしいのでしょうか?
>すなわち『週予定』の2行目に表記されている日付(当月分?)だけ考えればよいと?
ご指摘の通りです。当月分のみ把握したいと考えております。
No.2
- 回答日時:
No.1です。
個人別シートのA列及び週予定の1~2行目は文字列でしょうか?
または日付で入れてセルの書式設定でそのように表示されているのでしょうか?
あと週予定の方はあくまで当月の月初めからの記載で前月末辺りの表示は不要なのでしょうか?
(確かに個人別には前年度?の3月データはないようですけど、5月になった際には4月末は不要なのか必要なのか・・・?)
>個人名はシート名からでも任意のセルからでもかまいません。
任意のセルとはB1:C1の結合セル?
入っている値はフルネーム?
必要なのは苗字だけ?(シート名はそんな感じに見えますが?)
No.1
- 回答日時:
>個人別シートにチェックを入れると週予定シートの該当日に個人名が載るようにしたいと思っています。
これって見た感じは簡単そうに思えますけど、仮にVBAでやるって事だとレベル高めだと思いますよ。
VBAのご経験があるからこその質問なのかは不明ですけどね。
少なくともチェックボックスの代わりにセルに〇を入れて同じ動きをさせる事が理解して作れる位はね。
回答ありがとうございます。
VBAの経験が無いもので、どこから手を付けていいか迷っています。
チェックボックスにした理由は運用時に楽そうだからという理由なので、「○」でも良かったのです。
VBAの勉強も始めていきたいと思いますので、ご教授いただければと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Excel2010 リスト型の予定表をカレンダーに反映させたい
Excel(エクセル)
-
別シートのスケジュールリストをカレンダーに反映させたい
Excel(エクセル)
-
エクセルで作ったカレンダーの一日のセルに複数の予定を入れ、どんな種類の
その他(Microsoft Office)
-
-
4
エクセルに入力後、別シートのカレンダーに自動的に記入方法
Excel(エクセル)
-
5
リスト型の予定を自動で横型のカレンダーに転記するようにしたいのですが、教えてください。
Excel(エクセル)
-
6
【Excel】万年カレンダーに、別シートリストの内容を反映させたいです。
Excel(エクセル)
-
7
【エクセル】リスト形式の情報をカレンダー形式へ反映する数式
Excel(エクセル)
-
8
別シートのスケジュールリストをカレンダーに反映させたい
グループウェア
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Excelで複数シートの選択セルを...
-
日付が未入力の際はゼロか、空...
-
別シートのセルを絶対参照にする
-
エクセルで1月0日と表示される!!
-
エクセルで20万行あるシート...
-
エクセルで条件に一致したセル...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
複数シートの同じセル内容を1シ...
-
Excelシートの保護時にデータの...
-
Excelのファイル容量が減らない...
-
VBAで変数に関数式の結果をセッ...
-
エクセルで別シートからの最大...
-
エクセルでシート保護をかける...
-
セルの値と同じ名前のシートを...
-
Rangeメソッドは失敗しました。...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
EXCELマクロで、シート間でのコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Excelで複数シートの選択セルを...
-
エクセルで1月0日と表示される!!
-
日付が未入力の際はゼロか、空...
-
別シートのセルを絶対参照にする
-
エクセルで条件に一致したセル...
-
Rangeメソッドは失敗しました。...
-
複数シートの同じセル内容を1シ...
-
Excelシートの保護時にデータの...
-
シート参照で変数を使いたい(EX...
-
マクロ 新しいシートにデータ...
-
ExcelでTODAY関数を更新させな...
-
エクセルで複写のように自動入...
-
エクセルの文字
-
Excelのファイル容量が減らない...
-
Excelでスクロールすると文字が...
-
エクセルで20万行あるシート...
-
エクセルで別シートからの最大...
-
エクセルで、加筆修正したセル...
-
エクセルでシート保護をかける...
おすすめ情報
説明不足で申し訳ありません。
補足させていただきます。
週予定シートのA列及び1行目は文字列です。
2行目にはB2に
『=FLOOR(DATE(A29,A30,-1),7)+7*(A31-1)+2』
と入力し、D2以降には
『=B2+1』『=D2+1』・・・と入力しています。
A29が年、A30が月、A31が何周目か記入しています。
名前の件ですが、フルネームで入れることができたらと思っています。
個人別シートのB1:C1の結合セルにフルネームを記入し、
週予定シートに参照できればと。
わかりづらくて申し訳ありませんでした。
質問者です。
VBAの標準モジュールにご教示いただいた内容を記載しマクロの実行をしたのですが、反応がありませんでした。
エラーもでておりません。マクロのセキュリティを「すべてのマクロを有効にする」にしても変わりませんでした。
何か初歩的なミスをしているのかもしれませんが、VBAは初心者のため解決できそうにありません。
もしよろしければ補足をお願いいたします。
ありがとうございます。
「○」の文字をコピーして統一させることで週予定シートに反映させることができました。
しかし今度は別の問題が生じてしまいました。
複数の人が同じ日に「○」をした場合でも、一人分しか表示されませんでした。
例:4月1日は安土麗さんと阿武銅鑼さんと春区さんの三人が「○」をしたが、週予定シートには安土麗さんしか反映されていない。
週予定シートには、一人目は3行目のセル、二人目は5行目のセル、三人目は7行目のセル・・・といったように表示させるにはどうすればよいでしょうか。
質問ばかりで申し訳ありませんが、よろしくお願いいたします。