とっておきの「まかない飯」を教えて下さい!

以下のプログラムの最後から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件中1~10件)

>For i = 2 To lastRow


>の所で、A列の最終行を求めるのは分かるのですが、
>なぜ、それで、B列の最終行まで求められるのでしょうか?

回答:B列の最終行は求められません。A列の最終行を取得して、それを表の最終行とみなす、ということです。
従って、A列の最終行が8行、B列の最終行が9行の場合、
2から8行目まで処理するので、9行目は、無視されます。
①これは、A列を基準にしているからです。

②もし、B列を基準にするなら、
lastRow=Cells(Rows.Count, 2).End(xlUp).Row
にすればよいです。

③もし、A,B列のどちらかの列で決めるのではなくではなく、
A,B列の最終列の大きいほうを最終行にするようにしたいなら、
lastrow1=Cells(Rows.Count, 1).End(xlUp).Row
lastrow2=Cells(Rows.Count, 2).End(xlUp).Row
として、lastrow1とlastrow2の大きいほうを最終行とすればよいです。

①②③のどれを採用するかは、マクロの作成者が決めることです。
    • good
    • 0

No13 ③の誤記訂正です。



誤:A,B列の最終列の大きいほうを最終行にする       
正:A,B列の最終行の大きいほうを最終行にする

以上、訂正します。
    • good
    • 0

>②さっきマクロ①が使いたい処理だと言っていましたが、マクロ③ではどこが使いたい処理なのでしょうか?


もしかするとlastRowを入れる前が、使いたい処理で、
lastRowが入っている場合が、マクロ③という感じでしょうか?教えて頂けると幸いです。

回答:はい。そうなります。


>だとすると、マクロ③でlastRowが入る前のマクロも出来るのでしょうか?

回答:
マクロ③から
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
の2行を削除し、
Set Rng = Range(Cells(a, b), Cells(lastRow, c)) を
Set Rng = Range(Cells(a, b), Cells(8, c)) にするとそうなります。(ただし、最終行が8行目の場合)
この回答への補足あり
    • good
    • 0

>①合計の所で、D2セルに入っている関数は、=SUM(A1:B8)という感じでしょうか?



回答:D2セルに関数は入っていませんが、もし、関数で合計を求めるなら
=SUM(B2:B8)になります。
ただし、最終行が10行になれば、=SUM(B2:B10)になります。

>②さっきマクロ①が使いたい処理だと言っていましたが、マクロ③ではどこが使いたい処理なのでしょうか?もしかするとlastRowを入れる前が、使いたい処理で、lastRowが入っている場合が、マクロ③という感じでしょうか?教えて頂けると幸いです。だとすると、マクロ③でlastRowが入る前のマクロも出来るのでしょうか?

lastRow= Cells(Rows.Count, 1).End(xlUp).Row
これ以降で、lastRowを使用している箇所が、
lastRowを使いたい処理です。
    • good
    • 0

>なぜ、疑問①品名を基準にして考えたのでしょうか?



品名と数量があった場合、常識的には、品名を基準に行がきまると思います。
ただし、いや私は数量が基準だと考えるという人がいれば、それを尊重して数量を基準に行がきまるとしてもプログラム上は問題ありません。
常識的には腕時計を左手にはめるのが普通ですが、右手にはめても構いません。
    • good
    • 0

>マクロ③にも使いたい処理があるのでしょうか?



具体的には、以下の行でlastRowを使っています。
Set Rng = Range(Cells(a, b), Cells(lastRow, c))
この回答への補足あり
    • good
    • 0

>マクロ③にも使いたい処理があるのでしょうか?



質問の日本語の意味が、よくわかりませんが、
もともとの「使いたい処理」とは、
lastRow= Cells(Rows.Count,1).End(xlUp).Row
のようにして求めた、LastRow(=最終行)を使いたいという意味です。
マクロ③が
lastRow= Cells(Rows.Count,1).End(xlUp).Row
を使っているので、マクロ③自体が使いたいという意味です。
この回答への補足あり
    • good
    • 0

>マクロ②でなぜ、lastRow= Cells(Rows.Count,2).End(xlUp).Rowじゃなくて、lastRow= Cells(Rows.Count,1).End(xlUp).Rowを使っているのでしょうか?



lastRow= Cells(Rows.Count,2).End(xlUp).Row
はB列(=2列目)の最終行を求めています。

lastRow= Cells(Rows.Count,1).End(xlUp).Row
はA(=1列目)列の最終行を求めています。

この添付図の最終行は、A列(品名)を基準に考えるからです。
この回答への補足あり
    • good
    • 0

>マクロ②でなぜ、疑問①lastRow = Cells(Rows.Count, 1).End(xlUp).Rowを組み込んでいるのでしょうか?



回答:そのようにすると、日々最終行が変わっても、マクロを修正しないで済むからです。
マクロ①の状態で運用すると

最終行が10行目に変わった場合、
For i = 2 To 10
最終行が20行目に変わった場合、
For i = 2 To 20
のように変えなければいけません。
これをしないで済むようにするためです。


>疑問②Set rng=Range(Cells(a,b),Cells(lastRow,c))も使うとどうなるのでしょうか?

回答:これを使うのは、
https://oshiete.goo.ne.jp/qa/13950838.html
のNo2のようなケースです。

以下のマクロを実行すると、添付図のような罫線が引けます。
マクロ③
-----------------------------------------------
Sub sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
a = 1
b = 1
c = 2
Set Rng = Range(Cells(a, b), Cells(lastRow, c))
'①上部
Rng.Borders(xlEdgeTop).LineStyle = xlContinuous

'②左
Rng.Borders(xlEdgeLeft).LineStyle = xlContinuous

'③下部
Rng.Borders(xlEdgeBottom).LineStyle = xlContinuous

'④右
Rng.Borders(xlEdgeRight).LineStyle = xlContinuous

'⑤範囲内の縦線
Rng.Borders(xlInsideVertical).LineStyle = xlContinuous

'⑥範囲内の横線
Rng.Borders(xlInsideHorizontal).LineStyle = xlContinuous

End Sub
----------------------------------------------------------------
「excelVBAについて。」の回答画像6
この回答への補足あり
    • good
    • 0
この回答へのお礼

マクロ③にも使いたい処理があるのでしょうか?教えて頂けると幸いです。

お礼日時:2024/11/04 12:00

No4です。


画像の添付を忘れました。添付します。
「excelVBAについて。」の回答画像5
この回答への補足あり
    • good
    • 0

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

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


おすすめ情報

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