エクセルについてご質問させていただきます。
基になるシートの行には項目(日付や時間・担当者・要件・取引先など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件)
- 最新から表示
- 回答順に表示
No.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))))
ただし上記の数式は、表示データ数が多くなると再計算に時間がかかりますので、たとえば今月のデータや今日のデータだけを表示させる数式に変更するなどして表示データ数を減らす工夫をすることになります。
No.4
- 回答日時:
No.3です。
No.3で、「こういうのはピボットテーブルで」と言いましたが、更に簡便な方法は、元のデータベースに対して、「オートフィルタ」を設定することです。表中のどこかにカーソルを置いた状態で、リボン(古いバージョンではメニューバー)のデータのフィルタをクリックするだけです。表示されるプルダウンで担当者名を指定すれば、その人のレコードだけが抽出されます。抽出された表をコピーして、他のシートに貼り付け・保存してもいいでしょう。
No.3
- 回答日時:
まず、データベースでは、何をするにせよ、各レコード(行)に一意な番号を振ったほうがいいです。
「日付」の列の左あたりに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列の書式を「日付」などに設定します。
No.2
- 回答日時:
解答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))))
No.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セルにも担当者名を入力して使用してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Google Drive Googleスプレッドシートについて質問です。 今作っているデータで、 シート1→ベタ打ちでひたすら 2 2022/05/18 14:27
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Excel(エクセル) エクセル関数について 2 2022/04/13 18:25
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Excelで質問です! 現在マクロを勉強中の初心者です。 以下のような表から、会社名が空白のもの以外 2 2022/06/14 12:16
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
はがきについて。
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
【関数】先頭だけにある、半角...
-
Excel ピボットテーブルで日付...
-
Excelのpivotについて質問です
-
時間によってファイル名が変わ...
-
エクセル 白黒印刷で白線を印刷...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
WPS OFFICEでの縦書きについて
-
Excelのチェックボックスの使い...
-
エクセルの条件付き書式につい...
-
エクセルのセルに同じ大きさの...
-
エクセルの関数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報