アプリ版:「スタンプのみでお礼する」機能のリリースについて

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
と表示したいのです。

事前に並べ替えをしていても、上のように離れていたりしています。

また、実は上の内容をマクロでやりたいのですが、
そちらも解る方がいらっしゃれば教えて頂きたいです。

宜しくお願いします!

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/24 15:07

コンピュタは文字を頼りに処理をするのですよ。


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

回答ありがとうございます。

>コンピュタは文字を頼りに処理をするのですよ。
はい。存じております。
やっぱりそうですよねー。
ですが、何しろ、上司の指示なので、
何とか答えられたら、と思い、質問してみたんです(汗)

元のデータは、別の部署が社内のシステムダウンロードしたものを頂戴したらしいので
どうする事も出来ない様子。
システムへの入力はいろんな人が行っているので
バラついてしまうのではないかと思いますが。

アドバイスを参考に試行錯誤してみます。
ありがとうございました。

お礼日時:2003/09/24 15:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!