- みんなの回答 (7)
- 専門家の回答
みんなの回答
- tsubuyuki
- ベストアンサー率45% (699/1545)
それじゃ、私も。 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)
#5です。 テスト用に埋め込んだ変なメッセージボックスが残ってるので 実際に使うときは消しといてください。
- FEX2053
- ベストアンサー率37% (7991/21371)
なんだかプログラミングコンテストみたいになってるので。 果物の種類が最大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)
んじゃまぁ、同じくもうちょっと汎用にしてみましょうか ご相談で例示されてるのは、いきなり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
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
本来、マクロを使うまでもない分析の内容ではありますが。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)
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)
誰でも最初は初心者なのは仕方ないですよね。 参考の一例です。 http://excelvba.pc-users.net/ こちらをみてできると思います。 わからなければ、わからない点を質問されたら良いと思います。