
以下のようなテスト結果の表(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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
microsoft office for mac につ...
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
エクセルの式がわかる方がおら...
-
Microsoft365、ページ設定がで...
-
Excelで〇のついたものを抽出し...
-
Office 2021 Professional Plus...
-
office2019 のoutlookは2025年1...
-
Microsoft Formsの「個人情報や...
-
パソコンWindows11 Office2021...
-
表の作成について
-
Office2021を別のPCにインスト...
-
Office2024インストール後の疑問点
-
マイクロソフト オフィスのサポ...
-
エクセルで質問です。 ハイパー...
-
エクセル 日付順に並べてかえた...
-
Teams内でショートカットって貼...
-
Microsoft365について
-
outlookのメールが固まってしま...
-
officeソフト 本名変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
エクセルの式がわかる方がおら...
-
Office2024インストール後の疑問点
-
Microsoft Formsの「個人情報や...
-
Excelで〇のついたものを抽出し...
-
マイクロソフト オフィスのサポ...
-
office2019 のoutlookは2025年1...
-
outlookのメールが固まってしま...
-
Office2021を別のPCにインスト...
-
エクセル 日付順に並べてかえた...
-
Office 2021 Professional Plus...
-
エクセルで質問です。 ハイパー...
-
Excel 日付を比較したら、同じ...
-
マクロ自動コピペ 貼り付ける場...
-
エクセル:一定間隔で平均値を...
-
Teams内でショートカットって貼...
-
Microsoft365、ページ設定がで...
-
Microsoft365について
-
別シートの年間行事表をカレン...
おすすめ情報