|
|
| Excel VBA Macro ・ セル制御 ・ FAQ |
|
入力後のセル移動方向を変えたいが?
|
|
|
|
Question 51.7 |
|
 |
 |
|
|
500連発(第1弾)222番の「入力後のセル移動方向を変える」を勉強中です。
データーの最下段の空白セルを選択し右にセルを移動したいが、下記ではデーターの最下段よりセルは移動しません。 どの行が悪いか教えて下さい。
VBAは超初心者です。宜しくお願いします。
Sub セル移動()
'
' セル移動 Macro
' セルを下・右に移動する
'
Dim 移動制御 As Variant
Dim 移動方向 As Variant
Dim 実行 As Integer
Dim メッセージ As String
Selection.End(xlDown).Select
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlDown
Application.MoveAfterReturn = True
Application.MoveAfterReturnDirection = xlToRight
Range("A5").Select
End Sub
|
|
Answer |
Copyright (C) 2002.1.30 永井善王 |
|
|
222番のサンプルは、セルに値を入力して[Enter(Return)]キーを押したときに、カーソルをどちらの方向に移動させるかを設定するためのマクロです。
マクロの構成としては、始めに、[Enter(Return)]キー押下によりアクティブセルの位置を移動させるために、MoveAfterReturnプロパティの値を、'True' に設定します。
次に、移動方向を MoveAfterReturnDirectionプロパティの値を、xlToLeft、xlToRight、xlUp、xlDown(左、右、上、下)のいずれかに設定します。
ご質問者は73才でマクロを勉強中とのこと、そのファイトに敬意を表し応援させていただきます。
超初心者さんと言うことですので、ご質問のマクロの各行にコメントを付けてみました。それを見ながら、一緒に考えてみましょう。
'-----------------------------------------------------------------------------------------
Sub セル移動_解説用()
10 Dim 移動制御 As Variant 'アクティブセル移動制御の状態を取得しておく変数
11 Dim 移動方向 As Variant 'セルを移動する方向の状態を取得しておく変数
12 Dim 実行 As Integer 'おためしボタンが押されたかどうかを記憶する変数
13 Dim メッセージ As String 'メッセージボックスのメッセージを格納する変数
20 Selection.End(xlDown).Select '選択されているセルを含む領域の下端行を選択する
30 Application.MoveAfterReturn = True 'Enterキー押下によりアクティブセルの位置を移動
40 Application.MoveAfterReturnDirection = xlDown '移動方向を下に設定する
50 Application.MoveAfterReturn = True
60 Application.MoveAfterReturnDirection = xlToRight '移動方向を右に設定する
70 Range("A5").Select 'A5セルを選択する(カーソル位置が変る)
End Sub
'-----------------------------------------------------------------------------------------
ちょっと分かりにくかったようですが 500連発のサンプルマクロには、タイトルが示すVBAの機能に直接関係するコードと、それを試しに動作させてみるコードとの両方が含まれています。
上記の10〜13行目と70行目は、お試し機能用のコードを見習われたかと思います。不要ですから削除しましょう。
20行目は、このマクロを実行する前に選択されているセル領域の下端行を選択します。例えば、A1:B20セルを選択しておいてから、このマクロを実行すると 20行目のセルが選択されるはずです。
「はずです」と言うのは、事前に選択された範囲に全くデータが入っていない場合などは、最下(Excel97以上は65536、95は16384)行目のセルが選択されるからです。
30〜60行目はコメントどおりですが、50行目は30行目とダブリますから不要です。 また、40行目は、直後に60行目で右へ切り替えるので無意味と思われます。
データーの最下段の空白セルを選択する方法
あなたの希望は「データの最下段の空白セル…」ということですから、データの下端行より、もう1行下になるかと思います。 もし、そのとおりならば、最後のセルを選択するコードと、1行下へずらすコードを組み合わせれば実現できます。
'-----------------------------------------------------------------------------------------
Sub 最後のセルを選択してカーソルを1行下へずらす()
Selection.SpecialCells(xlCellTypeLastCell).Select '最後のセルを選択する
Selection.Offset(1, 0).Select '1行下へオフセットする(ずらす)
End Sub
'-----------------------------------------------------------------------------------------
まとめ
以上を踏まえてマクロを組みなおすと、次のようになるかと思います。
'-----------------------------------------------------------------------------------------
Sub セル移動()
Selection.SpecialCells(xlCellTypeLastCell).Select '最後のセルを選択する
Selection.Offset(1, 0).Select '1行下へオフセットする(ずらす)
30 Application.MoveAfterReturn = True 'Enterキー押下によりアクティブセルの位置を移動
60 Application.MoveAfterReturnDirection = xlToRight '移動方向を右に設定する
End Sub
'-----------------------------------------------------------------------------------------
サンプルブックのダウンロードは ここをクリック
(500-1-222.xls 32KB) ※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。
|
|
|
|
| |
|
|