再質問です。よく内容を読んでお答え頂きますよう宜しくお願いします。

【エクセル】エクセル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行ですが複数行続きます

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/12/21 14:04:20
  • 終了:--

回答(3件)

id:ootatmt No.1

ootatmt回答回数1307ベストアンサー獲得回数652005/12/21 14:43:03

ポイント20pt

http://www.atmarkit.co.jp/fwin2k/win2ktips/359pivot/pivot.html

@IT:Windows TIPS -- Tips:ピボットテーブルでクロス集計を行う

ピボットテーブルを使えば一発です。


A,B,Cの先頭に行の名前をつけておいて、

ピボットテーブルのデータ範囲を $A:$C にして、

行のフィールドに A をドラッグ

列のフィールドに B をドラッグ

データアイテムに C をドラッグすれば

クロス集計できます。

id:go4649

関数を使用して行いたいのです

2005/12/21 15:28:41
id:Baku7770 No.2

Baku7770回答回数2832ベストアンサー獲得回数1812005/12/21 14:57:25

ポイント20pt

 まず、集計用のデータを抽出します。


 質問文で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件の場合はそのままの値が計算できますし、複数件の場合はその合計が計算されます。


 文字が入っているかをチェックしたければ先程の○×も条件に加えれば可能です。

id:go4649

関数で行いたいのです

2005/12/21 15:29:17
id:takomaro No.3

takomaro回答回数36ベストアンサー獲得回数02005/12/21 14:58:21

ポイント20pt

http://www.hatena.ne.jp/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

id:go4649

マクロなどではなく関数では無理でしょうか・・・?

もっと簡単にできないでしょうか?

再々質問するしかないですね・・・

質問内容をもっと細かく書きます

私の質問の仕方が悪いのでしょうか・・・

2005/12/21 15:37:38
  • id:polu
    再質問する前に

    何故マクロを受け入れないのか明確にした方が良いです。

    単純に使い方が分からないのだとすれば、
    マクロの使い方を学習&質問した方が良いと思います。
    せっかく回答も貰っていますし、
    今後Excelを使用する上でも遙かに有用だと思います。
    ...余計なお世話ですが。

    質問の内容については、A’B’C’に表示する項目数が実行前に
    明らかでないのでかなり難しい(私には無理)です。
    並べ替えを間に何回か挟めば関数だけでもできるかもしれませんが...。

    以上おせっかいでした。
  • id:taknt
    Re:再質問する前に

    関数だけで やるなら別のセルに 取得したい条件を入れるような作業が必要となる。
  • id:ootatmt
    クロス集計

    やっぱ、クロス集計にはピボットテーブル。
    いやなら、Accessでやればいいとおもぅよ。
  • id:Baku7770
    同じく再質問される前に

     前回のキャンセルした質問にも、今回の質問にも書きましたが、Aの「文字」という意味が、数値を入力されているなら除外するという意味か、単に文字が入力されているという意味なのかが分かりません。明記して下さい。
     1つのセルに収まる関数だけでは不可能です。データの抽出(質問文でA’,B’のデータを作る方法)ができません。
     ソートを掛けられ、作業用の列が設けられるなら可能ですが。ただし、これなら文字なのか数値なのかチェックはできません。
  • id:takomaro
    ちなみに

    急いで作成したので手操作+VBAとなってしまいましたが
    「Sub Macro1()」の直後に以下のVBAをコピペすれば全て自動で出来ます。

    ’ナンバリング
    Columns(1).Insert
    Xbef = 1: Ybef = 1 ’元データの座標
    Do
    Cells(Ybef, Xbef) = Ybef
    Ybef = Ybef + 1
    Loop Until Cells(Ybef, Xbef + 1) = ””
    ’ソート
    Cells(1, 1).Select
    Selection.Sort Key1:=Range(”B1”), Order1:=xlAscending, Key2:=Range(”C1”), Order2:=xlAscending, _
    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin

    ただ特別な理由があってその他の手操作(ソートとか)なしでワークシート関数のみでとなるとちょっと思いつきません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません