
EXCELで作ったカレンダー(縦6マス×横7マス:カレンダーシート)の表の中から、隣のシート(スケジュールシート)にある横並びのカレンダーへ該当する予定内容を転記したいです。
1日は固定の場所になく、表の中にランダムに置かれ(大体は1~2行目にはあるが、確実ではないです)そこからカレンダーのような書き方で表があるところまで入力されます。
なるべくシンプルな数式でと思っているのですが、なかなかうまくいきません。
翌月以降も日付を直して使いたいです。
わかりにくくて申し訳ありませんが、もしよい数式があればどうかご教授頂ければと思います。
よろしくお願いいたします。

No.7ベストアンサー
- 回答日時:
7列でもいいとのことですので、Aを日曜、Fを土曜とします。
(式を加工すればどの曜日から始まるのであっても修正はできます)
WEEKDAY(日付となるセルなり式)とすれば、その日付の曜日が日=1~土=7という数字になります。
前回のものと合わせて具体的な式を書いてみましょう。
※スケジュールシートのB1には1日と書かれていますが、ここにはその月の初めの日付(この場合2017年3月1日)を入力し、書式によって日付のみ表示するようにしてください。
もしくは、どこかに年と月を入力するセルを作り、そのセルによって日付を取得しましょう。
(A1に年、A2に月があるとすれば、B1=DATE(A1,A2,1)とします)
日付でないと曜日が分からないからです。
C1以降はC1=B1+1というように、左のセル+1日で表示できます。
2月などの月末で31日までない部分を空白として表示する場合は、
C1の式を=IF(B1="","",IF(DAY(B1+1)=1,"",B1+1))としましょう。
これであれば、左のセルの次の日の日付が1日であった場合に空白、違っていれば左のセルの次の日を表示させることができ、左のセルが空白であれば空白となります。
(2月28日の次の日が3月1日なら、1日なので空白となり、その右のセルは左側のセルが空白なのでやはり空白となります)
C1の式を必要なだけ(31日まで?)コピーしてください。
なお無いとは思いますが、カレンダーシートの日付の下にある予定の部分には、数字のみの入力はないものとします。(日付の検索に予定の欄がヒットしないように)
WEEKDAY(B1)でB1の曜日を数字に変えて、
ADDRESS(1,WEEKDAY(B1),4)でその曜日の1行目のセル番地(日曜ならA1、土曜ならG1)を取得。
A~G列つまりアルファベット1文字と分かっているので、
LEFT(ADDRESS(1,WEEKDAY(B1),4),1)でその列のアルファベットを取得。
INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1))で、カレンダーシートのその曜日の列全体を指定できます。
カレンダーの方は1日と書かずに1と書いていますが、数字の1が入っているのか、2017年3月1日と入っているのか分からないです。
よってカレンダーのセルに年月日のデータで入っている場合、
MATCH(B1,INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)
日にちの数字だけの場合、
MATCH(DAY(B1),INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)
とします。これで、その列の中でB1に一致する日のセルが何番目にあるかを取得します。
これによって該当するセルの列と行が分かったので、その1つ下のセルのデータをINDIRECTによって取得します。
※※まとめです。※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
カレンダーが年月日なら
=INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&MATCH(B1,INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)+1)
カレンダーが日にちの数字だけなら
=INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&MATCH(DAY(B1),INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)+1)
をスケジュールシートのB2に入れる。
必要なだけコピーする。B1が1日なら31日はAF1です。
スケジュールシートのB1は年月日データを入れる。
年月を別のセルで指定する場合は、
B1=DATE(A1,A2,1) (A1,A2はそれぞれ年、月、を入力するセルを指定)
とする。
C1=IF(B1="","",IF(DAY(B1+1)=1,"",B1+1))
として、必要なだけコピーする。
ご回答ありがとうございました!
今までで頂いたヒントやこの書き込みから数式を組み立てまして、無事作成することができました!!
本当にありがとうございました。
No.6
- 回答日時:
No2です。
一応聞いておきますが、カレンダーぽい形式なだけで、カレンダーと同じではないですよね?
(横が6列しかないですし)
カレンダーと同じであるなら、日付から曜日に換算して、検索列を指定するようにすれば、行毎にあるかどうか検索しなくても良くなりますので、一応情報確認として。
おはようございます。
ご回答ありがとうございます!
確認しましたら、横6行でしたが、7行にしても構わないそうです。
(表のどこかに1日があるけど場所は固定ではないので探したいとの主旨は変わらず)
曜日から列指定する方法が楽な気がしてきました…。
no3さんの数式と合わせて一旦作成し、確認して試してみます!
ありがとうございます!!
No.4
- 回答日時:
No.3です。
投稿後気づきました。
前回のSheet1の1行目シリアル値も「年」「月」の数値の変更だけで対応できる方が良いと思いますので、
B1セルの数式を
=IFERROR(SMALL(Sheet1!$A$4:$G$15,COLUMN(A1)),"")
に変更し、右へずぃ~~~!っとフィル&コピー!
これで1日からのシリアル値になると思います。m(_ _)m
No.3
- 回答日時:
こんばんは!
一例です。
↓の画像のように元データのカレンダーはSheet1に作成し、Sheet2に表示するとします。
いずれにしてもシリアル値で扱った方が簡単だと思います。
まずカレンダーの作成方法です。
画像ではSheet1のA1セルに「西暦年」、C1セルに「月」の数値を入力すると
その月の7列カレンダーができるようにしてみました。
F1セルに
=DATE(A1,C1,1)
という数式を入れセルの表示形式はユーザー定義から mmm としています。
A4セル(セルの表示形式はユーザー定義から d とだけしておく)に
=IF(MONTH($F$1-WEEKDAY($F$1)+COLUMN(A1)+7*(ROW(A2)/2-1))=$C$1,$F$1-WEEKDAY($F$1)+COLUMN(A1)+7*(ROW(A2)/2-1),"")
という数式を入れ → A4・A5セルを範囲指定 → A5セルのフィルハンドルで右へコピー → そのまま下へ2行ずつコピー!
これでA1・C1の数値を入れ替えるだけでその月のカレンダーができます。
Sheet2の1行目(セルの表示形式はユーザー定義から d日 としておき)
B1セルに3/1のように最初のシリアル値を入力 → 右へフィル&コピー!
B2セルに
=IFERROR(INDEX(Sheet1!$A$4:$G$15,SUMPRODUCT((Sheet1!$A$4:$G$15=B$1)*(ROW($A$4:$A$15)-2)),SUMPRODUCT((Sheet1!$A$4:$G$15=B$1)*COLUMN($A$1:$G$1)))&"","")
という数式を入れ右へコピーすると
画像のような感じになります。m(_ _)m

No.2
- 回答日時:
作業用セルなりシートなりを使う前提とします。
使わなくても可能ですが、長くなって面倒なだけです。
カレンダーシートが6行目までで、日付が入ってるのは奇数行のみ?のようなので、
IFとCOUNTIFを3つずつ使い、該当するセルの行番号を数字で取得します。
その数値とMATCHを用いて、該当するセルの列番号(列のアルファベットではなく、数字になります)を取得します。
この列番号と行番号+1(+1するのは、1つ下にあるセルのデータを取得したいからです)を用いて、ADDRESSによりセル番地(A1など)の表示に変換します。
INDIRECTにより、このセル番地にあるセルのデータを取得します。
というのはどうでしょう?
行数が多いと、検索する行が増えて大変なので、行を特定するのにもう一手間加える方が良いかもしれませんが、三行程度ならこの方が早いかと。
ご回答ありがとうこざいます。
やはり、作業セルなりを作ってみた方がよさそうですね…。
offsetなどでもやってみましたが長くなってしまったので…。
内容はよくわかりましたので、数式をたててみます!
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelで東証のカレンダーを作りたい 6 2022/12/30 20:55
- Excel(エクセル) エクセルでカレンダーを作りたい 5 2023/05/16 07:32
- Visual Basic(VBA) excel2016でリストからカレンダーに内容を反映させたいです 2 2022/10/27 15:32
- Excel(エクセル) Excelで行削除をすると… 1 2023/07/26 11:57
- Excel(エクセル) エクセルの条件付き書式について エクセルでカレンダーを作りました。縦に日付が並んでいて、横にスケジュ 3 2022/10/10 15:32
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- その他(IT・Webサービス) googleカレンダーについて質問です スマホ版を使っています 週表示で使用してますが 1、デフォル 1 2023/02/26 20:35
- その他(クラウドサービス・オンラインストレージ) Googleカレンダーの共有について質問させて頂きます。 現在、個人でのGoogleカレンダーと職場 2 2022/10/19 15:58
- Excel(エクセル) 【Excel関数】値が合致するセルの隣のセルを表示させたい 8 2022/10/12 17:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
エクセル
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
【マクロ】アクティブセルの時...
-
【関数】同じ関数なのに、エラ...
-
【マクロ】A列にある、日付(本...
-
エクセルの循環参照、?
-
【マクロ】3行に上から下に並...
-
【マクロ】WEBシステムから保存...
-
【マクロ】EXCELで読込したCSV...
-
iPhoneのExcelアプリで、別のシ...
-
【エクセル】期限アラートについて
-
【条件付き書式】シートの中で...
-
Excelファイルを開くと私だけVA...
-
Excelの新しい空白のブックを開...
-
派遣会社とかハローワークとか...
-
マクロ・VBAで、当該ファイルの...
-
VBA チェックボックスをオーバ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelファイルを開くと私だけVA...
-
エクセルについてどう関数を使...
-
マクロ・VBAで、当該ファイルの...
-
エクセルのセルに画像は埋め込...
-
エクセルで、一部のセルだけ固...
-
【マクロ、画像あり】A表かB表...
-
エクセルでカウントする
-
【マクロ】コードを少しでも、...
-
VBA_日時のソート
-
エクセルで教えてください。 例...
-
エクセル 月間シフト表で曜日ご...
-
セルの左に余白を付ける
-
エクセル
-
エクセルについて教えてください
-
2枚のエクセル表で数字をマッチ...
-
ExcelのIF関数との組み合わせの...
-
エクセルのファイルのコピーを...
-
エクセルで二つのブックの違い...
-
空白処理を空白に
-
Excelのチェックボックスについ...
おすすめ情報