アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルについてご質問させていただきます。

基になるシートの行には項目(日付や時間・担当者・要件・取引先など15項目ほど)があり、列には毎回、メールやFAXなどで送られてくる確定した内容を打ち込んでいます。

   A    B     C        D・・・
1 日付  担当者   要件    取引先
2  5/4  鈴木   打合せ     A社  
3  5/4  佐藤   プレゼン    B社

このように、どんどん下に確定した内容を打ち込んでいくシートです。これを基に、このシートに打ち込んだ内容(15項目1行)を、それぞれ同じブック内の担当者別シートに反映させたいのです。
ただ、1日で同じ担当者が同じ日に違うお取引先での用件があることもありますし(A社から移動してB社で打合せ)、同じお取引先で違う時間にアポがあったり(11:00と15:00に同社で打合せなど)します。
今までは集計のため一覧のシートに、担当者別に予定を把握するのに個別(担当者別シート)にそれぞれ入力していましたが、二度手間のため、基のシートに一度入力すれば自動で反映できたらいいな、と思いご質問させていただきました。
何度か関数など使ってトライしてみたのですが、同じ日に複数の用件があるとうまくいかず、もやもやしています。(後から同じ日に違う用件が入ってきたりするので。)
1日の枠は3行確保していますが、lookup関数だと同じ日付や担当者名があるためうまくいきませんでした。

私の勉強不足と、つたない説明で大変申し訳ないのですが、ご教授頂ければ幸いです。
すみませんが、よろしくお願いいたします。

A 回答 (5件)

最終的にどのようなレイアウトで表示したいのかによって使用する関数などが異なりますが、たとえばどこかのセル(例G1セル)に担当者の名前を入力(入力規則のリストでドロップダウンリストから選択)したら、その担当者のデータ一覧を表示したいなら以下のような数式を入力し下方向にオートフィルします(添付画像参照)。



H4セル(取引先)
=INDEX(D:D,SMALL(INDEX(($B$2:$B$100<>$G$1)*10000+ROW($B$2:$B$100),),ROW(D1)))&""


F4セル(日付)
=IF($H4="","",INDEX(A:A,SMALL(INDEX(($B$2:$B$100<>$G$1)*10000+ROW($B$2:$B$100),),ROW(B1))))

G4セル(要件)
=IF($H4="","",INDEX(C:C,SMALL(INDEX(($B$2:$B$100<>$G$1)*10000+ROW($B$2:$B$100),),ROW(C1))))

ただし上記の数式は、表示データ数が多くなると再計算に時間がかかりますので、たとえば今月のデータや今日のデータだけを表示させる数式に変更するなどして表示データ数を減らす工夫をすることになります。
「Excelで一覧に入力→各シートに反映・」の回答画像5
    • good
    • 2

No.3です。

No.3で、「こういうのはピボットテーブルで」と言いましたが、更に簡便な方法は、元のデータベースに対して、「オートフィルタ」を設定することです。

表中のどこかにカーソルを置いた状態で、リボン(古いバージョンではメニューバー)のデータのフィルタをクリックするだけです。表示されるプルダウンで担当者名を指定すれば、その人のレコードだけが抽出されます。抽出された表をコピーして、他のシートに貼り付け・保存してもいいでしょう。
    • good
    • 1

まず、データベースでは、何をするにせよ、各レコード(行)に一意な番号を振ったほうがいいです。

「日付」の列の左あたりに1列、挿入してください。

  A   B   C    D    E
1 No. 日付 担当者  要件  取引先
2  1  5/4  鈴木  打合せ   A社
3  2  5/4  佐藤  プレゼン  B社



ご質問のような抽出表を作るためには、質問者さんが入力されているデータベースに対して、「ピボットテーブル」(クロス集計の機能)を使うのが最もお手軽です。あっという間に終わります。新たなデータが入力されても、手動にはなりますが、抽出表の更新もできます。この方法がExcelなど表計算ソフトの通常の方法です。


さて、それでもあえて、ワークシート関数で表示させる方法を考えてみました。できますが、たいへん面倒くさいです。

データベースのシートを「Sheet1」とします。担当者の一人である「鈴木」さんのシートに、これと同じ作りの表を用意します。そして、「鈴木」シートの表中の各セルに式を入力しておくことで、該当データを表示させます。「鈴木」シートから、「日付」も含めて全てのデータを消しておきます。

  A   B   C    D    E   F   G    H
1 No. 日付 担当者  要件  取引先   シート名 鈴木
2
3

(1)「鈴木」シートに次の文字列と式を入力

H1セル
鈴木

A2セル
=min(index(if(sheet1!$A:$A*(sheet1!$C:$C=$H$1)*(sheet1!$A:$A>=row(a1)),sheet1!$A:$A*(sheet1!$C:$C=$H$1)*(sheet1!$A:$A>=row(a1)),9999),))

B2セル
=index(sheet1!$A:$E,match($A2,sheet1!$A:$A,),match(B$1,sheet1!$1:$1,))

A2の式の解説。式中、「sheet1!$A:$A*(sheet1!$C:$C=$H$1)*(sheet1!$A:$A>=row(a1))」という部分で、数列を作っています。その内容は、「Sheet1」の各行のうち、その行番号が「「鈴木」シートA2セルの行番号以上」でなおかつC列に「鈴木」と入力されている行についてはその行のA列の数値を、それ以外の行についてはゼロを並べるというルールで作られる数列です。続いてIF関数で、できた数列のうちゼロのみを大きな数(9999)に置き換えた数列を作っています。この数列をINDEX関数で配列にし、その配列の中の最小値をMIN関数で求めています。要するに、C列に「鈴木」が入力されている「Sheet1」の全ての通し番号が「鈴木」シートに抽出され、それらの最大値が表示された行以下に続く「鈴木」シートの行には「9999」が表示されることとなります。

(2)
「鈴木」シートのA2セルをコピーし、A2:A10の範囲に貼り付けます。B2セルをコピーし、B2:E10の範囲に貼り付けます。

(3)
「鈴木」シートのB列の書式を「日付」などに設定します。
    • good
    • 0

解答No1です。


シート1で空のセルはシート2などでは0の表示になりますので空のセル表示にするためにはシート2のA3セルには次の式を入力することがベターでしょう。

=IF(ROW(A1)>COUNTIF(Sheet1!$B:$B,$B$1),"",IF(INDEX(Sheet1!$A:$R,MATCH(INDEX(Sheet1!$T:$T,MATCH(ROUNDDOWN(INDEX(Sheet1!$S:$S,MATCH($B$1,Sheet1!$B:$B,0)),-9),Sheet1!$S:$S,0))+ROW(A1),Sheet1!$T:$T,0),COLUMN(A1))=0,"",INDEX(Sheet1!$A:$R,MATCH(INDEX(Sheet1!$T:$T,MATCH(ROUNDDOWN(INDEX(Sheet1!$S:$S,MATCH($B$1,Sheet1!$B:$B,0)),-9),Sheet1!$S:$S,0))+ROW(A1),Sheet1!$T:$T,0),COLUMN(A1))))
    • good
    • 1

データがシート1に有るとします。


シート1の1行目にはお示しのような項目名がR列までに並んでいるとし下方にデータが入力されるとします。
複雑な処理になりますので作業列をS列とT列に設けます。
S2セルには次の式を入力して下方にドラッグコピーします。

=IF(ROW(A1)<=COUNT(A:A),IF(COUNTIF(B$2:B2,B2)=1,ROUNDDOWN(MAX(S$1:S1),-9)+1000000000+A2*10000+COUNTIF(B$2:B2,B2),ROUNDDOWN(INDEX(S$1:S1,MATCH(B2,B:B,0)),-9)+A2*10000+COUNTIF(B$2:B2,B2)),IF(ROW(A1)<=COUNTA(A:A)-1+INT(MAX(S$1:S1)/1000000000),(ROW(A1)-COUNTA(A:A)+1)*1000000000,""))

T2セルには次の式を入力して下方にドラッグコピーします。

=IF(S2="","",RANK(S2,S:S,1))

そこで準備は終わって担当者ごとのシートを作るわけですが例えばシート2から担当者の数のシートを用意します。
その上でシート見出しでシート2を選択したのちにCtrlキーを押しながら必要なシートをクリックします。これでシート2を含めた作業グループが出来上がります。
その上でシート2のA1セルには担当者名の文字を入力しB1セルには作業グループを解除後に担当者の名前を入力することにします。
2行目のA2セルからR2セルまでにはシート1と同じ項目名を入力します。
A3セルには次の式を入力してR3セルまでドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(ROW(A1)>COUNTIF(Sheet1!$B:$B,$B$1),"",INDEX(Sheet1!$A:$R,MATCH(INDEX(Sheet1!$T:$T,MATCH(ROUNDDOWN(INDEX(Sheet1!$S:$S,MATCH($B$1,Sheet1!$B:$B,0)),-9),Sheet1!$S:$S,0))+ROW(A1),Sheet1!$T:$T,0),COLUMN(A1)))

A列でのデータの表示形式は日付から設定します。

これらの操作が済んだらシート1を選択すれば作業グループは解除されます。その後に例えばシート2のB1セルに担当者の名前を入力することで、データの古い順に3行目から下方に表示されます。
シート1で入力の日付が下行に古い日付のデータが入力されても瞬時に対応します。
シート名を担当者名とした場合には該当するシートのB1セルにも担当者名を入力して使用してください。
    • good
    • 1

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