ここから本文です

VBA見習い中 質問です。 シート1のA列に商品名の種類がいくつかあります。B...

nob********さん

2020/5/3020:04:35

VBA見習い中
質問です。

シート1のA列に商品名の種類がいくつかあります。B列に容量、C列に金額が表示してあります。

A列の商品名ごとにシートを振り分けて、振り分けたシートのC列の合計金額をだしたいのです。下記プログラムコードを書いたのですが。振り分けはうまくいったのですが、合計金額がうまくいきません。わかる方にご教授願います。

Sub Test()
Dim i As Long
Dim lastrow As Long
Dim mysh As Worksheet
Dim myflg As Boolean
Dim myrow As Long
Dim mykey As String
Dim x As Long
Dim mxrow As Long
mxrow = Worksheets("Sheet1").Range("A1000").End(xlUp).Row
For x = mxrow To 1 Step -1
If Cells(x, 1).Value = "" Then
Cells(x, 1).EntireRow.Delete
End If
Next x
lastrow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To lastrow
For Each mysh In Worksheets
myflg = False
mykey = Worksheets("Sheet1").Range("A" & i).Value
If mysh.Name = mykey Then
myflg = True
mysh.Cells.Delete
Exit For
End If
Next mysh
If myflg = False Then
ActiveWorkbook.Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = mykey
End If
Worksheets("Sheet1").Range("A1:C1").Copy Worksheets(mykey).Range("A1")
Next i
For i = 2 To lastrow
mykey = Worksheets("Sheet1").Range("A" & i).Value
If mykey <> "" Then
myrow = Worksheets(mykey).Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Sheet1").Range("A" & i & ":C" & i).Copy _
Worksheets(mykey).Range("A" & myrow & " :C" & myrow)
Worksheets(mykey).Range("C2").End(xlDown).Offset(1, 0) = _
"=sum(" & Range(Range("C2"), Range("C2").End(xlDown)).Address(False, False) & ")"

Else
MsgBox "Excel編集を終了します"
End If
Next i
End Sub

つたないコードで申し訳ありませんが、よろしくお願いします。

閲覧数:
21
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

ask********さん

2020/6/121:27:26

エラーになる箇所は削除して下記のようにしてください。


For i = 2 To lastrow
mykey = Worksheets("Sheet1").Range("A" & i).Value
If mykey <> "" Then
myrow = Worksheets(mykey).Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Sheet1").Range("A" & i & ":C" & i).Copy _
Worksheets(mykey).Range("A" & myrow & " :C" & myrow)
Else
MsgBox "Excel編集を終了します"
End If
Next i

'そして、以下のように続けてください。

With Worksheets("Sheet1").Columns(1)
For Each mysh In Worksheets

'Sheet1 A列に、myshの名前がある
If WorksheetFunction.CountIf(.Cells, mysh.Name) Then

'mysh の C列最終行を求める
i = mysh.Cells(Rows.Count, 3).End(xlUp).Row

'mysh の C列最終行+1 に 数式を入れる
mysh.Cells(i + 1, 3).Formula = "=sum(c2:c" & i & ")"
End If
Next mysh
End With
End Sub

質問した人からのコメント

2020/6/2 20:37:01

 ask****さんご返事ありがとうございます。

 すべてうまくいきました。コメントまでいれていただき、大変勉強になりました。
変数のmyshが重要だったんですね。たいへん感激しています。本当にありがとうございました。感謝、感謝です。
 

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

2020/5/3108:28:14

>うまくいきません。

の一言で終わられると何とも言えません(あと「エラーになります」だけも対応に困る表現です)。
意図した数値が出ない?エラーが出る?エラーならエラー文は何?
※エラー文が出るなら、ここで聞くよりもエラー文の一部を使って検索した方が早いです。

それと

>合計金額が

という事は

Worksheets(mykey).Range("C2").End(xlDown).Offset(1, 0) = _
"=sum(" & Range(Range("C2"), Range("C2").End(xlDown)).Address(False, False) & ")"

だけの問題ですか?それともそれ以外の部分の事でしょうか。
一ヶ月前に書いた自分のソースですら意味不明(自分の主観です笑)なのに、他の方のソースを読み解くのはしんどいです。

以上の要点を、質問本文へ補足するといいです(そちらの画面で、そのためのリンクがある筈です)。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる