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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) excel2016でリストからカレンダーに内容を反映させたいです 2 2022/10/27 15:32
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Excel(エクセル) Excelについて 4 2023/03/02 09:24
- Excel(エクセル) Excelシフト表 固定シフトの自動変換化 1 2022/04/14 16:10
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
このQ&Aを見た人はこんなQ&Aも見ています
-
風水の観点で選ぶ観葉植物とは?置き場所や上げたい運気ごとの注意点を紹介!
観葉植物で運気をアップするコツを、風水デザイン1級建築士の福島昌彦さんに伺った。
-
Excel2010 リスト型の予定表をカレンダーに反映させたい
Excel(エクセル)
-
別シートのスケジュールリストをカレンダーに反映させたい
Excel(エクセル)
-
エクセルに入力後、別シートのカレンダーに自動的に記入方法
Excel(エクセル)
-
-
4
エクセルで作ったカレンダーの一日のセルに複数の予定を入れ、どんな種類の
その他(Microsoft Office)
-
5
シフト管理、月間のシフト表を別シートで日ごとの時間別で出勤者の名前を表示したい
Excel(エクセル)
-
6
リスト型の予定を自動で横型のカレンダーに転記するようにしたいのですが、教えてください。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付が未入力の際はゼロか、空...
-
(Excel)あるセルに文字を入力...
-
Excelの「0」だけ非表示、小数...
-
エクセルで1月0日と表示される!!
-
Rangeメソッドは失敗しました。...
-
エクセルで条件に一致したセル...
-
自動で複数セルの内容をシート...
-
EXCEL関数でシート名が変わる可...
-
エクセルで、勤務表から 日付...
-
別シートのセルを絶対参照にする
-
複数シートの同じセル内容を1シ...
-
エクセルで別シートからの最大...
-
VBAで、セル(Range)のオブジ...
-
エクセルで特定の文字を打つと...
-
ファイル起動時、毎回 シート1...
-
エクセルで、加筆修正したセル...
-
エクセルで20万行あるシート...
-
セルの値と同じ名前のシートを...
-
エクセルで印刷部数をセルに表...
-
シート参照で変数を使いたい(EX...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
エクセルで条件に一致したセル...
-
エクセルで1月0日と表示される!!
-
(Excel)あるセルに文字を入力...
-
別シートのセルを絶対参照にする
-
Rangeメソッドは失敗しました。...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで、加筆修正したセル...
-
シート参照で変数を使いたい(EX...
-
エクセルで複写のように自動入...
-
Excelで複数シートの選択セルを...
-
INDIRECTを使わず excelで複数...
-
ExcelでTODAY関数を更新させな...
-
式の説明をお願いします。
-
excelでハイパーリンクになって...
-
エクセルのルビがついたセルを...
-
Excelでスクロールすると文字が...
-
エクセル ハイパーリンクで画像...
おすすめ情報
説明不足で申し訳ありません。
補足させていただきます。
週予定シートの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行目のセル・・・といったように表示させるにはどうすればよいでしょうか。
質問ばかりで申し訳ありませんが、よろしくお願いいたします。