Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


852 / 13645 ツリー ←次へ | 前へ→

【77952】重複処理、合計計算 VBA初心者 16/2/17(水) 4:18 質問[未読]
【77953】Re:重複処理、合計計算 β 16/2/17(水) 6:34 発言[未読]
【77954】Re:重複処理、合計計算 β 16/2/17(水) 8:09 発言[未読]
【77955】Re:重複処理、合計計算 β 16/2/17(水) 8:15 発言[未読]
【77956】Re:重複処理、合計計算 VBA初心者 16/2/17(水) 13:09 発言[未読]
【77957】Re:重複処理、合計計算 β 16/2/17(水) 14:41 発言[未読]
【77958】Re:重複処理、合計計算 VBA初心者 16/2/17(水) 14:59 お礼[未読]

【77952】重複処理、合計計算
質問  VBA初心者  - 16/2/17(水) 4:18 -

引用なし
パスワード
   質問させてもらいます。宜しくお願いします。

Aコラムに名前が入力されてあり(名前の数、名前は変化するとします。)、そしてBコラムに時間(時間、時間が入力してある行も変化するとします)が入力されてあるとします。



Aカラム  Bカラム
(名前と数字はそれぞれA2、B2から始まるとします)
佐藤    12
田熊    35
伊藤    23
本田    87
豊田    24
松田    23
松田    11
伊藤    34

このシート1に入力された情報を名前の重複を無くし、またそれと一緒に時間をそれぞれの名前にカウントしたいのです。下記が処理後にシート1に表示させたい情報です。


Aカラム  Bカラム
(名前と数字はそれぞれA2、B2から始まるとします)
佐藤   12
田熊   35
伊藤   57
本田   87
豊田   24
松田   34

宜しくお願いいたします。

【77953】Re:重複処理、合計計算
発言  β  - 16/2/17(水) 6:34 -

引用なし
パスワード
   ▼VBA初心者 さん:

トピの目的が、ループ処理の構文を身につけたい、勉強したいということなのか
このテーマを、自分でもわかる方法で実行したいのか、それがわかりませんが
後者で。

1.A列を D列にコピペ
2.D列を選択して データタブ 重複の削除 アップされた例なら D1:D6 に縮まります。
3.E1:E6を選択し  =SUMIF(A:A,D1,B:B) これをタイプして Alt/Enter。
4.D:E列を選択して Ctrl/c 。そのまま 形式を指定して【値】貼り付け。
5.そのまま Ctrl/x。
6.A1を選択して Ctrl/v。

この操作をマクロ記録し、それを(かなり)お化粧直ししたのが以下のコードです。

Sub Sample()
  Columns("A").Copy Range("D1")
  Columns("D").RemoveDuplicates Columns:=1, Header:=xlNo
  With Range("D1", Range("D" & Rows.Count).End(xlUp))
    .Offset(, 1).Formula = "=SUMIF(A:A,D1,B:B)"
    .Offset(, 1).Value = .Offset(, 1).Value
  End With
  Columns("D:E").Cut Range("A1")
End Sub

【77954】Re:重複処理、合計計算
発言  β  - 16/2/17(水) 8:09 -

引用なし
パスワード
   ▼VBA初心者 さん:

↑ 1行目からデータだと勘違いした手順とコードでした。
後ほど、2行目からのものに対する手順とコードを再掲します。

【77955】Re:重複処理、合計計算
発言  β  - 16/2/17(水) 8:15 -

引用なし
パスワード
   ▼VBA初心者 さん:
再掲します。

1.A列を D列にコピペ
2.D列を選択して データタブ 重複の削除(先頭がタイトル行にチェック)
  アップされた例なら D1:D7 に縮まります。
3.E1にB1のタイトル項目をコピー
3.E2:E7を選択し  =SUMIF(A:A,D2,B:B) これをタイプして Ctrl/Enter。
4.D:E列を選択して Ctrl/c 。そのまま 形式を指定して【値】貼り付け。
5.そのまま Ctrl/x。
6.A1を選択して Ctrl/v。


この操作をマクロ記録し、それを(かなり)お化粧直ししたのが以下のコードです。

Sub Sample()
  Columns("A").Copy Range("D1")
  Columns("D").RemoveDuplicates Columns:=1, Header:=xlNo
  Range("E1").Value = Range("B1").Value
  With Range("D2", Range("D" & Rows.Count).End(xlUp))
    .Offset(, 1).Formula = "=SUMIF(A:A,D2,B:B)"
    .Offset(, 1).Value = .Offset(, 1).Value
  End With
  Columns("D:E").Cut Range("A1")
End Sub



【77956】Re:重複処理、合計計算
発言  VBA初心者  - 16/2/17(水) 13:09 -

引用なし
パスワード
   ▼β さん:
>▼VBA初心者 さん:
> 再掲します。
>
> 1.A列を D列にコピペ
>2.D列を選択して データタブ 重複の削除(先頭がタイトル行にチェック)
>   アップされた例なら D1:D7 に縮まります。
> 3.E1にB1のタイトル項目をコピー
>3.E2:E7を選択し  =SUMIF(A:A,D2,B:B) これをタイプして Ctrl/Enter。
> 4.D:E列を選択して Ctrl/c 。そのまま 形式を指定して【値】貼り付け。
> 5.そのまま Ctrl/x。
> 6.A1を選択して Ctrl/v。
>
>
>この操作をマクロ記録し、それを(かなり)お化粧直ししたのが以下のコードです。
>
>Sub Sample()
>  Columns("A").Copy Range("D1")
>  Columns("D").RemoveDuplicates Columns:=1, Header:=xlNo
>  Range("E1").Value = Range("B1").Value
>  With Range("D2", Range("D" & Rows.Count).End(xlUp))
>    .Offset(, 1).Formula = "=SUMIF(A:A,D2,B:B)"
>    .Offset(, 1).Value = .Offset(, 1).Value
>  End With
>  Columns("D:E").Cut Range("A1")
> End Sub
>
>

早速の回答ありがとうございます。せっかくコードを教えてくださったのに最初の条件の追加でもうしわけございませんが、DとEコラムの重複も同時に無くしたいのですが、ご教授おねがいしてもよろしいでしょうか?DとEコラムも、Aコラムと同じ状態で両方ともRow2から始まります。

【77957】Re:重複処理、合計計算
発言  β  - 16/2/17(水) 14:41 -

引用なし
パスワード
   ▼VBA初心者 さん:

A列、B列のデータ処理はアップしたコードでOKですよね。
ただ、そこで作業列に使ったD列には、他のデータがありそうですから
コード内でD列を使っているところをたとえば X列に、E列を使っているところをY列に変更しましょう。

で、今度は、D列、E列に対して同じことをしたいのですよね。
であれば、まずは、A,B列を処理しているコードをコピーして、
このAにあたるところをDに、BにあたるところをEに直せば
処理できますよね?

もちろん、同じような処理が2つ書かれるわけで冗長なコードですけど
まずは、そのようにして対処されてはいかがでしょう。

その後、もし、同じようなこの2つの処理をループで回す1つのコードにまとめたいということがあれば
それはそれで、次のテーマとして対応されたらよろしいかと思います。

まずは自分でやってみましょう。

【77958】Re:重複処理、合計計算
お礼  VBA初心者  - 16/2/17(水) 14:59 -

引用なし
パスワード
   ▼β さん:
>▼VBA初心者 さん:
>
>A列、B列のデータ処理はアップしたコードでOKですよね。
>ただ、そこで作業列に使ったD列には、他のデータがありそうですから
>コード内でD列を使っているところをたとえば X列に、E列を使っているところをY列に変更しましょう。
>
>で、今度は、D列、E列に対して同じことをしたいのですよね。
>であれば、まずは、A,B列を処理しているコードをコピーして、
>このAにあたるところをDに、BにあたるところをEに直せば
>処理できますよね?
>
>もちろん、同じような処理が2つ書かれるわけで冗長なコードですけど
>まずは、そのようにして対処されてはいかがでしょう。
>
>その後、もし、同じようなこの2つの処理をループで回す1つのコードにまとめたいということがあれば
>それはそれで、次のテーマとして対応されたらよろしいかと思います。
>
>まずは自分でやってみましょう。

ありがとうございます。 自分の為にも頑張ってみます。m−ーm

852 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free