• 締切済み

VBAについて

下記のAシートをBシートの様にまとめたいのですが・・。  <Aシート>   A列       B列 1  名前      数量   2 リンゴジュース  2    3 オレンジジュース 3    4 牛乳       1 <Bシート>   A列       B列 1  名前      数量   2 ジュース     5    3 牛乳       1  Select Case NAMAE  Case "リンゴジュース","オレンジジュース"  ・・・・ こんな感じでしょうか? 宜しくお願い致します。

みんなの回答

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

参考に Sub Test()   Dim myDic As Object, v As Variant   Dim NAMAE As String, BUNRUI As String   Dim KAZU As Long, i As Long   With Worksheets("Aシート")     v = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 2).Value   End With   Set myDic = CreateObject("Scripting.Dictionary")   For i = 1 To UBound(v)     NAMAE = v(i, 1)     KAZU = v(i, 2)     Select Case True       Case NAMAE Like "*ジュース"         BUNRUI = "ジュース"       Case NAMAE Like "*牛乳"         BUNRUI = "牛乳"       Case Else         BUNRUI = NAMAE     End Select     myDic(BUNRUI) = myDic(BUNRUI) + KAZU   Next   With Worksheets("Bシート")     .Range("A1:B1").Value = Array("名前", "数量")     .Range("A2").Resize(myDic.Count, 2).Value = _     Application.Transpose(Array(myDic.Keys, myDic.Items))   End With   Set myDic = Nothing End Sub

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

VBA の前に、データに「種類」とか「カテゴリ」などの情報を持たせた 方が良いでしょう。こんな感じ。   A列       B列    C列 1 名前       種類    数量 2 リンゴジュース  ジュース  2 3 オレンジジュース ジュース  3 4 牛乳       牛乳    1 例えば、「コーヒー牛乳」は「ジュース」なのか「牛乳」なのか。 文字列によって判断するのが難しくなりますよね? 単純に「牛乳」という「文字列を含む」というロジックでは、コーヒー 牛乳は、「牛乳」として集計されてしまいます。 そこで、その判断ができる情報を設けておく必要があります。   # PC には何が「ジュース」で何が「牛乳」なのか判断できません。 既存のデータでなんとかして、という場面が無いわけではありませんが、 事前にデータを「扱いやすい形に加工しておく」という考え方を優先 させた方が後々幸せになれます。 なぜなら、SUMIF ワークシート関数やピボットテーブルの利用等、または ACCESS クエリの利用など解決の選択肢が広がるからです。 また、VBA で集計機能を実装するとしても、ソースはぐっと簡潔になります。 文字列をシコシコ解析して条件分岐させて集計・・・というロジックは ソースが複雑になりがちですし、想定外の文字列があった場合に弱いですよ。 (例外処理) ロジックを考えてる時間があれば、プリントアウトしたものを電卓で集計 できちゃったりしたら本末転倒ですから。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

なぜSelect Case の問題なのかわからない。もう少しVBAの経験をつむ 必要あるのでは。特に処理ロジックの確立。結果的に丸投げ質問になっている。 ーー 例データ Sheet1 A2:B7 名前 数量 リンゴジュース 2 オレンジジュース 3 牛乳 1 コーヒー牛乳 4 さわやか牛乳新岩井 6 ーーー Sheet2 A2:B4 名前 数量 ジュース 牛乳 ーー コード Sub test01() d1 = Worksheets("Sheet1").Range("A65536").End(xlUp).Row d2 = Worksheets("Sheet2").Range("A65536").End(xlUp).Row MsgBox d1 & " " & d2 For i = 3 To d2 MsgBox "*" & Worksheets("Sheet2").Cells(i, "A") & "*" x = WorksheetFunction.SumIf(Worksheets("Sheet1").Range("A3:A" & d1), "*" & Worksheets("Sheet2").Cells(i, "A") & "*", _ Worksheets("Sheet1").Range("B3:B" & d1)) Worksheets("Sheet2").Cells(i, "B") = x Next i End Sub 結果 Sheet2 A2:B4 名前 数量 ジュース 5 牛乳 11 ーー この上記(関数利用法)のロジックのほかにも 総なめ法 ソート法 検索法 など思いつくが。

回答No.2

MsgBox "ジュースの合計:" & WorksheetFunction.SumIf(Range("A2:A4"), "*ジュース", Range("B2:B4")) MsgBox "牛乳の合計:" & WorksheetFunction.SumIf(Range("A2:A4"), "牛乳", Range("B2:B4"))

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>Case "リンゴジュース","オレンジジュース" > ・・・・ >こんな感じでしょうか? ジュースの種類が2つなら良いのでは Select Case True   Case NAMAE Like "*ジュース"     MsgBox NAMAE & "はジュースに分類"   Case NAMAE = "牛乳"     MsgBox NAMAE & "は牛乳に分類" End Select

356504
質問者

補足

ご回答ありがとうございます。 数量はどのようにしたら良いでしょうか?