• 締切済み

マクロ超初心者です。

この画像のようなファイルで、りんごとみかんそれぞれの合計金額を求めるマクロの作り方を教えていただきたいです。

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.7

それじゃ、私も。 Dictionaryオブジェクトを使った例です。 D:E列に結果を吐き出します。 Sub Sample() Dim myDic As Object Dim myKey As Variant, myItem As Variant Dim i As Long Set myDic = CreateObject("Scripting.Dictionary") Columns("D:E").ClearContents For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row     If Not myDic.exists(Cells(i, 1).Value) Then         myDic.Add Cells(i, 1).Value, Cells(i, 2).Value     Else         myDic(Cells(i, 1).Value) = myDic(Cells(i, 1).Value) + Cells(i, 2).Value     End If Next myKey = myDic.Keys myItem = myDic.items For i = 0 To UBound(myKey)     Cells(i + 1, 4).Value = myKey(i)     Cells(i + 1, 5).Value = myItem(i) Next Set myDic = Nothing End Sub

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.6

#5です。 テスト用に埋め込んだ変なメッセージボックスが残ってるので 実際に使うときは消しといてください。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.5

なんだかプログラミングコンテストみたいになってるので。 果物の種類が最大10個とし、かつ、表がA1から始まってる もとのして。 Sub test() Dim K(10) As String Dim D(10) As Long Dim i, j, x As Integer Range("a1").Select For j = 1 To 10 K(j) = "" Next i = 1 Do x = 0 For j = 1 To 10 If Selection.Value = K(j) Then D(j) = D(j) + Selection.Offset(, 1).Value x = 1 End If Next If x = 0 Then K(i) = Selection.Value D(i) = Selection.Offset(, 1).Value MsgBox CStr(i) & K(i) & CStr(D(i)) i = i + 1 End If Selection.Offset(1).Select Loop Until Selection.Value = "" Selection.Offset(1).Select For j = 1 To 10 If D(j) = 0 Then Exit Sub Selection.Offset(j).Value = K(j) Selection.Offset(j, 1).Value = D(j) Next End Sub 最終行の後ろに合計値を吐き出します。 果物の種類が増えたら「Dim」の数を、表の位置がずれたら Range()の位置を変えればオッケーの筈です。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

んじゃまぁ、同じくもうちょっと汎用にしてみましょうか ご相談で例示されてるのは、いきなり1行目からデータが記入されていたりとかあんまり実際じゃなさそうなので、その通りには出来なさそうなんですが。 sub macro2()  range("1:1").insert shift:=xlshiftdown  range("D:E").insert shift:=xlshifttoright  range("A1") = "head"  range("A:A").advancedfilter action:=xlfiltercopy, copytorange:=range("D1"), unique:=true  with range("E2:E" & range("D65536").end(xlup).row)   .formula = "=SUMIF(A:A,D2,B:B)"   .value = .value  end with  range("1:1").delete shift:=xlshiftup end sub

回答No.3

本来、マクロを使うまでもない分析の内容ではありますが。A 列に何種類のデータがあるのか不明な場合のコードの一例。 Option Explicit Sub WriteInSumif() Dim i As Long, m As Long, n As Long m = Cells(Rows.Count, "a").End(xlUp).Row  ' A 列の最下行の行番号 Columns("a").Insert  ' A 列の左に 1 列挿入 Range("a1:a" & m).Formula = "=countif(b$1:b1,b1)"  '挿入した列に数式を記入 For i = 1 To m   If Cells(i, "a").Value = 1 Then     n = n + 1  ' n の初期値は 0 だがこの行によりいきなり 1 になる     Cells(n, "e").Value = Cells(i, "b").Value   End If Next i Range("f1:f" & n).Formula = "=sumif(b$1:b$" & m & ",e1,c$1:c$" & m & ")" 'Columns("a").Delete  '挿入した列を数式ごと削除する場合は先頭の「'」を削除 End Sub

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

sub macro1()  range("D1:D2") = application.transpose(array("りんご","みかん"))  range("E1:E2").formula = "=SUMIF(A:A,D1,B:B)"  range("E1:E2").value = range("E1:E2").value end sub マクロでヤリタイときは、求めた結果を「具体的にどこにどのように結果として残したいのか」まで、キチンと考えて下さい。 たとえば回答したように「ここ番地のセルにこんな具合に記入する」とか、たとえば単に「メッセージボックスで結果がポンと出て」くればそれでいいのかとか。

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

誰でも最初は初心者なのは仕方ないですよね。 参考の一例です。 http://excelvba.pc-users.net/ こちらをみてできると思います。 わからなければ、わからない点を質問されたら良いと思います。