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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

解決済

1回答

1167閲覧

A列に項目が入力されていた場合のみ行の集計をする

lq_hm_165912

総合スコア18

VBA

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

0グッド

0クリップ

投稿2019/02/27 08:04

SUM関数を使用していましたが、項目の変動があり、また入力されている部分にのみ罫線を入れたいという要望があるため、集計をマクロにしたいです。
数値はA11セルから下に入力され、合計をC11セルに出力します。集計する値もD11~右へ変動します。

VBA

1Sub 合計値入力() 2 Application.ScreenUpdating = False 3 Application.Calculation = xlManual 4 5 Dim myLastCol As Long 6 Dim myLastRow As Long 7 8 'C列に合計 9 myLastCol = Range("A11").End(xlToRight).Column '----最終列 10 myLastRow = Range("C10").End(xlDown).Row '----最終行 11 12 Cells(11, "C").Resize(myLastRow + 1).FormulaR1C1 = "=SUM(RC[1]:RC[" & myLastCol + 1 & "])" 13 14End Sub

以前にこちらで質問があった文を自分用に変更したのですが、集計はされるものの、入力されていない部分も「0」になってしまいます。
If文やOffset、WorksheetFunction.Sumなどを使用すればいいと思ってはいますが、まだ理解が出来ておらず躓いております。
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

集計する値もD11~右へ変動します。

の意味するところが理解できていませんが、コードでやりたいことは、A11から下へ連続する行にだけ、C列に式を入れるってことですよね。

データ入力の有無をA列で判断してC列に式を入れたいならば、最終行を取得する基準はA列であるべきです。C列を基準にしても入力された数はわかりません。

また、Rowプロパティで得られるのは、そのセルの行番号です。変更後のセル範囲のサイズを指定するResizeメソッドへこの行番号を与えれば、データのある行数とは違いが出てしまいます。

データの無い行にも0が表示されるのは、式の結果が0であるためですので、余計なセルに式を入れなければ0の表示にもなりません。

ですので、式を入れるセル範囲の指定方法を変えるか、指定の方法を変えないならば'myLastRow'の値をデータのある行数となるよう調整する必要があります。

VBA

1'A11セルを基準にデータの一番下の行番号を得る 2myLastRow = Range("A11").End(xlDown).Row 3 4'C11セルから同じ行までのセル範囲の指定 5Range(Cells(11, "C"), Cells(myLastRow, "C")) 6'A11セルからの行数を使った指定 7Cells(11, "C").Resize(myLastRow - Range("A11").Row + 1, 1)

なお、Endプロパティは、基準としたセル以外に(指定した方向へ)データの入力がなければシートの最後になってしまうので、この使い方の場合、データがA11セルだけにしかない場合はエラーなどになるでしょう。

投稿2019/02/27 14:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lq_hm_165912

2019/02/28 00:04

Sub 合計値入力() Dim Sh1 As Worksheet Application.ScreenUpdating = False Application.Calculation = xlManual Set Sh1 = ThisWorkbook.Worksheets("お試し集計") With Sh1 Dim myLastCol As Long Dim myLastRow As Long 'C列に合計 'A11セルを基準にデータの一番下の行番号を得る myLastRow = Range("A11").End(xlDown).Row 'A11セルからの行数を使った指定 Cells(11, "C").Resize(myLastRow - Range("A11").Row + 1, 1).FormulaR1C1 = "=SUM(RC[1]:RC[" & myLastCol + 10 & "])" End With End Sub いただいた式を組み込んで思った通りの結果が得られました。 A11には確実に値が入るので大丈夫だと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問