プロが教える店舗&オフィスのセキュリティ対策術

タイトルのマクロを作りたいですた。

下記のマクロは

A列に

A1に1つしかデータが無い場合⇒動かない
A1に2以上データがある場合⇒動く

なぜでしょうか?
ご存じの方、教えて下さい。


【①A列にあるデータの1番下に文字列を追加:動く】
Sub 最終行()

Range("a1").End(xlDown).Offset(1, 0).Value = "A列データの1晩した"


End Sub

A 回答 (1件)

理由は、End(xlDown)で移動する先にデータがあるのかどうかと、


項目名(A1セル)が未入力でないことが前提だから。
https://www.moug.net/tech/exvba/0050088.html

質問文の一部では間違って書いたのでしょうが、A1セルが未入力
及びA2セル以降が空白セルの場合、End(xlDown)のキーボードの
動きである[Ctrl+↓]は最終行のA1048576セルに移動します。
ここからOffset(1, 0)で下のセルへと移動しようとしても、行がない
のですからエラーになります。
A1とA2に入力されていれば、Range("a1").End(xlDown)でA2セル
へと移動し、Offset(1, 0)でA3セルへと値を入力できるようになる
のでエラーにならないだけですから。

マクロだけで理解するより、既定の動作を理解することが先。
[Ctrl+↓]のキー動作を理解すれば、End(xlDown)を使わないで、
[Ctrl+↑]を使ったほうがOffset(1, 0)を生かせるのがわかるはず。

Sub 最終行()
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = "列の一番下"
End Sub

これを前回質問にある私のマクロに置き換えると、こうなります。
https://oshiete.goo.ne.jp/qa/13325229.html

Sub A列空白セルに本日の日付を入力()
 If Cells(1, 1).Value = "" Then
  Cells(1, 1).Select
  ActiveCell.Value = Date
 Else
  Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value=Date
 End If
End Sub
    • good
    • 0
この回答へのお礼

大変、分かりやすい説明ありがとうございます。マクロだけではなく、通常のハンド操作をした上で、マクロの方が理解できますね。

いつも、ありがとうございます。

お礼日時:2023/01/29 01:56

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