【エクセル】エクセル2003で下記内容を計算させる方法を教えて下さい。よろしくお願い致します。
A----B----C----A`----`B`----C`
山田---10---5---山田----10----11
鈴木---10---5---山田----22----6
伊藤---20---4---伊藤----20----4
川上---15---4---伊藤----10----8
伊藤---10---8---川上----15----12
山田---10---6---鈴木----10----5
山田---22---6
川上---15---8
上記内容で
1.Aの中に「同じ文字」があり、Bも「同じ数値」の場合はCの数字を合計してA‘、B‘、C‘のセルに表示
2.Aの中に「同じ文字」があり、Bは「違う数値」の場合はCの数字を個別に表示
3.Aの中に「違う文字」があり、Bは「同じ数値」の場合はCの数字を個別に表示
4.Aの中は「文字」です!数値ではありません。しかも文字には規則性がなくランダムに続きます
5.例文は8行ですが複数行続きます
http://www.atmarkit.co.jp/fwin2k/win2ktips/359pivot/pivot.html
@IT:Windows TIPS -- Tips:ピボットテーブルでクロス集計を行う
ピボットテーブルを使えば一発です。
A,B,Cの先頭に行の名前をつけておいて、
ピボットテーブルのデータ範囲を $A:$C にして、
行のフィールドに A をドラッグ
列のフィールドに B をドラッグ
データアイテムに C をドラッグすれば
クロス集計できます。
まず、集計用のデータを抽出します。
質問文でA’,B’の列にあるデータです。
「データ」→「フィルタオプション」で
指定した範囲をオン
リスト範囲$A$1:$A$8
検索条件範囲$A$9:$B$9
抽出範囲$A$10:$A$16
重複するレコードは無視するにチェックを入れる
で抽出されます。もしAに数字が入っているのを無視したいのなら、D列に=IF(ISTEXT(A1),”○”,”×”)としてフィルタで抽出する際に除くようにします。B列が数字かどうかもチェックしたければ、ISNUMBER関数を使って同様に除くこともできます。
抽出したデータを所定の位置に貼り付けます。
C列の前に1つ列を挿入し、A1&B1で質問文であれば「山田10」というデータを作り、全行に複写します。
C’にも一端同じようにします。で、D’1に=SUMIF($C$1:$D$10,$C’$1,$D$1:$D$8)で入れると1件の場合はそのままの値が計算できますし、複数件の場合はその合計が計算されます。
文字が入っているかをチェックしたければ先程の○×も条件に加えれば可能です。
関数で行いたいのです
人力検索はてな
やはり複数行あったんですね。(^^;)
マクロで処理するしかないでしょう。
以下の手順で
①名前がランダムでとありますが一応戻せるようにA列に追加し行番号を追加(Data数分)。
例)
1--山田--10
2--鈴木--10
3--伊藤--20
②「データ(D)」-「並べ替え(S)」で
「優先されるキー」を「列2」
「2番目に優先されるキー」を「列3」としてソート
例)
5--伊藤--10
3--伊藤--20
1--山田--10
③以下のマクロを実行します。
Dim Xbef, Ybef, Xaft, Yaft, I
’
Sub Macro1()
Xbef = 2: Ybef = 1 ’元データの座標
Xaft = 6: Yaft = 1 ’抽出先の座標
Cells(Ybef, Xbef).Select
For I = 0 To 2 ’データの1つ目は複写
Cells(Yaft, Xaft + I) = Cells(Ybef, Xbef + I)
Next I
Ybef = Ybef + 1
’2つ目以降
Do Until Cells(Ybef, Xbef) = ””
Cells(Ybef, Xbef).Select
’列2と列3を比較
If Cells(Ybef, Xbef) = Cells(Yaft, Xaft) And Cells(Ybef, Xbef + 1) = Cells(Yaft, Xaft + 1) Then
Cells(Yaft, Xaft + 2) = Cells(Yaft, Xaft + 2) + Cells(Ybef, Xbef + 2)
Else
Yaft = Yaft + 1
For I = 0 To 2
Cells(Yaft, Xaft + I) = Cells(Ybef, Xbef + I)
Next I
End If
Ybef = Ybef + 1
Loop
End Sub
マクロなどではなく関数では無理でしょうか・・・?
もっと簡単にできないでしょうか?
再々質問するしかないですね・・・
質問内容をもっと細かく書きます
私の質問の仕方が悪いのでしょうか・・・
関数を使用して行いたいのです