Excelのマクロに関する質問です。良い回答は、200ポイント差し上げます。

重複したデータ([機器名]と[オプション]が一致している)がある場合、
[値]の数値を合計したい。下記に、更新前と更新後のイメージを記載しました。
※行は2000行位あります。
※列は[機器名][オプション][値]の他にも複数あります。

【Aシート】(更新前)
3  機器名  オプション 値
4  テレビ  スイッチ   3
5  ビデオ  リモコン  -5
6  テレビ  スイッチ   3
7  ビデオ  リモコン  10

【Aシート】(更新後)
3  機器名  オプション 値
4  テレビ  スイッチ   6
5  ビデオ  リモコン   5

マクロでの回答は、ソースも記述願います。
どうか宜しくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/02/01 21:17:44
  • 終了:2011/02/02 21:59:34

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692011/02/01 21:52:22

ポイント200pt

機器名とオプションがA列とB列に、値がC列にあるとした場合です。

Sub Macro()
    Dim i As Long
    Dim j As Long
    Dim lastRow As Long
    
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = lastRow To 5 Step -1
        For j = 4 To i - 1
            If Cells(i, "A").Value = Cells(j, "A").Value And _
                Cells(i, "B").Value = Cells(j, "B").Value Then
                Cells(j, "C").Value = Cells(j, "C").Value + Cells(i, "C").Value
                Rows(i).Delete
                Exit For
            End If
        Next j
    Next i
End Sub
id:anim130M

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

For i = lastRow To 5 Step -1 ← 「5」はどのように指定すればよろしいでしょうか?

2011/02/02 12:41:53

その他の回答(2件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692011/02/01 21:52:22ここでベストアンサー

ポイント200pt

機器名とオプションがA列とB列に、値がC列にあるとした場合です。

Sub Macro()
    Dim i As Long
    Dim j As Long
    Dim lastRow As Long
    
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = lastRow To 5 Step -1
        For j = 4 To i - 1
            If Cells(i, "A").Value = Cells(j, "A").Value And _
                Cells(i, "B").Value = Cells(j, "B").Value Then
                Cells(j, "C").Value = Cells(j, "C").Value + Cells(i, "C").Value
                Rows(i).Delete
                Exit For
            End If
        Next j
    Next i
End Sub
id:anim130M

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

For i = lastRow To 5 Step -1 ← 「5」はどのように指定すればよろしいでしょうか?

2011/02/02 12:41:53
id:a-kuma3 No.2

a-kuma3回答回数4558ベストアンサー獲得回数19032011/02/01 22:46:25

ポイント5pt

この程度なら、VBA を使わなくても、ピボットテーブルで一発。

データがこうだとしたら、

[f:id:a-kuma3:20110201224332j:image]

「挿入」→「ピボットテーブル」で、

[f:id:a-kuma3:20110201224330j:image]

という感じ (@ Excel 2007)。

id:anim130M

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

2011/02/02 21:57:44
id:kia_44 No.3

きあ回答回数396ベストアンサー獲得回数302011/02/01 22:52:54

ポイント5pt

VBAを用いない回答として。(ほかの列というのを無視します)

D列に、=A&B と入力。結果、D列にテレビスイッチという文字列が出来上がります。

これを、ピボットテーブル、もしくは集計を利用し、固有値(重複しない値)を取得します。

上記の固有値をE列に持つとして、F列に、=sumif([範囲を指定],[E列の該当セル],[C列])とすると、求めたい値が取得できます。

id:anim130M

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

2011/02/02 21:57:56
  • id:takejin
    >列は[機器名][オプション][値]の他にも複数あります。
    その、他の列の扱いはどうするのでしょうか。
    機器名&オプション をキーとして集計すると、そのほかの項目をどうまとめるのかがわからないので。
  • id:kia_44
    しまった。質問をよく読まないで回答してしまいました。
    VBAを使用しない方法としてかいたので開けないでください。
  • id:SALINGER
    このコードの意味は最終行(lastRow)から順に5行目まで、上に同じ項目があったら加算して削除ということをしています。
    質問では4行目からデータが入っていたので、5行目まで調べればいいということになります。
    例えば、6行目からデータが入っていた場合は、次ぎのように2箇所変更してください。
    For i = lastRow To 7 Step -1
    For j = 6 To i - 1

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

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

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

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