
いつもお世話になります
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
電子書籍プレゼントキャンペーン!
最大2万円超分当たる!マンガや小説が読める電子書籍サービス『Renta!』で利用できるギフトコードプレゼント実施中!
-
Excel 計算式を教えて下さい
Excel(エクセル)
-
VLOOKUP が機能しない、その原因は何 ?
Excel(エクセル)
-
エクセル、日々の集計整理方法。(再送です。)
Excel(エクセル)
-
4
何故割り算なのでしょうか?
Excel(エクセル)
-
5
該当日が期間内に当てはまる場合、開始日と終了日をExcel関数を用いて入力させたい
Excel(エクセル)
-
6
Excel 値を返す数式についてです
Excel(エクセル)
-
7
複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください)
Excel(エクセル)
-
8
指定した値以上の中で最小値を出したい
Excel(エクセル)
-
9
マクロか関数で処理したいのですが、教えて頂けませんか。
Excel(エクセル)
-
10
エクセルの参照について教えていただけますでしょうか
Excel(エクセル)
-
11
【EXCEL】=セル&セルが上手く表示できない。
Excel(エクセル)
-
12
一つのセルに複数の関数を入力する方法
Excel(エクセル)
-
13
エクセルで列の行の重複の検索方法を教えてください。
Excel(エクセル)
-
14
Excelで、半角スペースをTABに変換する
Excel(エクセル)
-
15
数列の数値補間
Excel(エクセル)
-
16
Excelシートのある番地の文字が一致したすべての行を別シートに転記する方法
Excel(エクセル)
-
17
処理年月が連続(指定年月~何ケ月間)している人のみ抽出をExcelのみで可能でしょうか
Excel(エクセル)
-
18
Excelで日数の関数がうまく出せません。
Excel(エクセル)
-
19
10円の誤差が分からない
Excel(エクセル)
-
20
2から100までの自然数について素数であるか判定したいです。シートのA列には自然数の値、B列には判定
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
EXCELで特定のセルに表示...
-
5
関数を使わずに一括で全角を半...
-
6
セル入力文字が、「右のセルに...
-
7
EXCELで2列を参照し、重複する...
-
8
あるセルに特定の文字列を打つ...
-
9
エクセルのセル内の余白の設定...
-
10
エクセルの2ページ目の作り方
-
11
Excel に貼り付けた図形が、保...
-
12
Excelで、昭和の西暦換算
-
13
グラフの横・縦項目が全部表示...
-
14
VBAで保存しないで閉じると空の...
-
15
EXCELで○ヶ月を○年○ヶ月に変換...
-
16
エクセルのセル内に全角数字を...
-
17
特定セルの内容を更新したら、...
-
18
エクセルで表示形式の時刻の「0...
-
19
EXCELの外部データ取得ができない
-
20
値が入っているときだけ計算結...
おすすめ情報
公式facebook
公式twitter
ご指導をありかとうございます
私なりに下記のようにしたのですが上手くできません
どこが悪いのでしょうか
再度ご指導をいただけると嬉しいです
シート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