No.4
- 回答日時:
例えば、添付図のようにA列に品名、B列に金額の表があるとします。
マクロで、B列の金額の合計を求めて、その結果をD2のセルに格納する
とします。
その場合の、マクロは以下のようになります。
マクロ①
----------------------------------------------
Sub sample()
Dim gokei As Long
gokei = 0
For i = 2 To 8
gokei = gokei + Cells(i, 2).Value
Next
Cells(2, 4).Value = gokei
End Sub
--------------------------------------------
この場合、最終行は8行目なので
For i= 2 to 8 とすればよいわけですが、
この表は日々、追加されるので、行が増えると、その都度マクロを変える必要があります。ところが、その都度マクロを変えるのは大変なので、変えなくても済む方法があるなら、そのようにしたいと考えるはずです。
そこで、行が追加されても、自動的に、最終行を取得する方法があれば、それを利用するのが、最適な解決方法になるわけです。
もし、何らかの方法で、lastRowという変数に最終行の値が設定されるなら
for i = 2 to LastRow
とすれば、最終行が、日々更新されても、マクロを変える必要がなくなります。
そこで、最終行を取得する方法ですが、
Dim lastRow As long
lastRow= Cells(Rows.Count,1).End(xlUp).Row
とすると最終行がlastRowに設定されます。(このケースではLastRowに8が設定されます)
この2行を前のマクロに組み込むと、以下のようになります。
マクロ②
----------------------------------------------
Sub sample()
Dim gokei As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
gokei = 0
For i = 2 To lastRow
gokei = gokei + Cells(i, 2).Value
Next
Cells(2, 4).Value = gokei
End Sub
----------------------------------------------
こうすると、最終行が変わっても、マクロを修正することなく、合計金額が求められます。
lastRow= Cells(Rows.Count,1).End(xlUp).Row
は、最終行を求める定番の処理なので、ぜひ覚えておいてください。
これは、1列目に存在する空白でないセルの最終行を求めています。
もし、2列目に存在する空白でないセルの最終行を求めるなら
lastRow= Cells(Rows.Count,2).End(xlUp).Row
のようにします。
「使いたい処理」とは、この場合、マクロ①でこのlastRowを使いたいので、
マクロ①が使いたい処理となります。
No.3
- 回答日時:
写真に写っているのは、プログラムじゃなくて日本語の文章っぽいですけど、間違えてませんか?右から1行目と2行目は読めますが、3行目以降は字が薄くて小さくて不鮮明で読めないし。
プログラムじゃなくて、日本語の文章の意味を知りたいのなら、意味を知りたい文章を質問文に記入しましょう。
No.1
- 回答日時:
データの最後の行がわかったときに、それを利用して何らかの処理を行えるでしょう。
最終行がわからなければデータのないセルをプログラムが処理するとヤバイいときに使えそう。if(データセルの最終行=true)then do○○。というような大雑把なイメージかな? 知らんけど。w
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
excelVBAについて。
Excel(エクセル)
-
excelVBAについて。
Excel(エクセル)
-
excelVBAについて。
Excel(エクセル)
-
-
4
excelVBAについて。
Excel(エクセル)
-
5
エクセルマクロについて教えて下さい。
Excel(エクセル)
-
6
excelVBAについて。
Excel(エクセル)
-
7
excelVBAについて。
Excel(エクセル)
-
8
excelVBAについて。
Excel(エクセル)
-
9
excelVBAについて。
Excel(エクセル)
-
10
実務の処理について。
Excel(エクセル)
-
11
excelVBAについて。
Excel(エクセル)
-
12
【マクロ】メッセージボックスにて、キャンセルをクリックしたら、マクロ終了。エクセルへ戻すには
Excel(エクセル)
-
13
エクセル初心者です 用語とか良く分からないので簡単に説明していただけると幸いです 表を作っているので
Excel(エクセル)
-
14
excelVBAについて。
Excel(エクセル)
-
15
excelVBAについて。
Excel(エクセル)
-
16
ファイルパスについて。
Excel(エクセル)
-
17
エクセル初心者です 用語等まだ良く分からないので簡単に説明していただけると幸いです タブの挿入、図形
Excel(エクセル)
-
18
【マクロ】複数の日付データをYYYY/MM/DDに読替えて、別ブックへ転記したい
Excel(エクセル)
-
19
Excelで合計を求めたいです
Excel(エクセル)
-
20
excelVBAについて。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【画像あり】オートフィルター...
-
他のシートの検索
-
Office2021のエクセルで米国株...
-
vba テキストボックスとリフト...
-
【マクロ】元データと同じお客...
-
【マクロ】【相談】Excelブック...
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
エクセルシートの見出しの文字...
-
【関数】3つのセルの中で最新...
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
【マクロ】【画像あり】❶ブック...
-
【マクロ】【画像あり】4つの...
-
Excelで4択問題を作成したい
-
【関数】=EXACT(a1,b1) a1とb1...
-
エクセルの複雑なシフト表から...
-
UNIQUE関数の代用
-
【関数】同じ関数なのに、エラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報
すみません。手書きで書きます。最後から4行は、
この変数を使う場合、サンプルの2,3行目をコピーして、使いたい処理よりも上の行へペーストしてください。そのあと、たとえば、「Set rng=Range(Cells(a,b),Cells(lastRow,c))」のようにセル範囲の終点セルの行として指定したり、繰り返し処理で「For i = 1 To lastRow」とループの終点に指定したりすると便利です。ちなみに、プログラム内容は、以下の通りです。
sub sample088( )
Dim lastRow As long
lastRow= Cells(Rows.Count,1).End(xlUp).Row
MsgBox lastRow
End sub
教えていただけると幸いです。
マクロ②でなぜ、疑問①lastRow = Cells(Rows.Count, 1).End(xlUp).Rowを組み込んでいるのでしょうか?後、疑問②Set rng=Range(Cells(a,b),Cells(lastRow,c))を使うとどうなるのでしょうか?教えて頂けると幸いです。
すみません。マクロ②でなぜ、疑問①lastRow = Cells(Rows.Count, 1).End(xlUp).Rowを組み込んでいるのでしょうか?後、疑問②Set rng=Range(Cells(a,b),Cells(lastRow,c))も使うとどうなるのでしょうか?教えて頂けると幸いです。
こちらが正しい疑問です。すみません。
迅速な回答ありがとうございます!所で、マクロ②でなぜ、lastRow= Cells(Rows.Count,2).End(xlUp).Rowじゃなくて、lastRow= Cells(Rows.Count,1).End(xlUp).Rowを使っているのでしょうか?教えて頂けると幸いです。
なぜ、疑問①品名を基準にして考えたのでしょうか?教えて頂けると幸いです。後、疑問②マクロ③で使いたい処理はあるのでしょうか?教えて頂けると幸いです。
すみません。この前、マクロ①が使いたい処理になる。と言っていたのですが、マクロ③には使いたい処理はないのかと思って。教えて頂けると幸いです。
つまり、①合計の所で、D2セルに入っている関数は、=SUM(A1:B8)という感じでしょうか?②さっきマクロ①が使いたい処理だと言っていましたが、マクロ③ではどこが使いたい処理なのでしょうか?もしかするとlastRowを入れる前が、使いたい処理で、lastRowが入っている場合が、マクロ③という感じでしょうか?教えて頂けると幸いです。だとすると、マクロ③でlastRowが入る前のマクロも出来るのでしょうか?
すみません。マクロ②のlastRow = Cells(Rows.Count, 1).End(xlUp).Row
gokei = 0
For i = 2 To lastRow
の所で、A列の最終行を求めるのは分かるのですが、なぜ、それで、B列の最終行まで求められるのでしょうか?教えて頂けると幸いです。