「みんな教えて! 選手権!!」開催のお知らせ

以下のプログラムの最後から4行が分かりません。それと、使いたい処理とは何でしょうか?教えて頂けると幸いです。

「excelVBAについて。」の質問画像

質問者からの補足コメント

  • うーん・・・

    すみません。手書きで書きます。最後から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
    教えていただけると幸いです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2024/11/02 06:31
  • マクロ②でなぜ、疑問①lastRow = Cells(Rows.Count, 1).End(xlUp).Rowを組み込んでいるのでしょうか?後、疑問②Set rng=Range(Cells(a,b),Cells(lastRow,c))を使うとどうなるのでしょうか?教えて頂けると幸いです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2024/11/02 12:44
  • すみません。マクロ②でなぜ、疑問①lastRow = Cells(Rows.Count, 1).End(xlUp).Rowを組み込んでいるのでしょうか?後、疑問②Set rng=Range(Cells(a,b),Cells(lastRow,c))も使うとどうなるのでしょうか?教えて頂けると幸いです。
    こちらが正しい疑問です。すみません。

    No.5の回答に寄せられた補足コメントです。 補足日時:2024/11/02 12:50
  • 迅速な回答ありがとうございます!所で、マクロ②でなぜ、lastRow= Cells(Rows.Count,2).End(xlUp).Rowじゃなくて、lastRow= Cells(Rows.Count,1).End(xlUp).Rowを使っているのでしょうか?教えて頂けると幸いです。

    No.6の回答に寄せられた補足コメントです。 補足日時:2024/11/04 11:53
  • なぜ、疑問①品名を基準にして考えたのでしょうか?教えて頂けると幸いです。後、疑問②マクロ③で使いたい処理はあるのでしょうか?教えて頂けると幸いです。

    No.7の回答に寄せられた補足コメントです。 補足日時:2024/11/04 12:15
  • すみません。この前、マクロ①が使いたい処理になる。と言っていたのですが、マクロ③には使いたい処理はないのかと思って。教えて頂けると幸いです。

    No.8の回答に寄せられた補足コメントです。 補足日時:2024/11/04 12:20
  • つまり、①合計の所で、D2セルに入っている関数は、=SUM(A1:B8)という感じでしょうか?②さっきマクロ①が使いたい処理だと言っていましたが、マクロ③ではどこが使いたい処理なのでしょうか?もしかするとlastRowを入れる前が、使いたい処理で、lastRowが入っている場合が、マクロ③という感じでしょうか?教えて頂けると幸いです。だとすると、マクロ③でlastRowが入る前のマクロも出来るのでしょうか?

    No.9の回答に寄せられた補足コメントです。 補足日時:2024/11/04 12:46
  • すみません。マクロ②のlastRow = Cells(Rows.Count, 1).End(xlUp).Row

    gokei = 0
    For i = 2 To lastRow
    の所で、A列の最終行を求めるのは分かるのですが、なぜ、それで、B列の最終行まで求められるのでしょうか?教えて頂けると幸いです。

    No.12の回答に寄せられた補足コメントです。 補足日時:2024/11/04 19:15

A 回答 (14件中11~14件)

例えば、添付図のように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を使いたいので、
マクロ①が使いたい処理となります。
この回答への補足あり
    • good
    • 0

写真に写っているのは、プログラムじゃなくて日本語の文章っぽいですけど、間違えてませんか?右から1行目と2行目は読めますが、3行目以降は字が薄くて小さくて不鮮明で読めないし。


プログラムじゃなくて、日本語の文章の意味を知りたいのなら、意味を知りたい文章を質問文に記入しましょう。
    • good
    • 0

>以下のプログラムの最後から4行が分かりません。



最後からの4行が不明瞭なので、画像ではなく、テキストで、提示していただけませんでしょうか。
この回答への補足あり
    • good
    • 1

データの最後の行がわかったときに、それを利用して何らかの処理を行えるでしょう。

最終行がわからなければデータのないセルをプログラムが処理するとヤバイいときに使えそう。
if(データセルの最終行=true)then do○○。というような大雑把なイメージかな? 知らんけど。w
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A