Excel 関数 ①特定のセルに色をつけたい、②①の内容を別シートにリンクして表示させたい。

Anonymous
2022-08-21T07:51:40+00:00

2022/08/21

下記の図のように ①特定のセルに色をつけたい、②①の内容を別シートにリンクして表示させたい。

解る方がいらっしゃいましたら、教えていただきたいです。

どうぞ、宜しくお願いします。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
ひまじん 17,185 評価のポイント
2022-10-16T15:42:06+00:00

お役に立てたようで良かったです。

私など常にミスの繰り返しです。それを次回に生かせれば良いのではありませんか?。

お忙しい中、大変かと思いますが、実用的で良いものを作るために頑張ってください!!。

さて、時刻の差分の計算方法ですが・・、

前提として、15:00 といったような時刻を表すのに 1500 という数値を入力していて、「セルの書式設定」で「 : 」を表示させているということですね。

例えば、A1セルと B1セルにそういった方法で時刻を表示させている場合、その差分を求める数式は以下のようになります。一例です。

・番外数式

=ABS(TEXT(A1,"0!:00")-TEXT(B1,"0!:00"))

※時間ではなく時刻同士の差分をとる場合、結果がマイナスの時刻になることは有り得ないので、ABS 関数で差分の絶対値をとっています。

尚、この数式を入れるセルでは、「セルの書式設定」の「表示形式」の「ユーザー定義」で [h]:mm を設定してください。

また、エラー処理は何も行っていませんので、必要であればご自身で工夫してみてください。

下記番外図は、A1:B10 に適当な数値( 1500、1559、・・といった数値。「 : 」は「セルの書式設定」で付加)を入れ、上記の数式を C1:C10 の範囲にコピー・貼り付けした結果です。(この範囲に「セルの書式設定」で [h]:mm も設定しています。)

※具体的なコピー方法としては、C1セルに上記の数式を貼り付け、これをコピーし下方向(行方向)に C10セルまで貼り付けています。(慣れていれば、オートフィルでコピーしたほうが簡単です。)念のため追記。

・番外図

画像

ご参考になれば幸いです。

尚、関連質問なら良いのですが、1スレッド1質問が原則ですので、全く関連のない新たな質問は新規スレッドでお願いいたします。

うっかりされたのかと思いますが、以後、お気を付けください。

上記の数式・図ともに、本来の質問と同様の通番を付加すると紛らわしいので、「番外」という文字列を付加して区別しています。他意はありません。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません
質問作成者が受け入れた回答
ひまじん 17,185 評価のポイント
2022-10-10T07:38:39+00:00

こんにちは。

>検証する時間まで割いていただきありがとうございます。

”ひまじん”なのでお気になさらず。こういった問題を考えるのも好きなので、却って恐縮です。

本題ですが、提示されている A6セル、A7セル、A8セルの数式が、それで間違いないのであれば、原因はコピー・貼り付けの際の手順の間違いかと思います。

前回書いたように、数式4-2をコピーし、A6セルに貼り付けた後これを配列数式にするところまでは間違っていません。

おそらくですが、その後、A7セル以降にも数式4-2そのものを貼り付けていったのではありませんか?。

そうだとすれば、その貼り付け手順が間違っています。

数式4-2の最後のほうに ROW(A1) と書いている箇所がありますが、これはこの数式を A6セルに貼り付けて配列数式にした後、その配列数式をコピーし A7セル以降(行方向)に貼り付けていくことで、自動的に ROW(A2),ROW(A3),・・・というようにカウントアップさせたいために書いています。(コピー・貼り付けの後の各セルの数式の違いは、唯一この箇所だけです。)

これにより、1,2,3,・・・というような数値を SMALL 関数に渡すことができ、火曜日と金曜日の日付を小さい順に取り出すことが出来るからです。

つまり、A6セルの数式では ROW(A1) で良いのですが、その他のセルでは、

A7セル ROW(A2)

A8セル ROW(A3)

 ・

 ・

 ・

というように自動的に変化しなければ、日付を小さい順に取り出すことが出来ません。

提示されている、A6セル、A7セル、A8セルの数式では、全て ROW(A1) となってしまっています。

各セルの数式が同一の状態だとすると、数式の他の部分は全て同一(正常)なので、表示される日付は全て 1/4 となります。

<数式4-2の貼り付け手順>

以下、数式4-2を A6セルに貼り付け、これを配列数式にした後の手順です。

  • 誤った手順(推測です)
    数式4-2そのものを A6セルと同様に、A7セルから A15セルの 範囲で、1セルずつ貼り付けては配列数式にするといった手順を繰り返す。
  • 正しい手順
    数式4-2そのものではなく、A6セルに貼り付けて配列数式にしたものをコピーし、A7セルから A15セルに貼り付ける。

※9月26日に書いた数式4-2のコピー方法の説明が紛らわしかったかもしれませんね・・。失礼いたしました。

尚、最新版の Excel であれば「スピル」が働くので、数式4-1を使い、これをコピーし A6セルに貼り付けるだけで済んでしまいます。

A6セルの数式を配列数式にする必要も、これをコピーして A7セル以降に貼り付ける必要もありません。

この辺が、旧来の Excel との大きな違いです。

※上記の説明文の中では、特に強調したい場合を除き「配列数式」も「数式」と書いています。必要であれば、適当に読み換えてください。

ご参考まで。

<修正>

最後のほうで最新版の Excel との違いを書きましたが、「数式4-2」と書いてしまっていましたので、「数式4-1」に修正しました。

この部分の文章そのものも修正しました。失礼いたしました。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません
質問作成者が受け入れた回答
ひまじん 17,185 評価のポイント
2022-08-30T15:05:34+00:00

おっとっと~・・・。

①、②を行うためには、これまでご紹介してきた数式を更に変更する必要があります。

数式がいくつもあって煩雑で分かりにくくなってきましたので、改めて、①、②を考慮した「提案1」としてまとめてみました。

「提案1」は、全て最初から作りなおす場合を想定して書いています。ご注意ください。

<提案1>

[ カレンダーの作成 ]

  1. シート名(①を考慮。)
    何年かといった数字を加えずに、単に「カレンダー」とします。
  2. 1行目の入力(②を考慮。)
    A1セルに 2022/1/1 、B1セルに 2022/2/1 、・・・というように月初の日付を入力していき、最後に L1セルに 2022/12/1 を入力します。
    ※単に 1/1 とかではなく 2022/1/1 というように、必ず「年」の入力を行ってください。
  3. 2行目以降の数式(②を考慮。)
    A2セルに以下の数式3を入力(あるいはコピー・貼り付け)し、これを右方向(列方向)に L2セルまでコピーし、更に、A2セルから L2セルまでを選択したまま 31行目までコピーします。
    ・数式3
    =IF(A1<EOMONTH(A$1,0),A1+1,"")
  4. 曜日の表示
    日付部分全体( A1:L31 の範囲)を選択し、「セルの書式設定」->「表示形式」->「ユーザー定義」で yyyy/m/d"("aaa")" を設定します。

図4は、上記の手順でカレンダーを作成した結果です。

・図4

画像

※尚、各セルの背景色の色付けについては「条件付き書式」で行っていますが、ご自身で設定できているようですし、こういった色付けは各数式に影響しませんので設定方法等は省略します。

[ 物品発注書の作成 ]

※以下で書いている部分以外については書き込み済みと想定しています。

  1. シート名(①を考慮。)
    まず最初に 1月のシートを作るので、シート名を「1月」とします。
  2. 数式の入力(①を考慮。)
    A6セルに以下の数式4を入力(あるいはコピー・貼り付け)します。
    ・数式4(数式1-1修正版の改修版。)
    =LET(dt,OFFSET(カレンダー!$A$1,,TRIM(RIGHT(SUBSTITUTE(LEFT(CELL("filename",A1),LEN(CELL("filename",A1))-1),"]"," "),2))*1-1,31,),FILTER(dt,IFERROR((WEEKDAY(dt)=3)+(WEEKDAY(dt)=6),0)))

・変な箇所で自動的に改行されているかもしれませんが、全部で 1行の数式です。
・この数式では「スピル」が働きます(最新版の Excel ではこれが標準です)ので、A6セルに数式を入れるだけで A列に必要な日付データがすべて表示されます。( FILTER 関数は、この「スピル」が働かないと動作しません。)
・この数式では、シート名から何月の日付データを表示しなければならないのかを判断しています。
例えば、シート名が「1月」でしたら、この数式4の入力と下記の数式5のコピーが終わった時点で、「カレンダー」シートのデータを参照して 1月の全ての日付データが表示されます。

C6セルに以下の数式5を入力(あるいはコピー・貼り付け)します。
・数式5(数式2と同じもの。)
=IF(A6="","",A6+1)

・この数式を C15セルまでコピーします。( C15セルとしているのは、ここまでは表示されないだろうと推測できる最大の範囲だからです。)
・この数式では、単純に A6セルが空白だったら空白(空白の文字列)を表示し、空白でなければ A6セルの日付を +1 して表示します。

※両方の数式の入力後、A列と C列の日付データ両方に、「セルの書式設定」->「表示形式」->「ユーザー定義」で m/d"("aaa")" を設定します。

※おまけ(笑)
A1セルに以下の数式6を入力(あるいはコピー・貼り付け)します。
A1セル(結合セル)には「2022年 1月 物品発注書」といった文字列を入力しているかと思いますが、この部分も以下の数式6を入力することで「年月」の自動入力が可能です。よろしければ組み込んでみてください。
・数式6
=TEXT(カレンダー!$A$1,"yyyy")&"年 "&TRIM(RIGHT(SUBSTITUTE(LEFT(CELL("filename",A1),LEN(CELL("filename",A1))-1),"]"," "),2))&"月 物品発注書"

・変な箇所で自動的に改行されているかもしれませんが、全部で 1行の数式です。

・この数式では、「カレンダー」シートの A1セルの内容から「年」の情報を取り出し、このシートのシート名から「月」の情報を取り出して表示させています。
  1. 各月のシート作成
    数式4では、シート名の中から「月」のデータを取り出して、何月の日付データを表示しなければならないかを判断し、「カレンダー」の中から該当の日付データを取り出しています。
    なので、「カレンダー」が出来ているのであれば(色付けは特に必要ありません)、以下のような方法で簡単に 12ヶ月分の「物品発注書」を一気に作り上げることが出来ます。

[1]「1月」のシートのコピーを作成し、シート名を「2月」に変更するだけで 2月分が出来る。
[2」シートのコピーを繰り返し、シート名の月の部分の数字を変えるだけで 12ヶ月分の「物品発注書」が出来上がる。
※もちろん、毎月手書きで修正しなければならない箇所については、修正が必要ですが・・。

図5は上記の手順で「物品発注書」を作成した結果です。(おまけ含む)
※画像キャプチャしきれないため、1月、2月、5月、12月のみ表示させています。
・図5
画像

[ 翌年からの運用 ]

  1. 今年(2022年)作成したファイルをコピーします。(ファイル名は何でも可。)
  2. コピーしたファイルを開き、「カレンダー」シートの A1セルの日付データを 2023/1/1 に変更(年を変更)し、同様の変更を L1セル( 12月分)まで繰り返します。

※これだけで、その年の「カレンダー」も「物品発注書」の日付データも 12ヶ月分が一気に出来上がります。

以上です。

尚、個人的な感想ですが、図4の「カレンダー」の表示は細かすぎて見にくくないですか?。

「セルの書式設定」で「年」データを表示しないように設定すれば良いかと思うのですが、そうすると今度は何年の日付なのか分からなくなってしまいます。

そこで例えば、図6のような「カレンダー」(いわゆる「万年カレンダー」です)にすれば、かなり見やすくなりますし、「年」データを 1行目( 1ヵ所)に入力するだけで、その年の「カレンダー」も「物品発注書」の日付データも 12ヶ月分を一気に作成することも可能です。

・図6

画像

これを「提案2」としてご紹介するつもりで「物品発注書」の数式も含め全て作ってみたのですが、ちょっと疲れ気味で・・、今はただ単に代案もあるということで憶えておいていただければと思います。

図6の「万年カレンダー」は、色々と応用も利きます。今回だけではなく別の機会に使ってみても良いかと思いますよ。

  • A1セル(結合セル)には「年」のデータを数値で入れ、「セルの書式設定」で G/標準"年" を設定。
  • A2セルには「月」のデータを数値で入れ、「セルの書式設定」で G/標準"月" を設定した後、これをオートフィルで L2セルまで連続データとしてコピー。
  • A3セルの数式は =DATE($A1,COLUMN(A1),1) です。これを L3セルまでコピー。
  • A4セルの数式は =IF(A3<EOMONTH(A$3,0),A3+1,"") です。これを A4:L33 の範囲にコピー。
  • A3:L33 の範囲には、「セルの書式設定」で d"("aaa")" を設定。

お役に立てれば幸いです。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

31 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2022-08-28T13:15:47+00:00

    2022/08/28

    ひまじんさんへ。

    こんばんは。

    なんということでしょうか。↓↓↓(ひまじんさんからの追記の前の式です)

    作っていて鳥肌が立ちました。

    シートを複製して、シート名を変える度に、シート名に合った月の火曜日と金曜日が表示される。

    どうなっているのでしょうか。こんなことがあるのでしょうか。

    ちょっと、呆気に取られていて言葉が見つかりません。

    驚きました。ありがとうございます。

    これから、追記にあった式にトライしてみます。

    後日、報告させてください。

    本当にありがとうございます。感謝、感謝です。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. ひまじん 17,185 評価のポイント
    2022-08-28T07:44:30+00:00

    こんにちは。

    最近は豪雨災害も多いですね。幸いなことに自宅周辺では災害と言われるような事態が起こったことは無いのですが、コロナも含めてこういった事態が早く収まっていくことを願いたいですね・・。

    >毎週火曜日および金曜日が祝日になった場合は、無視する。考慮しない。です。(その翌日、水曜日および土曜日も祝祭日は、無視する。考慮しません)

    ということは、前回提案した<パターン1>で良いということですね?。

    数式は出来ています(図1が、その数式の実行結果そのものです)が、説明文を考えるのが遅くなり、お待たせしてしまいました。

    Microsoft365 を使用中との情報も、ありがとうございます。旧来の Excel 対応の数式を考えずに済みます。

    以下、<パターン1>の数式のご紹介です。

    ※前提条件

    「2022年カレンダー」の全ての日付が「日付のシリアル値」(数値)であって、(月)、(火)、などの曜日表示は、「セルの書式設定」で「表示形式」を「ユーザー定義」とし yyyy/m/d"("aaa")" のように設定しているものとします。

    ・数式1:図1の A6セルに入れる数式です。

    =LET(mt,TRIM(RIGHT(SUBSTITUTE(LEFT(CELL("filename",A1),LEN(CELL("filename",A1))-1),"年"," "),2))*1,dt,INDIRECT("2022年カレンダー!R3C"&mt&":R33C"&mt,0),FILTER(dt,(WEEKDAY(dt)=3)+(WEEKDAY(dt)=6)))

    • この数式では「スピル」が働きます(最新版の Excel ではこれが標準です)ので、A6セルに数式を入れるだけで A列に必要な日付データがすべて表示されます。( FILTER 関数は、この「スピル」が働かないと動作しません。)
    • この数式では、シート名から何月の日付データを表示しなければならないのかを判断しています。
      例えば、シート名が「2022年1月」でしたら、この数式1の入力(あるいはコピー・貼り付け)と下記の数式2のコピーが終わった時点で、「2022年カレンダー」のデータを参照して 1月の全ての日付データが表示されます。

    ・数式2:図1の C6セルに入れる数式です。

    =IF(A6="","",A6+1)

    • この数式を C15セルまでコピーします。
    • この数式では、単純に A6セルが空白だったら空白(空白の文字列)を表示し、空白でなければ A6セルの日付を +1 して表示します。

    ※尚、A列、C列ともに「セルの書式設定」で「表示形式」を「ユーザー定義」とし、 m/d"("aaa")" を設定してください。

    ※数式の結果は図1のような表示になります。

    ・図1(再掲)

    ※実際には色付けは行われません。

    画像

    <数式1を使う利点>

    数式1では、シート名の中から「月」のデータを取り出して、何月の日付データを表示しなければならないかを判断し、「2022年カレンダー」の中から該当の日付データを取り出しています。

    なので、「2022年カレンダー」が出来上がっているのであれば(色付けは特に必要ありません)、以下のような方法で簡単に 12ヶ月分の「物品発注書」を一気に作り上げることが出来ます。

    1. 「2022年1月」のシートに数式1と数式2を書き込んでおき、必要であれば数式以外の部分も作りこんでおく。
    2. 作りこんでおいた「2022年1月」のシートのコピーを作成し、シート名を「2022年2月」とするだけで 2月分が出来上がる。
    3. シートのコピーを繰り返し、シート名の月の部分の数字を変えるだけで 12ヶ月分の「物品発注書」が出来上がる。

    ※もちろん、毎月手書きで修正しなければならない箇所については、修正が必要ですが・・。

    ※来年以降の数式の変更箇所については、数式1の中の 2022 の部分だけです。

    <数式1を使う場合の注意点>

    数式中の、CELL("filename",A1) の部分でファイル名(シート名を含む)を求めているのですが、新規ファイルにこの数式を入力した場合、一旦このファイルを保存してから開きなおさないと CELL("filename",A1) に正しいファイル名が返りません。

    また、A1 としている部分については、どのセルを指定しても良いのですが省略してはいけません。

    ご注意ください。

    数式1の動作概要については長くなるので省略します。

    ご希望があれば(どこか一部分でも良ければ)書いてみたいとは思いますが・・・。

    Windows11 と Excel2021 の組み合わせで動作確認しています。

    お役に立てれば幸いです。

    <数式の追記>

    数式1については、以下の数式1-1でも同様に動作するのを確認しました。

    こちらのほうが少し短く効率的な数式になっていますので、分かりやすいかもしれません。

    好みの問題もありますので、お好きなほうでお試しになってみてください。

    ・数式1-1

    =LET(dt,OFFSET('2022年カレンダー'!$A$3,,TRIM(RIGHT(SUBSTITUTE(LEFT(CELL("filename",A1),LEN(CELL("filename",A1))-1),"年"," "),2))*1-1,31,),FILTER(dt,(WEEKDAY(dt)=3)+(WEEKDAY(dt)=6)))

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません