質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • VBA

    1897questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1623questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

エクセル マクロでC列に合計数が書式で出るようにしたい。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,827

marutoki

score 10

マクロ初心者です。
教えてください。

前提・実現したいこと

マクロでC列に合計数が書式で出るようにしたい。

発生している問題・エラーメッセージ

CSVデータをシートに取り込みました。
同一ブック内に集計表の原紙シートを置き、マクロ実行でコピー&集計されるようにしています。(添付画像)
For Each c In .Range("P1,X1,AA1")
のAA1の部分がCSVから取り込んだ合計数なんですが、当然、ただの数値なので、
集計値をいじっても反映されません・・・。

マクロの最後に、
'C列に合計
With .Cells(4, "C").Resize(.Rows.Count - 2)
.FormulaR1C1 = "=SUM(RC[1]:RC[" & dicE.Count & "])"
End With
としましたが、.Rowsで「参照が不正または不完全です。」と言われてしまいます。

Option Explicit

Private dstCol As Long

Sub 集計表改()

Dim c As Range, col As Long
Dim 集計表A1 As Variant
Dim d As Long
Dim v As Long

ActiveSheet.Copy Before:=Worksheets("CSV取り込み")

集計表A1 = ActiveSheet.Name
dstCol = 0
With Worksheets("CSV取り込み")
For Each c In .Range("P1,X1,AA1")
cpy c
Next c

For col = Columns("AN").Column To Columns("IA").Column Step 3
cpy .Cells(1, col)
Next col

End With

'表の色設定()
 Dim データ範囲 As Range
 Dim データ数 As Long
 Dim 行 As Long

 With Range("A4").CurrentRegion
 データ数 = .Rows.Count - 1
 Set データ範囲 = .Offset(2).Resize(データ数)
 End With
 データ範囲.Interior.ColorIndex = xlColorIndexNone
 For 行 = 2 To データ数 Step 3
  データ範囲.Rows(行).Interior.ColorIndex = 15
 Next
 Set データ範囲 = Nothing

With ActiveSheet.UsedRange
.EntireColumn.AutoFit '行の幅を自動調節
.Borders.LineStyle = xlContinuous  '枠線を引く
.HorizontalAlignment = xlCenter '数値を中央位置
With .Offset(3, 2).Resize(.Rows.Count - 3, .Columns.Count - 2)
.Font.Size = 16 '16point に大きくしています
.Font.Bold = True
End With
End With

 'inputboxでシート名の入力
   Dim ans As String  ' InputBoxの戻り
   Dim flg As Boolean  ' 数値かどうかの判定フラグ

    flg = False
   Do
    ans = InputBox("シート名を入力してください", "シート名入力")
    If StrPtr(ans) = 0 Then Exit Sub  ' キャンセル時に終了
    If IsNumeric(ans) Then flg = True
   Loop Until flg = True
    ActiveSheet.Name = ans
    'ボタンを削除
    Dim Obj As Object
    For Each Obj In ActiveSheet.Shapes
      Obj.Select
      Application.DisplayAlerts = False
      Obj.Delete
      Application.DisplayAlerts = True
    Next Obj

End Sub

Private Sub cpy(Target As Range)
Dim st As Worksheet
Dim srcCol As Long
Dim lastRow As Long
Dim srcCells As Range

Set st = Target.Parent
srcCol = Target.Column

lastRow = st.Cells(Rows.Count, srcCol).End(xlUp).Row
Set srcCells = Range(st.Cells(2, srcCol), st.Cells(lastRow, srcCol))
srcCells.Copy Cells(4, dstCol + 1) '全体がずれる
dstCol = dstCol + 1

'    'C列に合計
'    With .Cells(4, "C").Resize(.Rows.Count - 2)
'         .FormulaR1C1 = "=SUM(RC[1]:RC[" & dicE.Count & "])"
'    End With

End Sub

イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m6u

    2017/02/22 16:21

    dicE.Count には何が入っていますか?

    キャンセル

  • marutoki

    2017/02/22 16:42

    すみません、このコードを他から持ってきたため、DicE.Countはこのマクロとは関係ないです。では、今回の範囲のどこを適用するかは分かりません(^-^;)

    キャンセル

  • Zuishin

    2017/02/22 17:20

    これマクロでやらなきゃダメですか?各店舗の数を横一列に合計すればいいんですよね?

    キャンセル

  • marutoki

    2017/02/22 17:43

    実際3行目の各店合計は関数でやってます。が、4行目以降はマクロで一度数値をいれるので事前に関数を入れておくことが出来ないです。現状、C3をコピペでやってますが、今日修正し忘れて出荷漏れがありました。

    キャンセル

回答 3

+2

たぶん些細なミスでしょう。

    With .Cells(4, "C").Resize(.Rows.Count - 2)
         .FormulaR1C1 = "=SUM(RC[1]:RC[" & dicE.Count & "])"
    End WithWith st.Cells(4, "C").Resize(st.Rows.Count - 2)
         .FormulaR1C1 = "=SUM(RC[1]:RC[" & dicE.Count & "])"
    End With

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/22 16:41

    With は便利ですが、使い方によってはミスを誘発するので、
    With ~ から
    End With まではエディタ上でスクロールしない範囲に留めたほうが無難ですよ。

    キャンセル

  • 2017/02/22 16:51

    上の方にも書きましたが、すみません、このコードを他から持ってきたため、DicE.Countはこのマクロとは関係ないです。では、今回の範囲のどこを適用するか・・、が今一つ理解できてないです(^-^;)

    キャンセル

+1

RC[1] というのは現在のセル(この場合は C4) から右に 1 動いたセルのことです。

R は row で縦、C は column で横を表し、この場合は C に 1 がついているので横に 1 進むという指示になります。正の数なので右です。

ここが sum の起点として指示されています。終点は右に dicE.Count 進んだセルですが、これが未定義なためエラーが出ているのでしょう。dicE.Count を削除してそこに店舗の数を入れたら取りあえず参照が不正な問題は解決すると思います。

しかし他にも色々問題を抱えたマクロです。直すべきところは多いと思います。マクロの勉強を基礎からやり直して理解できるようになるか、詳しい人に腰を据えて見てもらう必要があるかも知れません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

0

皆様、いろいろとご指導いただきありがとうございました。
いろいろ調べて、
Sub 集計表改()の最後に以下コードを入れて解決しました。
今後ともお力添えよろしくお願いします。

Dim myLastCol As Long
Dim myLastRow As Long

    'C列に合計
    myLastCol = Range("A4").End(xlToRight).Column '----最終列
    myLastRow = Range("C4").End(xlDown).Row '----最終行

    Cells(4, "C").Resize(myLastRow + 1).FormulaR1C1 = "=SUM(RC[1]:RC[" & myLastCol + 1 & "])"

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    1897questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1623questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。