いつもお世話になります
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
ご指導いただきたいです
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
「うまくいきません」だけでは無く、具体的に「期待値」を書きましょう。
例えば「100のはずが67になっている」とか。最終行取得はxlUpが基本です。Nの最終セルの値なら「Cells(Rows.Count, "N").End(xlUp)」です。
又大量シートの処理はシート名ではなく、シート番号で。
ActiveSheetの番号は「ActiveSheet.Index」で取得できます。
Sheets("2")がActtiveならひとつ前のSheets("1")は
Sheets(ActiveSheet.Index-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
お手数かけました。
ありがとうございました。
No.4
- 回答日時:
No3です。
あのね、No3にも書いたように、シートの状態を示さずにシートの話をされてもわかりません。
67行目が決まっていて、それを取得したいのなら、
maxRow = 67
としておけばよい。
合計欄の位置が不定で、それがシートの最終行なら、「最終行の一つ前の行」を取得すればよい。
合計欄以降にも値が入っているのなら、合計欄を検索できる方法が必要になります。
「どのようなロジックで、何をしたいのか」をきちんと整理できなければ、「思った通りの結果を得る」ことはできません。
逆に言えば、きちんと論理的な説明ができる内容なら、大抵のことは実現できるということです。
ご指導ありがとうございます。
当初は数式の入った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
お手数かけました。
ありがとうございました。
No.3
- 回答日時:
No1です。
>上手くできません
「上手くできません」だけしか情報がないので、何をどうしたいのかも想像すらできません。
エラーは出ていないのでしょうから、「質問者様の想定と結果が異なる」というだけのことになります。
回答者にはシートの状態も、質問者様の想定も、結果もわかりませんので・・・
コードだけ見せられても、「その通りに実行しているのだな」ということしかわかりません。
とは言え・・
maxRowに一旦値を取得しているのなら、まず、その値を表示するなどして、思った値と一致しているかを確認してみてください。
End(xlDown)を利用する場合、ありそうな勘違いのケースとして
・指定セルより下が全て空白セルである場合
→ シートの最大行が取得されます
・指定セルの直下に空白セルがある場合
→ 次に値のあるセルの行が取得されます
・指定セルと目的のセルの間に空白セルがある場合
→ 空白セルの一つ手前の行が取得されます
のいずれかに該当していたりしませんか?
実際になさりたいことが不明ですが、文言通り「最終行を取得」したいのであれば、
End(xlUp)
を利用する方が確実と思います。
(こちらの場合は、(想定上の)スタート行を含めて全て空白の状態だと、スタート行より上の行を取得してしまう可能性がありますが)
※ 文章の意味がよく分からない場合は、手操作でEnd+↓やEnd+↑を行ってみれば、各種ケースでの挙動を確認することができます。
No.2
- 回答日時:
こんにちは、
>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)は目的セルまでの途中に空白セルがあると正しく取得できません
すでに的確と思われる回答もありますので参考程度で
No.1
- 回答日時:
こんにちは
ご質問の内容がちょっとよくわからないのですが・・・
変数maxRowには値がとれていて、それを利用してセル位置を指定したいのだけれど、どうしたらいいのかわからないってことでしょうか?
Range("N16") の16の部分を変数にしたいのなら
Range("N" & maxRow)
で指定できると思います。
あるいは、Cells(row, column) を利用して
Cells(maxRow, 14)
でも指定可能です。
(N列の列番号は14)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 列の最終行に新たに入力されたらその値を自動参照 1 2023/01/21 09:59
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excel 2019 のピボットテーブル...
-
Excelのセルを飛ばして入力する
-
【マクロ】エクセルにかいてあ...
-
Excelのオートフィル
-
Excel初心者です。 詳しい方、...
-
スプレッドシート クエリ関数 1...
-
MOS365 Excel Expert / Excel R...
-
西暦や和暦の表示をyyyymmdd表...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセルの数式で教えてください。
-
スプレッドシートの関数VLOOKUP...
-
エクセルでセルに「氏名を入力...
-
エクセルで指定した日付、店舗...
-
【Excel】セル内の時間帯が特定...
-
Excelのグラフ軸について
-
Excel 2019 は、SPILL機能があ...
-
関数を教えて下さい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報
ご指導をありかとうございます
私なりに下記のようにしたのですが上手くできません
どこが悪いのでしょうか
再度ご指導をいただけると嬉しいです
シート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
ご指導をありかとうございます
私なりに下記のようにしたのですが上手くできません
どこが悪いのでしょうか
再度ご指導をいただけると嬉しいです
シート2 の場合 (シート2~シート12 同様に)
シート1 N列の最終行の値を シート2 K4 に入れたい
Sub 最終行値0()
Sheets("2").Range("k4").Value = Sheets("1").Range("N4").End(xlDown).Value
End Sub
私なりに原因がわかりました
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