• ベストアンサー

エクセルVBARange3か所に合致する合計額4

画像が添付されていませんでしたので再度質問します。画像の上部が出力元データで下記が前回回答の結果の新規ブック出力画像です。上記は各列の内容を例的にしてあります。 行は3000を超えているので短くしてあります。(y)ロシクお願いします。

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.4

こんにちは Sub test6()   Dim dic1 As Object   Dim r   As Range   Dim v   As Variant   Dim i   As Long   Dim sName As String         On Error Resume Next   Set r = Application.InputBox("データ範囲を項目行から最終行まで選択して下さい。", , , , , , , 8)   If r Is Nothing Then Exit Sub   On Error GoTo 0    '  v = Sheets("入力").Range("D2").CurrentRegion.Resize(, 12).Value2   v = r.Value2      Set dic1 = CreateObject("Scripting.Dictionary")      For i = 1 To UBound(v)     sName = v(i, 10) & vbTab & v(i, 2) & vbTab & v(i, 4)     dic1(sName) = dic1(sName) + v(i, 12)   Next   Workbooks.Add   With Sheets("Sheet1").Range("B3").Resize(dic1.Count)     .Resize(, 2).Value = Application.Transpose(Array(dic1.Keys(), dic1.Items()))     .Offset(, 1).Resize(, 2).Insert     .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, _       TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _       Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _       :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True   End With End Sub こんな感じでしょうか?

nebikitorikai
質問者

お礼

完璧でした。長い間私のために時間を割いていただきありがとうございました。感謝です。

その他の回答 (3)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは 良く分からないので、標準モジュールにコード貼り付けて試して下さい。 元のデータ範囲も良く分からないので手作業で選択するようにしてあります。 Sub test5()   Dim dic1 As Object   Dim dic2 As Object   Dim dic3 As Object   Dim r   As Range   Dim v   As Variant   Dim i   As Long   Dim sName As String         On Error Resume Next   Set r = Application.InputBox("データ範囲を項目行から最終行まで選択して下さい。", , , , , , , 8)   If r Is Nothing Then Exit Sub   On Error GoTo 0    '  v = Sheets("入力").Range("D2").CurrentRegion.Resize(, 12).Value2   v = r.Value2      Set dic1 = CreateObject("Scripting.Dictionary")   Set dic2 = CreateObject("Scripting.Dictionary")   Set dic3 = CreateObject("Scripting.Dictionary")      For i = 1 To UBound(v)     sName = v(i, 10)     dic1(sName) = dic1(sName) + v(i, 12)     sName = v(i, 2)     dic2(sName) = dic2(sName) + v(i, 12)     sName = v(i, 4)     dic3(sName) = dic3(sName) + v(i, 12)   Next   Workbooks.Add   With Sheets("Sheet1").Range("B3").Resize(dic1.Count)     .Resize(, 2).Value = Application.Transpose(Array(dic1.Keys(), dic1.Items()))   End With   With Sheets("Sheet1").Range("D3").Resize(dic2.Count)     .Resize(, 2).Value = Application.Transpose(Array(dic2.Keys(), dic2.Items()))   End With   With Sheets("Sheet1").Range("F3").Resize(dic3.Count)     .Resize(, 2).Value = Application.Transpose(Array(dic3.Keys(), dic3.Items()))   End With End Sub

nebikitorikai
質問者

お礼

有難うございます、厄介者ですみません。

nebikitorikai
質問者

補足

やっぱり私の説明が足りないのですね自分ながら情けない。 確かにシート1に3列に出力できましたが本当に申し訳ありません。 Set dic1 = CreateObject("Scripting.Dictionary")から Set dic2 = CreateObject("Scripting.Dictionary") Set dic3 = CreateObject("Scripting.Dictionary") を使うのではなく Set dic1 = CreateObject("Scripting.Dictionary")このdic11個でdic3までの合計が出せたらいいなと思いまして! 例えばどこの会社のどの会員の商品の値段=合計金額というようなVBAなのですが....

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 しかも添付されている画像は文字が全て潰れてしまっていて、どこにどんなデータがあるのか全く分からない状態になっているのですから、その様な画像では添付しても意味がありません。  もっと文字が大きく写っている画像を添付する様にして下さい。

nebikitorikai
質問者

お礼

有難うございます。次回は大きな文字で添付したいと思います。 ご指摘有難うございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 それで質問は何ですか?  画像だけでは質問になりませんよ。  ちゃんと何をしたいのかという事を書いて下さい。 >前回回答の結果 が出ているというのに、何が問題なのですか?  そもそも、前回とは何の事なのですか?  ご質問文中には何が前回なのか一言も書かれていませんよ。

nebikitorikai
質問者

お礼

有難うございます、いつもお世話になっています。

nebikitorikai
質問者

補足

お世話になります、下記は新規ブックにシーツ1,2,3に出力に出力させているのですが、これを1つのシートに3個のマクロではなく1個のマクロで1つのシートに合計したいのです。 Private Sub CommandButton32_Click() Unload Me Sheets("入力").Select Set dic1 = CreateObject("Scripting.Dictionary")   Sheets("入力").Select Set dic2 = CreateObject("Scripting.Dictionary") Sheets("入力").Select Set dic3 = CreateObject("Scripting.Dictionary") v = Sheets("入力").Range("D2").CurrentRegion.Resize(, 12).Value2 For i = 1 To UBound(v) sName = v(i, 10) dic1(sName) = dic1(sName) + v(i, 12) Next v = Sheets("入力").Range("B2").CurrentRegion.Resize(, 12).Value2 For i = 1 To UBound(v) sName = v(i, 2) dic2(sName) = dic2(sName) + v(i, 12) Next v = Sheets("入力").Range("B2").CurrentRegion.Resize(, 12).Value2 For i = 1 To UBound(v) sName = v(i, 4) dic3(sName) = dic3(sName) + v(i, 12) Next Workbooks.Add With Sheets("sheet1").Range("B3").Resize(dic1.Count) .Resize(, 2).Value = Application.Transpose(Array(dic1.Keys(), dic1.Items())) End With With Sheets("sheet2").Range("B3").Resize(dic2.Count) .Resize(, 2).Value = Application.Transpose(Array(dic2.Keys(), dic2.Items())) End With With Sheets("sheet3").Range("B3").Resize(dic3.Count) .Resize(, 2).Value = Application.Transpose(Array(dic3.Keys(), dic3.Items())) End With End Sub これを下記の1つのマクロでsName=v(i,10)で1つの合計ですがこれを(i,10)と(i,2)の合計若しくは(i,10)と(i,2)と(i,4)の合計は出せないものでしょうか。 Private Sub CommandButton32_Click() Unload Me Sheets("入力").Select Set dic1 = CreateObject("Scripting.Dictionary") Sheets("入力").Select v = Sheets("入力").Range("D2").CurrentRegion.Resize(, 12).Value2 For i = 1 To UBound(v) sName = v(i, 10) dic1(sName) = dic1(sName) + v(i, 12) Next Workbooks.Add With Sheets("sheet1").Range("B3").Resize(dic1.Count) .Resize(, 2).Value = Application.Transpose(Array(dic1.Keys(), dic1.Items())) End With End Sub 宜しくお願いします。

関連するQ&A

  • QエクセルVBARange3か所に合致する合計額2

    お世話になります。 下記は質問内容の現在の出力マクロです Private Sub CommandButton32_Click() Unload Me Sheets("入力").Select Set dic1 = CreateObject("Scripting.Dictionary") Sheets("入力").Select Set dic2 = CreateObject("Scripting.Dictionary") Sheets("入力").Select Set dic3 = CreateObject("Scripting.Dictionary") v = Sheets("入力").Range("D2").CurrentRegion.Resize(, 12).Value2 For i = 1 To UBound(v) sName = v(i, 10) dic1(sName) = dic1(sName) + v(i, 12) Next v = Sheets("入力").Range("B2").CurrentRegion.Resize(, 12).Value2 For i = 1 To UBound(v) sName = v(i, 2) dic2(sName) = dic2(sName) + v(i, 12) Next v = Sheets("入力").Range("B2").CurrentRegion.Resize(, 12).Value2 For i = 1 To UBound(v) sName = v(i, 4) dic3(sName) = dic3(sName) + v(i, 12) Next Workbooks.Add With Sheets("sheet1").Range("B3").Resize(dic1.Count) .Resize(, 2).Value = Application.Transpose(Array(dic1.Keys(), dic1.Items())) End With With Sheets("sheet2").Range("B3").Resize(dic2.Count) .Resize(, 2).Value = Application.Transpose(Array(dic2.Keys(), dic2.Items())) End With With Sheets("sheet3").Range("B3").Resize(dic3.Count) .Resize(, 2).Value = Application.Transpose(Array(dic3.Keys(), dic3.Items())) End With End Sub 前回質問からCD等もろもろ手抜きで書いたため少し違っています。 伝わるか心配ですが書き込みますので宜しくお願いします。 例、B列の重複した会社名C列の重複した支店加入者名D列の重複した班名そしてG列には重複した変更可能な重複した商品があります。重複したものをまとめてそれぞれに合計を出してBooks.AddのSheet1(現在はSheet1~sheet3に出力)に出力したいのです。その他の列は自動で出るように関数が張り付けてありますが質問には関係ないと思いますので割愛します。 つたない質問で申し訳ありませんがわかる方がありましたら回答をお願いします。 尚、(現在はSheet1~sheet3に出力)これではsheet1~sheet3を行ったり来たりで効率が悪くて困っています。宜しくお願いします

  • 合計値が同じ組み合わせ

    下記の様な事ってEXCELの関数を使って、出力は可能でしょうか? 可能でしたら是非とも教えてください。 例)B列の1行目から10行目にそれぞれ数字が入力されていて、そこから4つのセルを抜き出し、合計値が30となる組み合せ全てを抽出する。

  • エクセルで条件指定した行の合計値の出しかた

    A列 B列 C列 100  1   1 200  2   2 300  3   3 400  4   4 500  4   5 600  2   2 700  3   1 800  4   4 下記の条件にあてはまる行のA列の合計値をそれぞれ出したい。 ・B列が2以上、C列が2以下である。 ・B列が2以上、C列が3以上5以下である。 上記のデータ例が不定期にブロック分けされていて、オートフィルタが使いずらい状況です。 各合計値を出力するセルを指定して、関数等で処理する方法があったら、教えて下さい。

  • EXCEL 2003で条件に合った合計を求めたい

    ______A ____B____ C_____D 1___111___ 1 ___10___ 60 2___111___ 2 ___10 3___222___ 2 ___10 4___333___ 1 ___10 5___333___ 2 ___10 6___333___ 3 ___10 7___444___ 1 ___10 8___444___ 3 ___10 9___555___ 1 ___10 Excel 2003環境において、上記A1:C9を対象に関数で下記条件を元に数式をD1に入力して値を求めたいです。 条件: A列の同じ値のセルを一つのグループとし、かつその中で、B列で1から始まる連番となっているグループを対象にC列のセルを合計する。 上記のセル範囲で条件に合う行は1,2,4,5,6,9行目で答えは60になります。 SUMPRODUCT関数やIF関数を併用してみましたが、うまく作ることができませんでした。 なんとか作業列やVBAを用いずに一つの数式で済ませたいです。 よろしくお願いします。

  • EXCEL合計について

    Excelの関数についての質問です。      A列   B列 1行目 1-2-3  1200 2行目 2-3-1  800 3行目 4-5-1  400 4行目 3-2-1  2000 5行目 1-3-2  500 6行目 答え→ ( 4500 ) 上記の表があり、B列6行目に条件に応じた計算結果を出したいです。 条件としては、1-2-3、2-3-1、3-1-2など、同じ数字で構成されているものであれば、順番が違っていても同じものとみなして合計します。 ※1-2-3は文字列です。 ※上記の表では、1-2-3でできる組合せの合計でB6に4500という答えを出してます。 思いつくままに関数を書いてみました。 =SUM(SUMIF(A1:A5,{"1-2-3","1-3-2","2-1-3","2-3-1","3-1-2","3-2-1"},B1:B5)) これでもできなくはないのですが、組合せをたくさん書くのがとても面倒で、 仮に、1-2-3-4 や、1-2-3-4-5 など組合せが多くなった場合はとても上記のやり方では対応できません。また、組合せは1桁だけでなく2桁(1-3-10)、3桁(5-80-100)も存在します。 前回こちらで以下の書き方をおしえていただいたのですが、 =SUMPRODUCT((ISNUMBER(FIND(TRIM(MID(SUBSTITUTE(A6,"-",REPT(" ",100)),1,10)),A$1:A$5))*ISNUMBER(FIND(TRIM(MID(SUBSTITUTE(A6,"-",REPT(" ",100)),100,10)),A$1:A$5))*ISNUMBER(FIND(TRIM(MID(SUBSTITUTE(A6,"-",REPT(" ",100)),200,10)),A$1:A$5))),B$1:B$5) こちらですと 1-12-3と1-2-3が同類とみなされて一緒に合計されてしまいます。 2桁以上でも対応できるやり方か、他にもっと効率の良い求め方があれば教えて下さい。

  • Excel で 複数条件の合計を出したい。。。

    どなたかご存知の方がいたら教えてください!!!(汗) 下記のようなデータがあります。 列は時系列でデータがどんどん増えていきます。 例)A列=1月  1行目=Xの時系列データ   B列=2月  2行目=Yの時系列データ   C列=3月  3行目=Xの時系列データ    ・      4行目=Zの時系列データ    ・   A列のXのデータの合計をしたい場合は、SUMIF関数を 使えばよいと思うのですが・・・ あるセルに○月と入力するとそのセルの日付を参照して、 その月のX条件だけを満たす合計を出す場合にはどのような関数を使えばよいのでしょうか? もしくは、どのように関数を組合せばよいのでしょうか? なかなかうまく説明できなかったのですが、 よろしくお願いします!!!

  • 【Excel】日時で合計額を出したい

    お世話になりおります。 調べてもわからず、ここでお力をお借りしたく、質問をさせていただきます。 日にちと時間ごとに合計金額を抽出したいと考えています。 画像はあくまで例ですが、 A・B列が元データで、E列の黄色い部分のように 元データの日にちと時間で数字を表示させたいです。 データは1ヶ月分あるので、数が多く困り果ててます・・・ E列、G列にはどのような関数をいれればいいでしょうか。 ご教授をお願いいたします。

  • エクセル2003 特定の列の値がTRUEの抽出

    エクセル2003を使用しています。 特定の列の値がtrueの行の特定の列の値のみ抽出したいです。 具体的には、B列に「TRUE」が入っている行のC列の値のみを羅列することができませんでしょうか。 添付した画像のようなエクセルを作成しており、 添付画像の中の2~6行の中から、10行以降のような形に出力させたいです。 お分かりになる方おられましたら、教えてください。

  • excelで縦1列の名簿を縦3列の名簿に反映

    excelでデータが縦に並んだ、名簿のマスターデータの ブックがあります。(添付画像上部参照) そのマスターデータから、別のexcelブックに 課名と氏名のみを抽出し、縦3列の名簿を 作成したいです。(添付画像下部参照) 今は課ごとにコピー&ペーストにて対応していますが、 マスターデータが変更されたら、縦3列の名簿の内容も 自動的に反映されるようにしたいです。 また、縦3列の名簿は、各課ごとに1行以上の 空白行を挿入して、課の区切りが 分かりやすいようにしたいです。 課の人数は流動的なので、課のセルの固定はできません。 何かいい方法はないでしょうか。 よろしくお願いします。 Excel2013

  • Excelの関数で教えていただきたく思います(Excel2003)。

    Excelの関数で教えていただきたく思います(Excel2003)。 添付画像のような表があります。 行番号が入っていませんが、「カウント」「締」の行が2行目です。 K列に「締」と言う文字が入っている行のL列にJ行の数値の引き算の結果を表示させたいのです。 添付画像の例で申し上げますと、K4とK2に「締」の文字が入っています。 従いまして、L4にJ4-J2の結果が表示されるようになります。 もし、K4が空欄でK7に「締」の文字が入っている場合はL4も空欄でかまわないのですが、その代わり、L7にJ7-J2の結果が表示されます。 わかりにくい場合や情報不足は逐一ご指摘いただければ、補足いたします。 よろしくお願い致します。