プロが教える店舗&オフィスのセキュリティ対策術

教えてください。
エクセルでリスト形式でデータを蓄積しています。その内容をカレンダーへ反映する数式を組みたいのですが、過去の質問回答をまねしてみましたが再現が難しく・・。

sheet1:リスト形式
sheet2:カレンダー形式

sheet1の「B」列(日付)とsheet2の「A」列(日付)が合致していれば、sheet2の「B」列にsheet1の「A」列の文字を返したいです。
ただし、日付は重複する場合があり、重複した場合、2個目はsheet2の「C」列に・3個目はsheet2の「D」列に、sheet1の「A」列の文字を返したいです。

「【エクセル】リスト形式の情報をカレンダー」の質問画像

質問者からの補足コメント

  • 画像が見えないので補足します。
    下記のような作りになっています。

    sheet1:リスト形式
    A列に名称(A1セルが項目名「名称」,A2セルより値)
    B列に日付(YYYY/MM/DD形式)

    sheet2:カレンダー形式
    A列に日付(YYYY/MM/DD形式)
    B列に名称1(B1セルが項目名「名称1」,B2セルより値)
    C列に名称2(C1セルが項目名「名称2」,C2セルより値)

      補足日時:2020/07/15 15:05
  • コメントありがとうございます・・!教えて頂いたリスト・数式を作成してみたところ、確かに結果が求められました。まさにこの結果を求めたかったのです。が、理解不足の為、自分の手元のデータに数式を置き換えた時にうまく再現出来ず、今一度ご質問させて下さい・・。重複した結果の2つ目(例えば重複した「7/1」の結果をE1とF1に返す)を別セルに返すのは、この数式のどこがポイントになるんでしょうか・・。分かりづらく申し訳ありません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/07/15 23:07

A 回答 (2件)

No1です



>別セルに返すのは、この数式のどこがポイントになるんでしょうか・・。
元のご質問内容がそれなりに複雑なので、関数式もそれなりに複雑になっています。
ですので、文章で説明すると、却ってわかり難くなるような気もしますが…

全体の計算内容としては抽出計算となりますので、配列計算をさせています。
(ですので、配列計算の概念がわからないと理解しにくいと思います)
まず、COUNTIF()でそれぞれのセルより上の範囲に目的と同じ日付が何件あるかを算出しています。
例えばF1セルでの計算を例にすると、日付はD1セルの「7/1」が対象となるので、COUNIFは各行の上から順に、{1,2,2,2,2・・・}という結果になります。

これに対してE列なら1番目、F列なら2番目・・・をピックアップしたいので、COLUMN((A1)と比較しています。(←E列なら1、F列なら2・・・の値を返します)
F列を意味する「2」と比較した場合、上記の配列は{False,True,True・・・}となりますが、このうちの最も早く出現した真(True)の値が抽出すべき対象と考えてよいことになります。(上例では2行目が該当)

…ということで、補足のご質問への直接の回答としては、「COLUMN(A1)と比較している」のがポイントということになるでしょうか。


全体の仕組みとしては上記の考え方から「2行目」が対象であることを算出し、それを基にして、最終目的となっている値をA列からINDEX関数で参照するという構成になっています。
該当項目が存在しない場合には「計算エラー」となるようにしてありますので、そのような場合にはまとめて空白出力になるようにしてあります。
    • good
    • 0
この回答へのお礼

何度も親切にご回答頂き大変ありがとうございます!至極勉強になりました。すぐに全て理解することが難しいですが、繰り返し教えて頂いた内容を確認して理解してみます。ありがとうございました!

お礼日時:2020/07/17 15:27

こんにちは



sheet1、sheet2のレイアウトがさっぱりわからんので、文章を頼りに適当に作成してみました。
(ので、違っているかもしれません。睨みすぎて目が疲れた・・・)
合っているかどうかよくわからないので、縮小サイズで雰囲気のみです。
(範囲が小さいだけで、式の原理は変わらないはずです)

添付図は、A,B列がsheet1のつもりで、D列以降がsheet2のつもりです。(D列がsheet2のA列に相当)
各レイアウトや記載内容が違っている場合は、当方の空想力の無さの結果なので、以下はスルーしてください。

添付図では、E1セルに
=IFERROR(INDEX($A:$A,AGGREGATE(15,6,ROW($B$1:$B$50)/(COUNTIF(OFFSET($B$1,,,ROW($B$1:$B$50)),$D1)=COLUMN(A1)),1)),"")
の関数式を入力し、右方、下方にフィルコピーしてあります。
「【エクセル】リスト形式の情報をカレンダー」の回答画像1
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています