Excel VBA質問箱 IV

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

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


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

【76727】集計について ビギナー 15/3/5(木) 14:28 質問[未読]
【76728】Re:集計について β 15/3/5(木) 14:53 発言[未読]
【76740】Re:集計について ビギナー 15/3/6(金) 20:43 質問[未読]
【76741】Re:集計について マナ 15/3/6(金) 22:58 発言[未読]
【76742】Re:集計について ビギナー 15/3/7(土) 6:13 質問[未読]
【76743】Re:集計について マナ 15/3/7(土) 9:35 発言[未読]
【76747】Re:集計について マナ 15/3/7(土) 10:35 発言[未読]
【76748】Re:集計について ビギナー 15/3/7(土) 21:16 お礼[未読]
【76744】Re:集計について β 15/3/7(土) 9:47 発言[未読]
【76745】Re:集計について β 15/3/7(土) 9:59 発言[未読]
【76746】Re:集計について β 15/3/7(土) 10:09 発言[未読]
【76749】Re:集計について ビギナー 15/3/7(土) 21:19 お礼[未読]
【76755】Re:集計について ビギナー 15/3/9(月) 21:22 質問[未読]
【76756】Re:集計について β 15/3/9(月) 22:11 発言[未読]
【76757】Re:集計について ビギナー 15/3/9(月) 22:28 発言[未読]
【76758】Re:集計について β 15/3/9(月) 22:53 発言[未読]
【76759】Re:集計について β 15/3/10(火) 8:52 発言[未読]
【76770】Re:集計について ビギナー 15/3/10(火) 22:14 お礼[未読]
【76729】Re:集計について β 15/3/5(木) 16:52 発言[未読]
【76730】Re:集計について ビギナー 15/3/5(木) 19:11 お礼[未読]
【76760】Re:集計について CatHand 15/3/10(火) 10:06 発言[未読]

【76727】集計について
質問  ビギナー  - 15/3/5(木) 14:28 -

引用なし
パスワード
   集計に関する質問です。

シート1
A列に東京、神奈川、沖縄などの都道府県がランダム入っており(同じ都道府県のダブりもあります)、
B列にはそのA列に対応した数字が入っております。

シート2にシート1の各都道府県ごとの集計を行うマクロを作りたいと思っております。
A列には各都道府県を持ってきて(集計なのでこの際はダブりはなくなる形です)、
B列にはシート1の各都道府県ごとの合計数を集計していくようにしたいと考えております。

※説明が下手で申し訳ありません。

初歩的な質問で申し訳ございませんが、よろしくお願い致します。

【76728】Re:集計について
発言  β  - 15/3/5(木) 14:53 -

引用なし
パスワード
   ▼ビギナー さん:

以下のような操作をして、それをマクロ記録してみたらいかがでしょう。
出来上がったもので、領域固定の部分を変数化する等の手を入れれば
立派なマクロになると思います。

・Sheet1を選択
・A列を選択
・Ctrl/c
・Sheet2を選択
・A1を選択
・Ctrl/v
・Escキー
・データタブの重複の削除を実行
・B1に =SUMIF(Sheet1!A:A,A1,Sheet1!B:B) を入力
・これを下にフィルコピー

【76729】Re:集計について
発言  β  - 15/3/5(木) 16:52 -

引用なし
パスワード
   ▼ビギナー さん:

・B1に =SUMIF(Sheet1!A:A,A1,Sheet1!B:B) を入力
・これを下にフィルコピー

この部分は

・B列を選択し、データタブの統合
・統合元にAheet1のA:B列を選択して指定
・左端にチェックし実行

こうしても、結果が得られますね。

【76730】Re:集計について
お礼  ビギナー  - 15/3/5(木) 19:11 -

引用なし
パスワード
   ビギナーです。
ご返信有り難うございました。

このような方法があるのですね!

こういう場合は、for ~ nextやifで条件を作るなどしてひたすらSheet1と2を行き来する方法しか、
思いつかず(それでもできなかったのですが・・・)でした。

とても勉強になりました。
明日実際に作ってみようと思います!

【76740】Re:集計について
質問  ビギナー  - 15/3/6(金) 20:43 -

引用なし
パスワード
   すみません。

追加で質問があります。
条件に変化があり、
C列に「大人」「子供」「その他」という項目が追加されたとします。
そのためA列はひとつの都道府県ごとにセルを3つ使い、B列にはC列の「大人」「子供」「その他」のそれぞれに対応する数値が入るようになります。

そして、Sheet2は子供の合計数(数はB列からもってきます)だけを集計したいとします。

その場合最後は下記の指示のsumifをsumifsにし、
条件の一つに「子供」も追加することで対応できると考えました。
=SUMIFS(Sheet1B列、Sheet2A列、Sheet2A1,Sheet1C列、Sheet1C列”子供”)としたのですが、
"子供"部分にデバックが発生しました。そのため、代わりにC2にしたらマクロは動いたのですが、
集計は正確にできておりませんでした。

どこかに間違いがあると思うのですが、
いかがでしょうか。

質問がばかりで申し訳ございませんが、よろしくお願い致します。


>・Sheet1を選択
>・A列を選択
>・Ctrl/c
>・Sheet2を選択
>・A1を選択
>・Ctrl/v
>・Escキー
> ・データタブの重複の削除を実行
>・B1に =SUMIF(Sheet1!A:A,A1,Sheet1!B:B) を入力
>・これを下にフィルコピー

【76741】Re:集計について
発言  マナ  - 15/3/6(金) 22:58 -

引用なし
パスワード
   > =SUMIFS(Sheet1B列、Sheet2A列、Sheet2A1,Sheet1C列、Sheet1C列”子供”)
>
>どこかに間違いがあると思うのですが、
>いかがでしょうか。

実際に動かしてみたコードを示していただけると解決が早いと思います。
(できれば他の部分も含めて)

【76742】Re:集計について
質問  ビギナー  - 15/3/7(土) 6:13 -

引用なし
パスワード
   ご連絡有り難うございます。
実際に動かしたマクロをはり付けます。
ただ、質問文に書かせて頂いたものと、実際の表は若干異なっています。
Sheet1のJ列に各都道府県名、D列に数値、C列に「大人」「子供」・・表記です。
また、1行目は項目名で数値が実際に入るのは2行目からです。

worksheets("Sheet1").select
Columns("J:J").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Columns("A:A").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Range("$A$1:$A$22717").RemoveDuplicates Columns:=1, Header:= _
        xlNo
    Sheets("Sheet2").Select
    Range("B2").Select
    ActiveCell.FormulaR1C1 = _
        "=SUMIFS(Sheet1!C[2],Sheet2!C[-1],Sheet2!RC[-1],Sheet1!C[1],Sheet1!R[3]C[1])"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B326")
    Range("B2:B326").Select
End Sub

上記のものでは、動きはしましたが、数値が正確ではなく、
sumifsの最後の部分 Sheet1!R[3]C[1] → Sheet1!”子供” にしたら動かなくなりました。 

お手数をおかけ致しますが、
よろしくお願い致します。


▼マナ さん:
>> =SUMIFS(Sheet1B列、Sheet2A列、Sheet2A1,Sheet1C列、Sheet1C列”子供”)
>>
>>どこかに間違いがあると思うのですが、
>>いかがでしょうか。
>
>実際に動かしてみたコードを示していただけると解決が早いと思います。
>(できれば他の部分も含めて)

【76743】Re:集計について
発言  マナ  - 15/3/7(土) 9:35 -

引用なし
パスワード
   まずは、マクロ記録の数式部分を修正してみてください。

>"=SUMIFS(Sheet1!C[2],Sheet2!C[-1],Sheet2!RC[-1],Sheet1!C[1],Sheet1!R[3]C[1])"



"=SUMIFS(Sheet1!C11,Sheet1!C10,Sheet2!RC1,Sheet1!C12,""子供"")"


""子供""の部分は重要ポイントです。
ht tp://www.relief.jp/itnote/archives/017752.php

【76744】Re:集計について
発言  β  - 15/3/7(土) 9:47 -

引用なし
パスワード
   ▼ビギナー さん:

おはようございます

まだ、よく読んでいませんが

RemoveDuplicate これは、実際のデータは1行目がタイトル行ですから
Header:=xlYes が正しいです。実際の処理に害はないですけど。

それと、

>Sheet1!R[3]C[1] → Sheet1!”子供” にしたら動かなくなりました。 

Sheet1!R[3]C[1] これは 「セル」です。
B2に記入しますので、実際には Sheet1!C5 ですけど。
Sheet1!”子供” こんなセルはないですよね?
シート上のSUMIFS で、ここをセルではなく "子供" という固定値で与える場合は、どんな数式になりますか?

【76745】Re:集計について
発言  β  - 15/3/7(土) 9:59 -

引用なし
パスワード
   ▼ビギナー さん:

マナさんや私のコメントを参考にして完成させてください。
今から外出するので、参考として。
ビギナーさんが最終的に完成されたコードと照らし合わせてください。

Sub 数式の埋め込みタイプ()
  Dim sh1 As Worksheet
  Dim sh2 As Worksheet
  
  Set sh1 = Sheets("Sheet1")
  Set sh2 = Sheets("Sheet2")
  
  sh2.Cells.Clear
  sh1.Columns("J").Copy sh2.Range("A1")
  sh2.Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
  sh2.Range("A2", sh2.Range("A" & Rows.Count).End(xlUp)).Offset(, 1).Formula = _
    "=SUMIFS(Sheet1!D:D,Sheet1!J:J,Sheet2!A2,Sheet1!C:C,""子供"")"

End Sub

【76746】Re:集計について
発言  β  - 15/3/7(土) 10:09 -

引用なし
パスワード
   ▼ビギナー さん:

参考にする場合、こちらのコードのほうが比較しやすいですね。

Sub 数式の埋め込みタイプ2()
  
  Sheets("Sheet2").Cells.Clear
  Sheets("Sheet1").Columns("J").Copy Sheets("Sheet2").Range("A1")
  Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
  Sheets("Sheet2").Range("A2", Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)).Offset(, 1).Formula = _
    "=SUMIFS(Sheet1!D:D,Sheet1!J:J,Sheet2!A2,Sheet1!C:C,""子供"")"

End Sub

【76747】Re:集計について
発言  マナ  - 15/3/7(土) 10:35 -

引用なし
パスワード
   >Sheet1のJ列に各都道府県名、D列に数値、C列に「大人」「子供」・・表記です。

いいかげんに読んでいました。
訂正です。

"=SUMIFS(Sheet1!C4,Sheet1!C10,Sheet2!RC1,Sheet1!C3,""子供"")"

ただし、私も、最終的には、βさんが書かれたような
R1C1形式ではなく、A1形式を使用することが多いです。

【76748】Re:集計について
お礼  ビギナー  - 15/3/7(土) 21:16 -

引用なし
パスワード
   マナ様

細かい点まで教えて下さり、有り難うございます。
現在、エクセルが使える状況ではないので、
試すことができないのですが、月曜日に試してみます。

色々と有り難うございました。


▼マナ さん:
>>Sheet1のJ列に各都道府県名、D列に数値、C列に「大人」「子供」・・表記です。
>
>いいかげんに読んでいました。
>訂正です。
>
>"=SUMIFS(Sheet1!C4,Sheet1!C10,Sheet2!RC1,Sheet1!C3,""子供"")"
>
>ただし、私も、最終的には、βさんが書かれたような
>R1C1形式ではなく、A1形式を使用することが多いです。

【76749】Re:集計について
お礼  ビギナー  - 15/3/7(土) 21:19 -

引用なし
パスワード
   β 様

ご連絡有り難うございます。
細かい点まで教えて下さり有り難うございます。

月曜日までエクセルが使用できないのですが、
月曜日になったら実際に動かしてみたいと思います。

お手数をおかけ致しました。
有り難うございます。


▼β さん:
>▼ビギナー さん:
>
>参考にする場合、こちらのコードのほうが比較しやすいですね。
>
>Sub 数式の埋め込みタイプ2()
>  
>  Sheets("Sheet2").Cells.Clear
>  Sheets("Sheet1").Columns("J").Copy Sheets("Sheet2").Range("A1")
>  Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
>  Sheets("Sheet2").Range("A2", Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)).Offset(, 1).Formula = _
>    "=SUMIFS(Sheet1!D:D,Sheet1!J:J,Sheet2!A2,Sheet1!C:C,""子供"")"
>
>End Sub

【76755】Re:集計について
質問  ビギナー  - 15/3/9(月) 21:22 -

引用なし
パスワード
   β 様

先日参考としてコードをご提示して下さり、
有り難うございました。

そのマクロを修正した場合で更に質問がございます。
質問、質問ばかりで申し訳ありません。

新たに実行したい点は下記です。
・Sheet1のD列の数値を集計しておりましたが、E列、F列も同様に集計し(e,f列にもそれぞれ数量が入っている)、Sheet2に入れていきたいと考えました。
そのため、for next で繰り返し処理をしようと考え、下記のようなコードを追加したのですが、
動かない状況です。


dim D as integer
QP = A2  ' sheet2 の集計結果を記載する列です。
For D = 4 To 8 ' 集計をするsheet1の列を表しています。4列目から8列目を集計予定。
  
  Sheets("Sheet1").Columns("J").Copy Sheets("Sheet2").Range("A1")
  Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
  Sheets("Sheet2").Range("QP", Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)).Offset(, 1).Formula = _
    "=SUMIFS(Sheet1!D:D,Sheet1!J:J,Sheet2!QP,Sheet1!C:C,""販売"")"
    
  Range("QP") = Range("QP").Offset(0, 1)
  
  Next D

※同じコード内での質問なので、
追加で質問させて頂きましたが、新規として投稿するべきでしたらすぐに修正致します。

何度も質問申し訳ございませんが、よろしくお願い致します。

>▼β さん:
>>▼ビギナー さん:
>>
>>参考にする場合、こちらのコードのほうが比較しやすいですね。
>>
>>Sub 数式の埋め込みタイプ2()
>>  
>>  Sheets("Sheet2").Cells.Clear
>>  Sheets("Sheet1").Columns("J").Copy Sheets("Sheet2").Range("A1")
>>  Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
>>  Sheets("Sheet2").Range("A2", Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)).Offset(, 1).Formula = _
>>    "=SUMIFS(Sheet1!D:D,Sheet1!J:J,Sheet2!A2,Sheet1!C:C,""子供"")"
>>
>>End Sub

【76756】Re:集計について
発言  β  - 15/3/9(月) 22:11 -

引用なし
パスワード
   ▼ビギナー さん:

こんばんは

新しく"販売"を抜き出して集計するD列〜H列の集計結果は
それぞれ、Sheet2のどこにセットするのですか?
あるいは、4列の集計をさらに集約してSheet2の、どこかの列に1本でセットするのですか?

【76757】Re:集計について
発言  ビギナー  - 15/3/9(月) 22:28 -

引用なし
パスワード
   β 様

別の列から抜き出した数量同士は集約しません。
sheet1のD列から抜き出した数量は、sheet2のB列に、E列から抜き出したものはC列に、という形でずらして入れていきたいと考えております。


▼β さん:
>▼ビギナー さん:
>
>こんばんは
>
>新しく"販売"を抜き出して集計するD列〜H列の集計結果は
>それぞれ、Sheet2のどこにセットするのですか?
>あるいは、4列の集計をさらに集約してSheet2の、どこかの列に1本でセットするのですか?

【76758】Re:集計について
発言  β  - 15/3/9(月) 22:53 -

引用なし
パスワード
   ▼ビギナー さん:

了解です。
今日は、年寄りとしては、おねむなので、回答は明日まで待ってください。

【76759】Re:集計について
発言  β  - 15/3/10(火) 8:52 -

引用なし
パスワード
   ▼ビギナー さん:

以下で試してみてください

Sub 数式の埋め込みタイプ3()
  
  Sheets("Sheet2").Cells.Clear
  Sheets("Sheet1").Columns("J").Copy Sheets("Sheet2").Range("A1")
  Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
  
  
  Sheets("Sheet2").Range("A2", Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)).Offset(, 1).Resize(, 4).Formula = _
    "=SUMIFS(Sheet1!D:D,Sheet1!$J:$J,Sheet2!$A2,Sheet1!$C:$C,""販売"")"

End Sub

【76760】Re:集計について
発言  CatHand  - 15/3/10(火) 10:06 -

引用なし
パスワード
   ▼ビギナー さん:

えーっと、この要件だとエクセルの標準機能のピボットテーブルの
方が柔軟に対応できそうですがダメなんですかねぇ?

*以下個人的なおもいです。
エクセルには便利で強力な標準機能が色々と実装されています。
それらで補えないところがVBAの出番だと思います。

【76770】Re:集計について
お礼  ビギナー  - 15/3/10(火) 22:14 -

引用なし
パスワード
   β さん

ご返信有り難うございます。
無事マクロは実行できました。

ただ、以前自分が作ったfor nextを使ったものが動かなかった原因や、
β さんが作って下さったコードも理解できていないところもあり、
そこらへんをハッキリさせていかないと今後似たようなタイプのマクロを作る際に、
活かせないので、そこは勉強していこうと思います。

色々と有り難うございました。
とても勉強になりました。


>▼ビギナー さん:
>
>以下で試してみてください
>
>Sub 数式の埋め込みタイプ3()
>  
>  Sheets("Sheet2").Cells.Clear
>  Sheets("Sheet1").Columns("J").Copy Sheets("Sheet2").Range("A1")
>  Sheets("Sheet2").Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
>  
>  
>  Sheets("Sheet2").Range("A2", Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp)).Offset(, 1).Resize(, 4).Formula = _
>    "=SUMIFS(Sheet1!D:D,Sheet1!$J:$J,Sheet2!$A2,Sheet1!$C:$C,""販売"")"
>
>End Sub

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