- ベストアンサー
VBAで最後に編集したデータにジャンプする方法
- VBAで最後に編集したデータがあるセルに常にカーソルを合わせる方法を紹介します。
- shift + F5ショートカットだと操作をするたびに異なる場所にジャンプしてしまう問題を解決します。
- 具体的なVBAコードを提供します。Excelでのデータ編集がスムーズになります。
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
kkkkkmです。 その後あれこれ試していたら、一度書式設定でたとえば罫線とかを設定して、その後その設定を解除しても使用済みとして認識されてしまいました。2行下の行に何もない場合、データ行の下2行を削除して試してみてください。 もしくは、先に紹介したページの最後の <S6> 書式付きセルを除外する の項目を参照してコードを変更してください。 No5のコードだと変更しやすいと思います。
その他の回答 (12)
- kkkkkm
- ベストアンサー率66% (1734/2604)
> データのある最後の行の端、「さしすせそ」の下に「た」を入れるとすると > 行が「た」で列は「そ」の次のセルにポインタが合っていて 捕捉に書かれているコードはそこのセルを選択するようになっています。「た」の右を選択状態にしたい場合私がNo10で回答した以下のコードにしてください。 Private Sub Workbook_Open() Dim BRow As Long Dim LColumn As Long With ActiveSheet BRow = .UsedRange.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row LColumn = .Cells(BRow, Columns.Count).End(xlToLeft).Column .Cells(BRow, LColumn + 1).Select End With End Sub 参考までに Workbook_OpenもAuto_Openもそのファイルを自身で開いた場合は、どちらも起動したときに実行されますが、他のファイルからマクロで該当ファイルを開いた場合、Auto_Openは実行されませんがWorkbook_Openは実行されます。ですので、他のファイルから開く可能性がある場合は、Workbook_Openを利用してください。
補足
たびたびの補足有難うございました。こちらも参考にさせていただきます。
- mt2008
- ベストアンサー率52% (885/1701)
何だか実際のデータが例と異なっているような気がします。 例や、今までの補足から以下の様なルールが有ると考えていました。 ・データが入っている行は連続していて途中に空行はない。 ・データはA列から1セルづつ順番に入る。データによっては使用する列数は異なるが、途中に空セルはない。 ・データはセルA1から入っている。 これ、合っていますか?
補足
mt2008 さん、ご質問の通りです。大変申し訳ないです。質問をもう少し細かくすべきでした。つきましてはいったん締め切らせていただき、再度質問をさせていただきたいともいます。
- mt2008
- ベストアンサー率52% (885/1701)
> このままGeneralとかWorkbookのエディタ欄にコードを貼り付けたらいいのでしょうか? > もしかして変数宣言とかもいりますか? 素人丸出しですいません。 標準モジュールを追加して、そこにコードを入れて下さい。 変数宣言は、しなくても良いのですが、今後もマクロを作ったり、他の言語も使う可能性が有るのでしたら、宣言するくせを付けておいた方が良いと思います。 Dim nRow As Long の、様に宣言します。 あと、シートの指定をしていませんので保存時にアクティブだったシートが対象になります。 もし特定のシートを対象にしたい場合は、シートも指定してください。
補足
しつこくてすいません。 Sub Auto_Open() Dim nRow As Long nRow = Range("A1").End(xlDown).Row nCol = Range("A" & nRow).End(xlToRight).Column + 1 Cells(nRow, nCol).Select End Sub これで合ってますか? なんか全然関係のないデータの真ん中辺りのセルにポインタが合っています。
- kkkkkm
- ベストアンサー率66% (1734/2604)
> 削除すればいけました!!! 何かしらのデータが認識されていたかもしれません。 よかったです。とりあえず念のために、先に示したページを参考にして、書式設定の残骸があった場合でも動作するように以下のようにしてみました。ただし、これでも式があればそこまで認識してしまいます。 Private Sub Workbook_Open() Dim BRow As Long Dim LColumn As Long With ActiveSheet BRow = .UsedRange.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row LColumn = .Cells(BRow, Columns.Count).End(xlToLeft).Column .Cells(BRow, LColumn + 1).Select End With End Sub No8への補足にたいして > こんな感じでいいのでしょうか? 示されたコードだと単に最終行と最終列だけを変数に代入しただけですのでEnd Withの次に ActiveSheet.Cells(MaxRow, MaxCol + 1).Select が必要です。
補足
何度も回答有難うございます。 Sub Auto_Open() With ActiveSheet.UsedRange MaxRow = .Rows(.Rows.Count).Row MaxCol = .Columns(.Columns.Count).Column End With ActiveSheet.Cells(MaxRow, MaxCol + 1).Select End Sub これでやっても上手くいきませんでした。 マクロ→マクロの表示→実行を押すと データのある最後の行の端、「さしすせそ」の下に「た」を入れるとすると 行が「た」で列は「そ」の次のセルにポインタが合っていて、ブックを開くパターンだと マクロが無くてもエクセルの仕様としてある単に最後の編集箇所にポインタが合っているだけです。
- kkkkkm
- ベストアンサー率66% (1734/2604)
kkkkkmです。 検索したら以下のページが見つかりました。こちらも参考にしてみてください。 http://www.niji.or.jp/home/toru/notes/8.html
補足
こんな感じでいいのでしょうか? とんちんかんだったらすいません。 Sub Auto_Open() With ActiveSheet.UsedRange MaxRow = .Rows(.Rows.Count).Row MaxCol = .Columns(.Columns.Count).Column End With End Sub
- mt2008
- ベストアンサー率52% (885/1701)
あぁ、データの右が不揃いなんですね。 では、こんな感じで。 例ではAuto_Openにしましたが、Workbook_Openでも構いません。 #変数宣言やシートの指定は省略しています。 Sub Auto_Open() nRow = Range("A1").End(xlDown).Row nCol = Range("A" & nRow).End(xlToRight).Column + 1 Cells(nRow, nCol).Select End Sub
補足
このままGeneralとかWorkbookのエディタ欄にコードを貼り付けたらいいのでしょうか? もしかして変数宣言とかもいりますか? 素人丸出しですいません。
- kkkkkm
- ベストアンサー率66% (1734/2604)
> 例で言えば「そ」の2つ下にポインタが合ってしまっています 以下が訂正した後のコードになります。こちらでは正常に右隣が選択されるのですが… Private Sub Workbook_Open() With ActiveSheet .Cells(.UsedRange.Row + .UsedRange.Rows.Count - 1, .UsedRange.Column + .UsedRange.Columns.Count).Select End With End Sub また、一度 Sub test() With ActiveSheet .UsedRange.Select End With End Sub これで試してみて選択された範囲を確認してみてください。「そ」の列以外でもその行より下に何かあれば(式でも)それも含めてしまいます。
補足
>これで試してみて選択された範囲を確認してみてください。 実行してみたら、問題となっている2つ下も選択されています。でもその前に1つ下と2つ下のセルを選択して「数式と値のクリア」もちゃんとしたのですが、それでもなぜか空白と思われる2つ下まで選択されています。
- kkkkkm
- ベストアンサー率66% (1734/2604)
No2NO3です。 もしデータの右端がそろっていない場合でしたら あ い う え お か き く け こ さ し す 上記のような状態で「す」の右を選択したい場合でしたら以下のような方法もあります。 (「す」より右には何もデータがない状態を想定) Private Sub Workbook_Open() Dim BRow As Long Dim LColumn As Long With ActiveSheet BRow = .UsedRange.Row + .UsedRange.Rows.Count - 1 LColumn = .Cells(BRow, Columns.Count).End(xlToLeft).Column .Cells(BRow, LColumn + 1).Select End With End Sub
補足
回答有難うございます。 実際のデータの右端はあまり揃っていません。だいぶでこぼこです。 ただこのコードですと 左からは2番目でデータのある行から2つ下のセルのポインタが合ってしまっています。kkkkkm さんの例ですと、ブックを開くと「し」の2つ下のセルにポインタです。
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です。 > このマクロを実行してみましたがなぜかC2にジャンプしてしまいました。 コード中の"A1"を、「あ」が入っているセル(データの左上のセル)に変更して見てください。
補足
「あ」が入っているセルがAの1番なんです (;^ω^)
- kkkkkm
- ベストアンサー率66% (1734/2604)
No2です。右隣に合わせるというのを忘れてました。 .UsedRange.Columns.Count - 1 ↓ .UsedRange.Columns.Count にしてください。
補足
訂正有難うございます。でもこのコードですとデータのある最後のセルから下に2つの所にポインタが位置しています。ブックを開いたとき、例で言えば「そ」の2つ下にポインタが合ってしまっています(もちろんその1つ下・2つ下の行に一切データは入っていません)。もし修正コードあればありがたいです。このままでも結構いい感じですが。
- 1
- 2
補足
削除すればいけました!!! 何かしらのデータが認識されていたかもしれません。