• ベストアンサー

Excel97で集計

Excel97を使っています。    D列             K列  L列 2 ○○商事 鈴木太郎   100  150 3 ○○商事 田中一郎   250  50 4 ▲▲株式会社       150  100 5 ○○商事 小林花子   200  50 6 ▲▲株式会社       50   200 7 (株)○○商事        100  150 8 △△テクノロジー(株)   300  10 という表があります。 D列を丸めて、K列とL列の合計を出したいのですが、 どのようにしたらいいでしょうか? D列を丸める際に、 例えば、2、3、5、7行目は丸めて、 D列に「○○商事 計」 K列に、650 K列に、400 と表示したいのです。 事前に並べ替えをしていても、上のように離れていたりしています。 また、実は上の内容をマクロでやりたいのですが、 そちらも解る方がいらっしゃれば教えて頂きたいです。 宜しくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

例に掲げた内容を条件とすれば、次のようなコードで集計出来るかと思います。 確認の意味で書きますが、先頭に"(株)"が付いているものと付かない名前を同一とし、 スペース(半角&全角)の手前までを比較しています。 「計」に掲げる会社名は、比較部分の名称です。 一応、何回集計してもいいようにしています。 これで如何でしょうか。 Sub Syuukei() Dim Rng As Range Dim RngS As Range Dim R As Range Dim S As Range Dim KName As String For Each Rng In Range("D2", Range("D65536").End(xlUp))   If Right(Rng.Value, 2) = " 計" Then ' 既存集計値を消去     Rng.ClearContents     Rng.Offset(0, 7).Resize(1, 2).ClearContents   End If Next Rng Set Rng = Range("D2", Range("D65536").End(xlUp)) '会社名データ範囲 Set RngS = Rng.Offset(Rng.Rows.Count) ' 会社名集計記入エリア For Each R In Rng   KName = R.Value   If InStr(R.Value, "(株)") = 1 Then KName = Mid(KName, 4)   'ここに先頭に"(有)"等の付く比較時に除くものがあれば上記同様に記述します。   KName = Left(KName, Len(KName) - InStr(KName, " "))   KName = Left(KName, Len(KName) - InStr(KName, " "))   Set S = RngS.Find(KName & " 計", lookat:=xlWhole)   If S Is Nothing Then     With Range("D65536").End(xlUp).Offset(1)       .Value = KName & " 計"       .Offset(, 7).Value = .Offset(, 7).Value + R.Offset(, 7).Value       .Offset(, 8).Value = .Offset(, 8).Value + R.Offset(, 8).Value     End With   Else     S.Offset(, 7).Value = S.Offset(, 7).Value + R.Offset(, 7).Value     S.Offset(, 8).Value = S.Offset(, 8).Value + R.Offset(, 8).Value   End If Next R Set Rng = Nothing Set RngS = Nothing End Sub

tamisara
質問者

お礼

回答ありがとうございます! 何回でも使えるように配慮して頂いて 本当に嬉しいです! 残念ながら、まだ試せないでいますが、 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

コンピュタは文字を頼りに処理をするのですよ。 特にエクセルはセルの文字列を1塊として考えます。 2,3、5、7を同一と判別できるのは、人間だからです。 初めから、会社と個人名を列を分けなかったのが設計の失敗です。 (1)会社名と個人名を別列に分けることを考えましょう。 多少は手作業補正が入るにしても。分けておけば結合は 簡単です。=A1&" "B1のように。 (2)それと前株はソートの邪魔になります。一旦前株を空白に置換える列を作っては。小生も数10年前から経験しましたが今もって良案なし。 会社と個人の分離、同一会社の表現の統一ができれば あとはSUMIFやDSUM関数などで出来るでしょう。 ●上記(1)(2)の処理にVBAは使えます。 しかし全体の処理に付いては、ここで書くほど簡単でないと思います。内容の状況に応じてコーディングしないといけない点が多々ありそうだからです。 ●(1)(2)が済むと、ソートしてコントロールブレイクを利用して合計を出すと言う古典的方法をVBAで使えます。ロジックは簡単で基本情報処理技術者試験にでるレベルです。

tamisara
質問者

お礼

回答ありがとうございます。 >コンピュタは文字を頼りに処理をするのですよ。 はい。存じております。 やっぱりそうですよねー。 ですが、何しろ、上司の指示なので、 何とか答えられたら、と思い、質問してみたんです(汗) 元のデータは、別の部署が社内のシステムダウンロードしたものを頂戴したらしいので どうする事も出来ない様子。 システムへの入力はいろんな人が行っているので バラついてしまうのではないかと思いますが。 アドバイスを参考に試行錯誤してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelで集計の方法

    A列に名前が入っています。 B列に数字(個数)が入っています。 A列にある名前は重複しています。(同じ名前が何回も出現します。) このA列にあるリストを同じシートのD列に表示し、更にE列に名前ごとの合計を出したいのですが、どうすればよいでしょうか? つまり A列   B列 太郎   50 一郎   20 花子   30 太郎   40 花子   50 一郎   50 太郎   20 これを 太郎=110 一郎=70 花子=80 としたいのです。 よろしくお願いします。

  • エクセル関数 PHONETICについて

    エクセル関数について教えてください。 セルAに入れた会社名に セルBにふりがなをつけたいので セルBに  =PHONETIC(A1) といれます。 これで ちゃんとふりがながうたれるのですが 株式会社 太郎商事  有限会社 花子興業 など 株式会社や有限会社には ふりがなをつけたくありません。 (並べ替えをしたい為) 何か良い方法はありますか?

  • エクセルの集計での質問

    A列に日付、BからF列に担当者名(1~5)が入っています。 この表で誰が何日稼働したか調べたいのですが、日付の被りがあるのと、例えば▲▲さんが「担当者1」、●●さんが「担当者2」と決まっているわけでなく、早いもの順に「担当者1~5」までに名前が入っています。 A B C D E F 日 担1 担2 担3 担4 担5 1/3 太郎 次郎 花子 三郎 和子 1/3 次郎 太郎 三郎 美和 和子 1/4 花子 次郎 孝夫.......... この場合求められたものが 1/3 太郎 ×1、次郎 ×1、三郎×1、花子×1、和子×1 、美和×1 1/4 花子×1、次郎×1、孝夫×1 なので 太郎1日 次郎2日 三郎1日 花子2日 和子、美和、孝夫各1日 という風にエクセルで集計できないでしょうか?

  • 太郎と花子と一郎

    で例えます。 太郎と花子は結婚して2年です。しかし、花子がパート先の上の一郎と 交際していたのが発覚、花子も夫である太郎より、不倫相手の一郎を 選び別居することになりました。 この後、太郎と花子は離婚するのですが、 花子が半年間は結婚出来ないのはわかってるのですが この間に、もし妊娠してたとしたら(一郎との子)法律上の父親は どちらになるのでしょうか? それから太郎は花子や一郎に慰謝料はとれますか? 妥当な金額はいくらですか? 太郎は結婚後、花子を幸せにする為に、一生懸命働き、飲み歩く事もやめてまじめな夫であるのが前提です。 身近で起こった事なので宜しくお願いします。

  • EXCELで条件を満たす時コピー挿入したい

    EXCEL2002ですが、以下のようなデータがあるとします。      A      B 1    山田太郎 100 2    山田花子 100,200,300 3    鈴木一郎 300 B列にカンマ区切りで入力しているデータがある場合、      A      B 1    山田太郎 100 2    山田花子 100 3    山田花子 200 4    山田花子 300 5    鈴木一郎 300 上記のように、B列のカンマ区切り分を振り分けたレコードを新たに 挿入したいのです。 尚参考までに、A列は名前などでデータ内容は多様になり、B列は ある程度決まった選択肢(20~30通り)になります。 一般の関数では無理なような気がするのですが、VBAなどでは可能でしょうか? もし可能であれば、マクロなども組んだことがないものですから、 やさしくご教授いただければ幸いです。 よろしくお願いいたします。

  • 【エクセル】領域上端のセル情報を返す方法

    1行目のA列からI列まで順に、「日付 太郎 一郎 次郎 花子 1位 2位 3位 4位」 2行目のA列からE列まで「1/5 1 2 3 4」 3行目以下同様に「1/6 2 1 4 3」 4行目「1/7 4 2 3 1」・・・・・ (数字は順位です) 上記のように、その日のランキングを入力(別の領域からRANK関数で返しています)しており、その横のF~Iの列に1行目にある人の名前を返したいのですが、良い方法は あるでしょうか。 例えば1/6であれば、 F3:一郎 G3:太郎 H3:花子 I3:次郎 という答えが出て欲しいのですが。 できれば関数で処理したいのですが、宜しくお願いいたします。

  • エクセル 並べ替えについて

    エクセル 並べ替えについて A列 B列 C列 取引先 売上額 納付確認日 A商事 10000 1月1日 B商事 20000 1月2日 C商事 30000 1月3日 D商事 40000 1月4日 E商事 50000 1月5日 シート1にエクセル2003で上記のような表を作っています。 今から売り上げを加算して帳簿につけるのですが、C商事だけ 別会計になっています。 VBAでC商事だけ以下のように省いて、シート2に自動的にはじく ようにしたいのです。 初心者ですいませんが、ご教授していただければ嬉しいです。 シート1 A列 B列 C列 取引先 売上額 納付確認日 A商事 10000 1月1日 B商事 20000 1月2日 D商事 40000 1月4日 E商事 50000 1月5日 シート2 A列 B列 C列 取引先 売上額 納付確認日 C商事 30000 1月3日 よろしくお願いします。

  • Excel関数で集計をしたいのですが

    下のような表があり、Excelで有効期限のあるポイント(現在から過去一年間)の集計をしたいのですが、    A      B        C        D         E 1 名前  2004/01/24  2008/03/15  2008/08/02   1年間有効 2 太郎     2        3        2         5 3 花子              2                  2 Eの列に集計を出したいと思いますが、関数で出すことは出来ますでしょうか? 宜しくお願いいたします。

  • Excelで、各行で割合が多いものを抜き出す方法

    Excelで、各行で、30%を超えるデータの「名前」を表示するにはどうすればよいでしょうか? たとえば、以下のように、 「各人が、最近100日間で朝ごはんの時に何を飲んだか?」を割合として示す表があったとします。 当然ですが、割合は 0から1.0の間です。 ---------------------------------------------------------------------    A    B    C    D    E    F    G 1  名前   牛乳   コーヒー 水    お茶   紅茶 2  太郎   0.20   0.40   0.40   0.00   0.00    3  花子   0.22   0.00   0.28   0.50   0.00    4  一郎   0.00   0.00   0.10   0.50   0.00    5  ・・・・・・ (第一行には見出しを入力しています。第A列には名前を入力しています) --------------------------------------------------------------------- G列に、30%以上の頻度で選択された飲み物を表示したいのです。 (つまり、100日間で30日以上選択された飲み物です。) -----------------------------------------------------------------    A    B    C    D    E    F    G 1  名前   牛乳   コーヒー 水    お茶   紅茶   10%以上 2  太郎   0.20   0.40   0.40   0.00   0.00   コーヒー;水; 3  花子   0.22   0.00   0.28   0.50   0.00   お茶; 4  一郎   0.00   0.00   0.10   0.90   0.00   お茶; 5  ・・・・・・ --------------------------------------------------------------- (飲み物の名前の間は別にセミコロンでなくても結構です) マクロとか使わず、ワークシート関数でできる方法があるといいのですが・・・。 よろしくお願いします!

  • A列で太郎、一郎、三郎を検索し、検索された太郎、一郎、三郎のB列、C列

    A列で太郎、一郎、三郎を検索し、検索された太郎、一郎、三郎のB列、C列、D列を0を代入し、緑に塗るVBA記述を教えてください。

専門家に質問してみよう