アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります
OSは、win11 エクセルは、office365 です

シートが、1~12 あり月のシートです

2~12のシートで前月のシートの最終行の値を取得したい


2 のシートの場合
2  のシート $K$4 = 1  のシートの N 列最終行の値(参考コードでは:16)

12 のシーートの場合
12 のシート $K$4 = 11 のシートの N 列最終行の値

参考
Sub 最終行値()
Sheets("2").Range("k4") = Sheets("1").Range("N16").Value
End Sub

上記の"N16"で、 16の部分が下記の maxRow なのですがやり方に困っています

'Dim maxRow As Long
'maxRow = Sheets("1").Range("N3").End(xlDown).Row

ご指導いただきたいです

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

  • どう思う?

    ご指導をありかとうございます
    私なりに下記のようにしたのですが上手くできません
    どこが悪いのでしょうか
    再度ご指導をいただけると嬉しいです

    シート2 の場合 (シート2~シート12 同様に)
    シート1 N列の最終行の値を シート2 K4 に入れたい

    Sub 最終行値2()
    Dim maxRow As Long
    maxRow = Sheets("1").Range("N4").End(xlDown).Row
    Sheets("2").Range("k4").Value = Sheets("1").Range("N" & maxRow).Value
    End Sub

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/12/15 15:40
  • どう思う?

    ご指導をありかとうございます
    私なりに下記のようにしたのですが上手くできません
    どこが悪いのでしょうか
    再度ご指導をいただけると嬉しいです

    シート2 の場合 (シート2~シート12 同様に)
    シート1 N列の最終行の値を シート2 K4 に入れたい

    Sub 最終行値0()
    Sheets("2").Range("k4").Value = Sheets("1").Range("N4").End(xlDown).Value
    End Sub

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/12/15 15:43
  • どう思う?

    私なりに原因がわかりました
     1 N列に数式がある
       数式を削除して、下記の2も削除すると動作してくれる
     2 N列の68行目に合計の数式がある
     ※今迄通りではN列に数式があり maxRowは  67です
    上記の 1 2 の数式を削除すると下記で動作してくれますが、
    N列の数式は削除したくない
    この場合の最善策をご指導をお願いできますか
    参考
    Sub 最終行値2()
    Dim maxRow As Long
    maxRow = Sheets("1").Range("N4").End(xlDown).Row
    Sheets("2").Range("k4").Value = Sheets("1").Range("N" & masxRow).Value
    End Sub

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/12/15 18:28

A 回答 (5件)

「うまくいきません」だけでは無く、具体的に「期待値」を書きましょう。

例えば「100のはずが67になっている」とか。
最終行取得はxlUpが基本です。Nの最終セルの値なら「Cells(Rows.Count, "N").End(xlUp)」です。
又大量シートの処理はシート名ではなく、シート番号で。
ActiveSheetの番号は「ActiveSheet.Index」で取得できます。
Sheets("2")がActtiveならひとつ前のSheets("1")は
Sheets(ActiveSheet.Index-1)です。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。

当初は数式の入ったN列で最終行に拘っていてダメで、
なんでうまくいかないのかと試行錯誤でした。

数式の入っていないI列に変えたら下記のようにうまく作動しました。

Sub 最終行値()
Dim maxRow As Long
maxRow = Sheets("1").Range("I3").End(xlDown).Row
Sheets("2").Range("k4").Value = Sheets("1").Range("N" & maxRow).Value
End Sub

お手数かけました。
ありがとうございました。

お礼日時:2022/12/16 10:15

No3です。



あのね、No3にも書いたように、シートの状態を示さずにシートの話をされてもわかりません。
67行目が決まっていて、それを取得したいのなら、
 maxRow = 67
としておけばよい。
合計欄の位置が不定で、それがシートの最終行なら、「最終行の一つ前の行」を取得すればよい。
合計欄以降にも値が入っているのなら、合計欄を検索できる方法が必要になります。

「どのようなロジックで、何をしたいのか」をきちんと整理できなければ、「思った通りの結果を得る」ことはできません。
逆に言えば、きちんと論理的な説明ができる内容なら、大抵のことは実現できるということです。
    • good
    • 1
この回答へのお礼

ご指導ありがとうございます。

当初は数式の入ったN列で最終行に拘っていてダメで、
なんでうまくいかないのかと試行錯誤でした。

数式の入っていないI列に変えたら下記のようにうまく作動しました。

Sub 最終行値()
Dim maxRow As Long
maxRow = Sheets("1").Range("I3").End(xlDown).Row
Sheets("2").Range("k4").Value = Sheets("1").Range("N" & maxRow).Value
End Sub

お手数かけました。
ありがとうございました。

お礼日時:2022/12/16 10:16

No1です。



>上手くできません
「上手くできません」だけしか情報がないので、何をどうしたいのかも想像すらできません。
エラーは出ていないのでしょうから、「質問者様の想定と結果が異なる」というだけのことになります。
回答者にはシートの状態も、質問者様の想定も、結果もわかりませんので・・・
コードだけ見せられても、「その通りに実行しているのだな」ということしかわかりません。

とは言え・・
maxRowに一旦値を取得しているのなら、まず、その値を表示するなどして、思った値と一致しているかを確認してみてください。

End(xlDown)を利用する場合、ありそうな勘違いのケースとして
・指定セルより下が全て空白セルである場合
 → シートの最大行が取得されます
・指定セルの直下に空白セルがある場合
 → 次に値のあるセルの行が取得されます
・指定セルと目的のセルの間に空白セルがある場合
 → 空白セルの一つ手前の行が取得されます
のいずれかに該当していたりしませんか?

実際になさりたいことが不明ですが、文言通り「最終行を取得」したいのであれば、
 End(xlUp)
を利用する方が確実と思います。
(こちらの場合は、(想定上の)スタート行を含めて全て空白の状態だと、スタート行より上の行を取得してしまう可能性がありますが)


※ 文章の意味がよく分からない場合は、手操作でEnd+↓やEnd+↑を行ってみれば、各種ケースでの挙動を確認することができます。
この回答への補足あり
    • good
    • 0

こんにちは、


>16の部分が下記の maxRow なのですが 
を無視した 蛇足です

最終行 ”値”を Sheets("2").Range("k4") =値 という考え方であるなら
Sheets("2").Range("k4").Value _
= Sheets("1").Range("N3").End(xlDown).Value
で良いと思います

行№を取得してRange("A" & maxRow) や Cells(maxRow,列№)とか
あるいはOffsetなどに使うケースの方が参考サイトなども多いと思いますし
用途も広いと思いますが
ループ処理や他の列に対して同様の処理を一度に行わないのであれば直接 取得する方法も覚えておくとよいと思います(オブジェクトとして扱う)

ちなみにEnd(xlDown)は目的セルまでの途中に空白セルがあると正しく取得できません

すでに的確と思われる回答もありますので参考程度で
この回答への補足あり
    • good
    • 0

こんにちは



ご質問の内容がちょっとよくわからないのですが・・・

変数maxRowには値がとれていて、それを利用してセル位置を指定したいのだけれど、どうしたらいいのかわからないってことでしょうか?

Range("N16") の16の部分を変数にしたいのなら
 Range("N" & maxRow)
で指定できると思います。
あるいは、Cells(row, column) を利用して
 Cells(maxRow, 14)
でも指定可能です。
(N列の列番号は14)
この回答への補足あり
    • good
    • 0

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

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