• 締切済み

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/17068)
回答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
質問者

補足

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

関連するQ&A

  • エクセルで表の相違確認をVBAでしたい。

    お世話になっております。 下記の様な表がシート1とシート2に有、 シート2がシート1と比較して、行が多かったり、または 数量だけが変わっていたり、行が減っていたり、 表の行数は100から200行くらいあるので、VBAでどこが 違うかをすぐ分かる様に確認したいと思っています。 下記の表はあくまでも例ですが、実際は同じNO・同じ品番・同じ品名・同じ数量で複数行あったりします。 どの様に記述していいか分からなく、ご教示下さいます様宜しくお願い致します。    記 A列  B列  C列   D列   E列    No  品番  品名   地区   数量  236  A6TET  みかん  市川   3本 248  A7TGR  りんご  松戸   5本 273  B9GKT  ぶどう  柏    14本 273  A8UFE  すいか  行徳   6本    381  C2ROF  いちご  平井   22本

  • VBA初心者です。

    VBA初心者です。 日付順に並べたいのですが、どのようにしたらいいのでしょうか。 【エクセル】日付順に別シートに並べるやり方を教えてください。 エクセルsheet1に下記の情報があります。 B(名前) C(記号) E~H(日付) 5 ばなな a 4/2 5/3 6/6 6 みかん b 4/8 5/7 6/6 7 りんご c 5/1 6/8 7/9 ・ ・ ・ ・ 下にどんどん続きます。 sheet2 (c.5)くらいから日付、名前、記号 4/2 ばなな a 4/8 みかん b 5/1 りんご c 5/3 ばなな a 5/7 みかん b 6/6 ばなな a 6/6 みかん b 6/8 りんご c 7/9 りんご c ・ ・ ・ 下に続きます。 このようにsheet2に日付順に並べつつ、横の情報もそのまま並べたいです。 (同じ日付はあります) sheet1で日付がたて1列であればできるのですが、 横にもたくさんある中からの抽出はどうしてもできませんでした。 よろしくお願いいたします。

  • Excel,VBA シートの自動作成、データ

    Sheet 1 に住所録 Sheet 2~50までに同じフォーマットで A  B  C~E F~H No. 名前 S~L S~L と並んでいてA4から名前 C~の列には各数量が50行ほど入力されています。 Sheet 2~50 までを名前ごとにまとめたSheet を自動で作成したいです。 Sheet1とSheet2~50の名前順は同じです。 例 Sheet51 シート名 Aさん    DEF列    SML 1行目1,2,3(Sheet2AさんのC~E数量) 2行目2,2,2(Sheet2AさんのF~G数量) 3行目2,2,2(Sheet3AさんのC~E数量) 4行目4,4,4(Sheet3AさんのF~G数量) 同じようにSheet 53 Bさん となるようにループする方法をご教授ください。 よろしくお願い致します。

  • エクセル 複数条件 VBA

    VBAと関数の両方を教えていただきたいです。 シート”DATA”に以下の入力フォームがあります。 A列には日付 B1には”りんご”、B2以降には数量 C1には”みかん”、C2以降には数量 D1には”なし”、D2以降には数量 シート”照会”に以下の照会画面があります。 B1には開始日、D1には終了日 A2には”りんご” A3には”みかん” A4には”なし” B2以降はそれぞれの開始日から終了日までの個数が入るようにしたいのです。 例えば、シート”DATA”に毎日10が入力されていて、シート”照会”のB1に1/1、D1に1/3と入力されたら30、B1はそのままでD1が1/10なら100と果物ごとに表示されるようにしたいのですが、どうすればよいでしょうか。 よろしくお願い致します。

  • Excel で別シート内の項目にフィットした値を元のシートに返すという関数

    Excel で別シート内の項目にフィットした値を 元のシートの指定したセルに返すという関数を教えてください。 【例】 Sheet1に下記のような値がある A1:バナナ B1:152 A2:牛乳 B2:200 A3:りんご B3:180 Sheet2のA1に【牛乳】と入力した際にB1へSheet1内のA列の値と フィットした場合のB列の値(この場合牛乳だから【200】)を返す というような関数を以前使ったことがあるのですが、 忘れてしまったため ご存知の方、教えて下さい。 よろしくお願いいたします。

  • データシートから他のシートへ抽出

    元データ:(2)データシート 抽出シート:(6)抽出シート (2)データシートには、    B     C    D    E    F    G・・・・・・P 4 (項目) (内容)  (数量) (単位) (単価)  (金額) (仕入先) 5 りんご   果物   1    個  100   100   A商店 6 みかん  果物   2    個  100   200   B商店 7 ジュース 飲料   3    本  100   300   A商店 8 牛乳    飲料   2    本  100   200   A商店                ・                ・                ・ とあります。  これを(6)抽出シートのA3セルに仕入先名を入れることで、 (6)抽出シート   A   B    C     D   E   F   G 3 A商店                               ・                ・ 21   (項目) (内容) (数量)(単位)(単価)(金額) 22   りんご  果物   1   個 100  100 23   ジュース 飲料   3   本 100  300 24    牛乳  飲料   2   本 100  200                ・                ・                ・ 上記の様にB22(項目)、C22(内容)、D22(数量)等を抽出したいのですが、VLOOKUPを使ってもりんごのみを何件も抽出したりで困ってます。 ちなみに(6)抽出シートはある程度の雛形が決まっています。 何かいい方法はありますでしょうか。 どうぞご教授宜しくお願い致します。 図が変になってしまってすいません。

  • エクセルVBAの貼付けについて

    エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With

  • VBAで、ある文字の列を他のシートにコピーしたい時

    名称   /数量 /種類 りんご /1 /食べ物  自動車 /2 /乗り物 a /3 /アルファベット バナナ /4 /食べ物 消防車 /6 /乗り物 b /5 /アルファベット 上記の様な表で種類の列を基準に、「食べ物」のある行だけ集めて別のシートにコピーして、「乗り物」のある行だけ集めて別のシートにするということはできますか? 下記のように考えてみましたが上手くいきませんでした。 質問内容が上手く説明ができないため 分かりづらいかもしれませんが、 もし、お分かりになりましたら教えてください。 ------------------------------ Sub test2() Dim i As Long For i = 2 To 7 Select Case Cells(i, 3).Value Case "食べ物" Rows(i).Select Selection.Copy Sheets("食べ物").Select Rows(i).Select ActiveSheet.Paste Case "乗り物" Rows(i).Select Selection.Copy Sheets("乗り物").Select Rows(i).Select ActiveSheet.Paste Case Else Rows(i).Select Selection.Copy Sheets("その他").Select Rows(i).Select ActiveSheet.Paste End Select Next End Sub

  • 【エクセル】リストと一致するデータを抽出し、文字に色をつけることは可能でしょうか?

    エクセルで作成したファイルの【シート1:表】に様々なデータを打ち込んでおり、【シート2:リスト】にはリスト一覧を入れています。 シート1の表で、リストと該当する文字列だけに色をつけることは可能でしょうか。表はこのような感じです。 【表】   A列    B列 1 りんご   apple 2 りんごを食べる eat an apple 3 みかん     orange 4 みかんを買う  get an orange 【リスト】   A列       B列 1 りんご     apple 2 みかん     orange このような表なのですが、例えば、1行目、3行目はリストと同じなので赤い文字で表示し、A2のセルの「りんごを食べる」の「りんご」とB2セルの「eat an apple」の「apple」、またA4セルの「みかんを買う」の「みかん」と「get an orange」の「orange」の文字列だけを赤字にするようなことは可能でしょうか。 少量のデータなら手作業で変更できるのですが、データが大量にあるため手作業では追いつかず困っています。どなたかご存知の方がいらっしゃいましたら、よろしくお願いいたします。

  • エクセル VLOOKUP うまくできない

    シート1のA列に りんご みかん いちご シート2のA列に名前、B列に金額 りんご 100 みかん 200 いちご 300 と入力しています。 シート2から同じ名前の金額を探し出し シート1のB列に入力したいのですが うまくいきません。 シート1のB列に =VLOOKUP(A1,シート2!$A$1:$B$3,2) とし、下までオートフィルしました。 しかしシート1の結果は りんご 300 みかん 200 いちご #N/A となります。 シート1にも、りんごが100としたいのですが どうすればいいでしょうか? よろしくお願いします。 (図はシート1です)

専門家に質問してみよう