[[20040917162804]] 『集計』(へみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『集計』(へみ)
 お世話になってます。
 集計の仕方なんですけど、
 
      A    B    C   D   E   F   G
 1 会社名  評価基準 評価1 評価2 評価3 評価4 評価5   
 2  A社    ○    1   8   2   3   0
 3         △    2   1   0   2   1
 4          ×    1   1   0   1   1
 5  @A社   ○    2   3   1   0   2
 6        △    2   1   0   4   1
 7        ×    0   2   1   2   4
 8  *A社   ○    2   0   0   1   2
 9        △    2   0   1   0   1
 10        ×    1   0   2   0   0
 11  B社    ○    2   3   1   0   2
 12         △    1   0   1   2   3
 13        ×    2   0   2   3   1
 14  C社    ○    2   3   2   0   1
 15        △    2   0   1   0   1
 16        ×    1   0   1   2   1
 17  @B社   ○    2   1   1   1   1
 18        △    0   2   0   2   2
 19        ×    1   2   3   9   1
 20  *A社   ○    2   3   2   1   4
 21        △    0   2   1   3   1
 22        ×    1   2   4   0   0

 ↓これを
      A    B    C   D   E   F   G
 1 会社名  評価基準 評価1 評価2 評価3 評価4 評価5   
 2  A社    ○    7   14   5   5   8
 3         △    6   4   2   9   4
 4          ×    3   5   7   3   5
 5  B社    ○    4   4   2   3   3
 6         △    1   2   1   4   5
 7        ×    3   2   5   12   2
 8  C社    ○    2   3   2   0   1
 9        △    2   0   1   0   1
 10        ×    1   0   1   2   1
にしたいんです。
A社=A社、@A社、*A社(A社を含むもの)
B社=B社、@B社、*B社(B社を含むもの)
C社=C社、@C社、*C社(C社を含むもの)
評価の数値もそれに伴ってほしいです。
よろしくおねがいします。

 なかなかレスがつかないですね(^^;

 一つ質問があります。
 A列には会社名がはいっているようですが、"A社"と"@A社"などの間は何も入力されていないのですか?

 ・自分の力ではそれぞれの行に会社名が入っていないと難しいですね・・・。
  なんで空欄の部分にも会社名を入れるという提案をしたいのですが・・・。どうでしょう?
  (書式で文字をセルの背景色と同じにすると見た目わからないし・・・。)
 ・あと元のデータと結果は別シートなんでしょうか?
  (どっちもA1から入力が始まっているので気になりました・・)

 空欄の部分にも会社名を入れていただけるという前提で・・・。
 元データのシート名をsheet1、結果を表示するシート名をsheet2とします。
 sheet2のC2からG10まで範囲選択して数式バーに
 =SUMPRODUCT(IF(ISERR(SEARCH(A2,sheet1!$A$22:$A$22)),0,1)*(sheet1!$B$2:$B$22=B1),sheet1!C$2:C$22)
 として[ctrl]+[shift]+[Enter](ボタン3つ同時押しです)で配列式に。

 だめですかね・・・(^^;
 (gloomy)

 本日はこれにてPC落としますのでフォローできません。
 達人の方々、他になにか良い案ありましたらぜひお願い致します!
 あとフォローのほうもできれば・・・(ムシが良すぎるか・・失礼しました)
 (実は配列式苦手 gloomy)

 わたしは一般機能(関数)は、まったくできないのでレスできません。
 ごめんなさい・・・。   (INA)


 空欄の部分にも会社名が入っているという前提で、
 かつ、A社、@A社が同じグループに属するものであるとわかるように、列が追加されているものとして、
 ピボットテーブルで集計はいかがでしょう?
 結構、安直ですが・・・ ちなみに集計結果です。(まこ)

 		データ				
 グループ名	評価基準	合計 / 評価1	合計 / 評価2	合計 / 評価3	合計 / 評価4	合計 / 評価5
 A社	×	3	5	7	3	5
 	△	6	4	2	9	4
 	○	7	14	5	5	8
 A社 集計		16	23	14	17	17
 B社	×	3	2	5	12	2
 	△	1	2	1	4	5
 	○	4	4	2	1	3
 B社 集計		8	8	8	17	10
 C社	×	1	0	1	2	1
 	△	2	0	1	0	1
 	○	2	3	2	0	1
 C社 集計		5	3	4	2	3
 総計		29	34	26	36	30

 衝突しました。
一応、ほんとに一応。。なるには、なったけど。。汗
Sheet2に↓こんな表があるとして、、
 A    B    C    D    E    F    G
1会社名	評価基準	評価1	評価2	評価3	評価4	評価5
2 A社						
3						
4						
5 B社						
6						
7						
8 C社
標準モジュールに貼り付けてください。
今回だけで、応用する場合はご自身でお願いします。(汗)
Sub 集計()
Dim MyA As Variant, MyB As Variant
Dim i As Long, j As Long, k As Long, n As Long
Dim MyStr As Long
Dim MyAry() As Variant
Dim MyRow As Long
With Sheet1
    With .Range("A1").CurrentRegion
        MyA = .Resize(.Rows.Count - 1, .Columns.Count).Offset(1).Value
    End With
End With
With Sheet2
        MyRow = .Range("A65536").End(xlUp).Row + 2
        .Range("B2:G" & MyRow).Value = "○"
    With .Range("A1").CurrentRegion
        MyB = .Resize(.Rows.Count - 1, .Columns.Count).Offset(1).Value
    End With
End With
k = 1
For j = LBound(MyB, 1) To UBound(MyB, 1) Step 3
    For i = LBound(MyA, 1) To UBound(MyA, 1) Step 3
    ReDim Preserve MyAry(LBound(MyB, 1) To UBound(MyB, 1), LBound(MyB, 2) To UBound(MyB, 2))
        MyStr = InStr(1, MyA(i, 1), Left(MyB(j, 1), 1), 1)
            If MyStr > 0 Then
                For n = 3 To UBound(MyA, 2)
                        MyAry(k, n) = MyAry(k, n) + MyA(i, n)
                        MyAry(k + 1, n) = MyAry(k + 1, n) + MyA(i + 1, n)
                        MyAry(k + 2, n) = MyAry(k + 2, n) + MyA(i + 2, n)
                Next
            End If
    Next
                        MyAry(k, 1) = MyB(k, 1)
                        MyAry(k, 2) = MyA(k, 2)
                        MyAry(k + 1, 2) = MyA(k + 1, 2)
                        MyAry(k + 2, 2) = MyA(k + 2, 2)
    k = k + 3
Next
With Sheet2
    With .Range("A1").CurrentRegion
        .Resize(.Rows.Count - 1, .Columns.Count - 1).Offset(1, 1).ClearContents
        .Resize(UBound(MyB, 1), UBound(MyB, 2)).Offset(1).Value = MyAry
        .Columns().AutoFit
    End With
End With
Erase MyA, MyB, MyAry
End Sub				
一応↓こんなんになりました。汗
会社名	評価基準	評価1	評価2	評価3	評価4	評価5
A社	○	7	14	5	5	8
	△	6	4	2	9	4
	×	3	5	7	3	5
B社	○	4	4	2	1	3
	△	1	2	1	4	5
	×	3	2	5	12	2
C社	○	2	3	2	0	1
	△	2	0	1	0	1
	×	1	0	1	2	1
B社の○評価4は、、「1」ですね。汗
(夏目雅子似)

 試しに書いてみます。広範囲にわたり配列関数数式を伏せることになりますので、大変重いと思います。
 元シートをSheet1として、Sheet2のA1:G1に横見出し、A2:B10にたて見出しを配置し、
 C2に
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))*(Sheet1!$B$2:$B$20=$B2),Sheet1!C$2:C$20)
 C3に
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))*(Sheet1!$B$3:$B$21=$B3),Sheet1!C$3:C$21)
 C4に
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))*(Sheet1!$B$4:$B$22=$B4),Sheet1!C$4:C$22)
 と入力し、これらをG2:G4までフィルドラッグし、C2:G4をコピーして、B5:G10に貼り付け。
 A列とB列のキー項目を作業列に配置して、統合などもよいかもしれません。        (LOOKUP) 

w(☆o◎)wがぁ〜〜〜〜ん!!(∩_∩;)P 白旗〜!

 (夏目雅子似)

おはようございます。
回答ありがとうございます。
 C2に
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))*(Sheet1!$B$2:$B$20=$B2),Sheet1!C$2:C$20)
                                  ↑と↑と    ↑と↑ ココはC2とC3とC4でなぜずらすんですか?
 でも前の参照先はずれてないんですけど、何か意味ありますか?
 C3に
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))*(Sheet1!$B$3:$B$21=$B3),Sheet1!C$3:C$21)
 C4に
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))*(Sheet1!$B$4:$B$22=$B4),Sheet1!C$4:C$22)
あと、この関数の意味を教えて下さい。
お願いします。
(へみ)

 =SUMPRODUCT(1配列,2配列………)は、下のように数量配列*単価配列の合計を計算できます。

   数量 単価
   A    B
 1  10   5
 2  20   4
 3  30   3
 4 220	
   ↑
 =SUMPRODUCT(A1:A3,B1:B3)

 各配列の積和が計算できることを利用して、AND条件で一致したものの数値を合計できます。
 =SUM()を使用して構成した配列数式が、Ctrl+Shift+Enterと入力する必要があるのに対して、
 =SUMPRODUCT()は、Enterで入力できることから、広く利用されています。

 =SUMPRODUCT( AND条件1配列 *AND条件2配列 *………,合計範囲配列)

 回答の数式の2行目の
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))*(Sheet1!$B$3:$B$21=$B3),Sheet1!C$3:C$21)
 ISNUMBER(FIND($A2,Sheet1!$A$2:$A$20))は、Sheet1!$A$2:$A$20の中にA2が発見できるものだけ、

 (Sheet1!$B$3:$B$21=$B3)は、Sheet1!$B$3:$B$21の中で$B3と等しいものだけ、という意味です。

 会社名の行と評価基準の行とは、一組のうち2個は、位置ずれがありますので、
 対象範囲指定をこのようにしています。                     (LOOKUP)       


 毎度回答ありがとうございます。
 もう一ついいですか?
 sheet1
    A  B
 1 A社  10
 2 B社  20
 3 @A社 20
 4 C社  15
 5 *A社 20
 6 @B社 25
 ↓
 sheet2
    A  B
 1 A社  50
 2 B社  45
 3 C社  15
 にしたいんです。
 sheet2のB1に
 =SUMPRODUCT(ISNUMBER(FIND($A1,Sheet1!$A$2:$A$6)),Sheet1!B$2:B$6)
 sheet2のB2に
 =SUMPRODUCT(ISNUMBER(FIND($A2,Sheet1!$A$2:$A$6)),Sheet1!B$2:B$6)
 じゃダメですか?
 0になるんですけど・・・
(へみ)

 もらったv(=∩_∩=)v
=SUMPRODUCT(ISNUMBER(FIND($A1,Sheet1!$A$1:$A$6))*Sheet1!$B$1:$B$6)
で、ないの?
さっつ
(SoulMan)

 間違えた・・・
 =SUMPRODUCT(ISNUMBER(FIND($A1,Sheet1!$A$1:$A$6))*Sheet1!$B$1:$B$6)
 です。
 できませんけど・・・
 (へみ)

 SoulManさんのおっしゃる方法で勿論よいのですが、前の説明の続きという意味で、

 Sheet2のB1を=SUMPRODUCT(N(ISNUMBER(FIND(A1,Sheet1!A$1:A$6))),Sheet1!B$1:B$6)
 として、下にフィルドラッグでよいと思います。
 ISNUMBER(FIND(A1,Sheet1!A$1:A$6))この部分が論理値の配列ですから、上のようにされるか、
 =SUMPRODUCT(1*(ISNUMBER(FIND(A1,Sheet1!A$1:A$6))),Sheet1!B$1:B$6)などとして、数値に
 変換しますと、積和が計算できます。

 単独の条件の場合には、=SUMIF(Sheet1!A$1:A$6,"*"&A1&"*",Sheet1!B$1:B$6)と=SUMIF()が
 利用できます。                               (LOOKUP) 

 (○'ω'○)ん?
LOOKUPさんの後で心強いv(=∩_∩=)v
A社	50	TRUE	10
B社	45	TRUE	20
C社	15	FALSE	20
		TRUE	15
		TRUE	20
		TRUE	25
ちなみに、私のところでは↑となっております。
C1に
=ISNUMBER(FIND($A1,Sheet1!$A$1:$A$6))
D1に
=Sheet1!$B$1:$B$6
としてみると、悪さをしてるやつがわかるかもよぉ??v(=∩_∩=)v
(SoulMan)

 できました。
 何か勘違いしてたみたいです。
 ありがとうございました。
 (へみ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.