以下のようなテスト結果の表(DB)があります。
列:A,B,C,D,E,F,G,H,I,J,K,L,M,N,O
,,,,1700,小野,,,,2,,0,A,B,0
,,,,1200,小野,,,,4,,1,C,0,C
,,,,1700,柴田,,,,5,,4,A,B,0
,,,,1400,矢野,,,,3,,4,B,0,A
,,,,1200,伊藤,,,,4,,1,C,D,0,
,,,,1000,田村,,,,4,,3,D,C,A
F列には、名前がフルネームで入力されています。同一人物が複数あります。
J列には、数字が1,2,3,4
L列には、A,B,C,D,E
M列には、A,B,C,と数字の0
N列には、A,B,C,と数字の0
O列には、A,B,C,と数字の0
が、それぞれ入力されています。
このDBを元に
L,M,N,Oのデータの個数を名前別に以下のように集計をしたいのです。
J , L , M ,N,O
名前,1,2,3,4,計,A,B,C,D,E,計,A,B,C,0,計,....
小野,
ピボットテーブルで考えましたが、5回行わねばならず、結合も考えると関数で何とかならないものか
と質問させていただきました。
別に関数でなくても、もっと有効な方法がありましたらそれで結構です。御教示下さい。
No.1ベストアンサー
- 回答日時:
2007以降をお使いだと信じて(笑)。
図はかなり見辛いと思いますが、読み解いてください。
さて、図の通りA:O列におそらくお望みの通りのサンプルを用意しました。
順を追って。
まず、Q列に「作業列」を作成します。
1行目から順に見ていって、名前が初めて出てきたら行番号を返す内容の
Q2セル(式):=IF(COUNTIF($F$2:F2,F2)=1,ROW(),"")
として、行方向にフィルしてあります。
ちなみにフィルすると
Q3セル(式):=IF(COUNTIF(F$2:$F3,F3)=1,ROW(),"")
という式が入ると思われます(4行目以降の行も同様です。)
で、抽出部分。
作業列を見て、数字がある行の「名前」を取ってきます。
つまり、
S2セル(式):=IF(COUNT(Q:Q)<ROW(A1),"",INDEX(F:F,SMALL(Q:Q,ROW(A1))))
として、行方向にフィルしてやります。
まぁ、ややこしいですが、なんとなく
「Q列に数字が入っていたら、F列から「名前」を持ってきてくれ」
くらいの認識で大丈夫です。
正確な内容を説明しだすと長くなりますので、それぞれの関数を別途お調べくださいませ。
T:X列及びY列はJ列についてのカウント部分です。
COUNTIFS関数を使って、カウントしてやると簡単です。
(2007以降、実装された関数です。)
T2セル(式):=IF($S2="","",COUNTIFS($F:$F,$S2,$J:$J,T$1))
としてやり、必要範囲(T:X)にフィルしてやります。
パッと見、ややこしい式に見えますが、結構簡単です。
=COUNTIFS(範囲1,条件1,範囲2,条件2・・・・・)
といった具合に、「範囲・条件・範囲・条件・・・」と繰り返し、
複数条件によるカウントが可能な関数です。
これ以上の詳細は別途お調べください。
(IF関数については割愛します。)
Y列は単純にSUM関数で合計を求めています。
Y2セル(式):=IF($S2="","",SUM(T2:X2))
同様にZ:AD列及び、AE列は、M列に関する集計です。
Z2セル(式):=IF($S2="","",COUNTIFS($F:$F,$S2,$N:$N,Z$1))
で、必要セルにフィルです。
AE列は単純にSUM。
AE2(式):=IF($S2="","",SUM(Z2:AD2))
ですね。
2003以前のバージョンにはこのCOUNTIFS関数がありません。
なので、SUMPRODUCT関数を使って、
T2セル(式):=SUMPRODUCT(($F$2:$F$7=$S2)*($J$2:$J$7=T$1))
としてやります。
これも関数の仕組みを考え出すと長くなりますので、
詳細は別途お調べくださいませ。
御回答ありがとうございます。EXCELのバージョンは2007以降だと思います。Win8についてたもので、バージョンの調べ方が分かりません。リボンも使い辛く、ピボットテーブルもどこにあるのか分からず四苦八苦状態でした。まさか、本当に関数でできるとは思っていなかったので感謝です。ありがとうございました。
No.5
- 回答日時:
> ピボットテーブルもどこにあるのか分からず四苦八苦状態
なるほど、そういうことでしたか。
WIN8パソコンについてきた、と言うことは2013でしょう(たぶん)。
まぁ、2010でも変わらないのですが、
「ピボットテーブル」はリボンの「挿入」タブの一番左にありますよ。
No.4
- 回答日時:
No2の回答の補足です。
ピボットテーブルのように、重複のない名前の一覧を関数で表示するなら、名前表示セルに以下のような数式を入力して下方向にオートフィルコピーしてください。
=INDEX(F:F,SMALL(INDEX((MATCH($F$2:$F$8&"",$F$2:$F$8&"",0)<>ROW($F$2:$F$8)-1)*1000+ROW($F$2:$F$8),),ROW(A1)))&""
No.3
- 回答日時:
作業列を作って対応するのが計算に負担のかからない方法としてお勧めです。
示しのようなデータがシート1の2行目から下方に入力されているとして作業列をQからV列に用意します。
Q2セルには次の式を入力して下方にドラッグコピーします。
=IF(F2="","",IF(COUNTIF(F$2:F2,F2)=1,MAX(Q$1:Q1)+1,""))
R2セルには次の式を入力して下方にドラッグコピーします。
=F2&J2
S2セルには次の式を入力してV2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。
=$F2&L2
お求めの表をシート2に表示させるとして次のようにします。
A3セルには次の式を入力して下方にドラッグコピーします。
=IF(ROW(A1)>MAX(Sheet1!$Q:$Q),"",INDEX(Sheet1!$F:$F,MATCH(ROW(A1),Sheet1!$Q:$Q,0)))
なめが表示されます。
1行目にはシート1での作業列の列記号を入力します。
B1セルのR、G1セルにS、M1セルにT、R1セルにU、W1セルにVと入力します。
2行目にはB2セルからE2セルまでに1,2,3,4、F2セルには計、G2セルからK2セルまでにはA・・・E、L2セルには計、M2セルからP2セルまでにはA,B,C,0、Q2セルには計、以下右横のセルかM2セルからQ2セルを繰り返してAA2セルまで入力します。
その後にB3セルには次の式を入力します。
=IF(OR($A3="",B$2=""),"",IF(B$2<>"計",COUNTIF(INDIRECT("Sheet1!"&INDEX($B$1:$AA$1,MATCH("ー",$B$1:B$1))&":"&INDEX($B$1:$AA$1,MATCH("ー",$B$1:B$1))),$A3&B$2),SUM(INDEX($B3:$AA3,MATCH("ー",$B$1:B$1)):A3)))
この式で"ー"のーは必ず全角モードのひらがな入力による‐であることが必要で、一旦式を確定した後で-をーにけるなどの操作が必要となるでしょう。
その後に式をAA3セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。
この回答への補足
御回答ありがとうございます。無事作動しているのですが、なぜ「"ー"」なのか?また、どういった仕組みで抽出しているのか、再度教えていただけにでしょうか、よろしくお願い致します。
補足日時:2013/08/08 20:56御回答ありがとうございます。ばっちりできました。ただ、「"ー"のーは必ず全角モードのひらがな入力による‐であることが必要で、一旦式を確定した後で-をーにけるなどの操作が必要となるでしょう」の部分ですが、何も操作しないで正常に作動しています。全角の「"ー"」が正しい理由が良く分かりません。半角の「-」では#N/Aになります。EXCEL2013では、セルに単独で入れると全角と半角の違いが分かるのですが、関数内では同じに見えます。全角の「"ー"」が正しい理由を教えていただけると幸いです。関数組み合わせの内容もあまり分かっていませんが(笑)。
No.2
- 回答日時:
ご使用のエクセルのバージョンが記載されていないので、ひとまず2007以降のバージョンでの計算方法を提示します。
また例示のデータと説明文の内容が少し違うように思いますが、各列のデータを添付画像のように集計したいなら、添付画像のJ列のデータを集計するG12セルに以下の数式を入力して右方向および下方向にオートフィルしてください。
=COUNTIFS($F$2:$F$7,$F12,$J$2:$J$7,G$11)
ちなみに、L12セルにはJをMに変えた(上記の式を合計欄も無視して右方向にオートフィルした場合)、以下の関数を入力することになります。
=COUNTIFS($F$2:$F$7,$F12,$M$2:$M$7,L$11)
ちなみに、空白セルにした各合計欄はそれぞれ列方向に選択し、ホームタブのオートSUMのΣボタンをクリックします。
#Officeソフトはバージョンによって使用できる機能や操作方法が大きく異なりますので、質問する際には必ずバージョンを明記するようにしましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- Visual Basic(VBA) 列の最終行までのセルと1つ隣のセルの合計を別の列に表示 2 2022/07/12 19:50
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
【スプレッドシート】指定の日...
-
英数字のみ全角から半角に変換
-
【Excel VBA】PDFを作成して,...
-
Excel テーブル内の空白行の削除
-
エクセルでXLOOKUP関数...
-
Microsoft Formsの「個人情報や...
-
マイクロソフト 一時使用コード...
-
Excel2019と365、2021
-
VLOOKUP関数について
-
Microsoft Officeを2台目のPCに...
-
Excelのセルの重複チェックが出...
-
会社PCのメールが更新されない
-
PCを買い換えました。 今使って...
-
office2016のパソコン2台インス...
-
【スプレッドシート】白色のセ...
-
大学のレポート A4で1枚レポー...
-
Excel VBA 日程表からスケジュ...
-
時間の平均値を計算する方法を...
-
Microsoft365で写真をアルバム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
マイクロソフト 一時使用コード...
-
英数字のみ全角から半角に変換
-
Office2021を別のPCにインスト...
-
Microsoft Formsの「個人情報や...
-
officeビジネス型のワードやエ...
-
会社PCのメールが更新されない
-
【スプレッドシート】指定の日...
-
Microsoft Officeを2台目のPCに...
-
何このステータスバー
-
2つのシートの一致する行のセ...
-
会社のTeamsのことで相談です。...
-
エクセルにリンクされるのをし...
-
Windows 11で、IME言語バー(IM...
-
office2010とoffice365の共存で...
-
Microsoftのパソコンです。 エ...
-
エクセルでXLOOKUP関数...
-
Excel関数について質問ですm(__)m
-
VBA
-
自分の専門分野の仕事。初見で...
おすすめ情報