質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

2006閲覧

Excel右カーソル移動の順番がセル結合時に変になる。

ad.sys.soleil

総合スコア28

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/09/30 02:14

編集2020/09/30 02:30

カーソル移動を右へ設定します。
この状態で、添付Excel画面にて1から順番に入力し4入力でWorksheet_SelectionChangeでカーソルを5へ飛ばしました。
その後に、5入力後エンターを押すと2へ飛んでしまう。6へ飛ぶのが正常。

VBA

1Private Sub Worksheet_SelectionChange(ByVal Target As Range) 2 Dim lRow As Long 3 Dim lMinCol As Long 4 Dim lMaxCol As Long 5 Dim MyRange As Range 6 lMinCol = Range("C1:F1").Column 7 lMaxCol = lMinCol + Range("C1:F1").Columns.Count - 1 8 If Target.Column <= lMaxCol Then 9 Exit Sub 10 End If 11 Cells(5, 3).Select 12End Sub

イメージ説明
試したこと。
結合セルを解除すると正常に6へ飛ぶ。
環境。
Windows10Pro(64bit)
Excel2010(V.14.0.6023.100)32ビット
気になること。
この様になるのは私の環境だけでしょうか。
何か対策はあるでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/09/30 04:18

私の環境(Office365)でも再現しました。 なんでしょうね、これ。
radames1000

2020/09/30 04:37

Tabキーでも同じ動きをしますね。Office2016で再現してます。
guest

回答4

0

解決済ですが、面白そうなテーマなので考えてみました。

ですが、
1)エンターキー押下で横移動
2)F2セルの次はCセルへ移動
以外の説明がないので、
他のセルの時はどうしたいか分かりませんが、
「C2:F2とC5:F5のセル範囲以外は選択させない。」
という条件をこちらで勝手に追加してで考えてみました。

ExcelVBA

1Private Sub Worksheet_SelectionChange(ByVal Target As Range) 2 Application.EnableEvents = False 3 Me.Range("C2:F2,C5:F5").Select 4 Application.EnableEvents = True 5End Sub

まぁ、こういうことはマクロを使わなくても、
入力したいセル以外は選択させないように、
シートの保護を使えばいいかと思いますが。。。

投稿2020/10/01 10:21

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ad.sys.soleil

2020/10/02 02:41

有難う御座います。 アイディアは出るものですね。関心しました。 今後の参考にさせて頂きます。
guest

0

ベストアンサー

Excel2013 VBA でENTER後のセルの移動を右方向に設定しているのに,左斜め上のセルに移動してしまう。

Microsoftのコミュニティにも同様事象がありましたが、対症療法しかなさそうです。

①結合を解除

②結合解除ができないなら、結合セルの前に一列ダミーの列を置き、幅を限りなく狭くして事実上見えなくする。
(非表示で済めが一番良いのですが、非表示にしてしまうと、選択されなくなるため、D列の判定に引っかからなくなる)


荒業ですが

vba

1Private Sub Worksheet_SelectionChange(ByVal Target As Range) 2 Dim lRow As Long 3 Dim lMinCol As Long 4 Dim lMaxCol As Long 5 Dim MyRange As Range 6 lMinCol = Range("C1:F1").Column 7 lMaxCol = lMinCol + Range("C1:F1").Columns.Count - 1 8 If Target.Column <= lMaxCol Then 9 Exit Sub 10 End If 11 Cells(6, 3).Select 12 Application.SendKeys "{UP}" 13End Sub

投稿2020/09/30 05:21

編集2020/09/30 07:53
radames1000

総合スコア1923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ad.sys.soleil

2020/09/30 06:59

有難う御座います。 最終手段はこれかなと思っておりました。
radames1000

2020/10/01 00:10

追記しましたのでお試しください。
tosi

2020/10/01 00:44 編集

-ミスキャンセルします-
ad.sys.soleil

2020/10/01 00:48 編集

有難う御座います。 何故か私の環境ではEnter後にUP部でループが発生しました。 取り合えず一番スマートな此方で対応したいと思っています。 >結合セルの前に一列ダミーの列を置き
guest

0

何が原因かはよくわかりませんでしたが、次のようなコードにしたら発生しませんでした。

VBA

1Private Sub worksheet_SelectionChange(ByVal Target As Range) 2 If Target.Column > 5 Then 3 Cells(5, 3).Select 4 End If 5End Sub

投稿2020/09/30 04:28

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

radames1000

2020/09/30 04:37

Target.Column > 6 でしょうか。これでも発生しました(Office2016)
ttyp03

2020/09/30 04:39

あ、すいません、6でしたね。 1列見間違えてました。
ttyp03

2020/09/30 04:43 編集

そして確かにダメでした。 そうなると結合セルに到達するとよくない動きになるみたいですね。
ad.sys.soleil

2020/09/30 07:11

ご回答有難う御座います。お手数かけまして申し訳けありせん。 >そうなると結合セルに到達するとよくない動きになるみたいですね。 同じく通常セルと結合セルの違いでイベント部不具合が出ている気がしています。
guest

0

というか普通に設定できるよ入力順
決めた順序でアクティブセルを移動したい:Excelの基本操作

追記
質問者様のコードの場合フォーカスが当たった瞬間にイベント発生します
("F4"が選択した場合か"F4"セルから移動した場合にしか感知できない)
どうやって処理しても"F4"セルから移動した場合は全て"C5"セルに移動してしまいます。
その為通常のExcel設定での入力順を決める方法をお伝えしたのですが...

もしVBAで行うのなら"F2"指定セルが変更した場合のイベントに変更して
("F2"セルを含む状態でEnterが押された場合)
このような処理になります。

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 If Not Application.Intersect(Target, Range("F2")) Is Nothing Then 3 Application.EnableEvents = False 4 Range("C5").Select 5 Application.EnableEvents = True 6 End If 7End Sub

ただ複数セル選択してその中に"F2"があっても処理が動きます。
それをさせたくない場合「Target.Cells.Count = 1」を条件に追加して下さい。

投稿2020/09/30 03:40

編集2020/09/30 04:55
kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ad.sys.soleil

2020/09/30 04:12

有難う御座います。 別の解決方法と言う事で参考にさせて頂きます。
kuma_kuma_

2020/09/30 04:19

いや気になったんだけど > Worksheet_SelectionChange > Cells(5, 3).Select セルの選択範囲の変更時にさらに選択範囲(位置)変更していますよね? 下手すると無限ループになりませんか? せめて Application.EnableEvents = False でイベントキャンセルしないと...
ad.sys.soleil

2020/09/30 04:53

If Target.Column <= lMaxCol Then  Exit Sub を入れて入るので無限ループにはならず2回Callが掛る感じですね。 イベント中のApplication.EnableEvents=Falseで全イベントですか・・・・ Application.EnableEvents = False Cells(5, 3).Select Application.EnableEvents = True この様な感じになると思いますが変わらないですね。
kuma_kuma_

2020/09/30 05:59

基本的にWorksheet_SelectionChangeで行うのが間違いです。 質問者様の処理はあくまで 「"F2"でEnter押したら"G2"に移動する」という前提が付きます。 ではふつうに"G2"を選択したらどうなりますか? カーソル移動の方向が「隣のセル」ではなく「下のセル」と設定していた場合は? 動かなかったり、変な動きをします。 それに2重ループで済めば良いですが作り方を間違えると 永久ループで止まらなくなりますよ。
ad.sys.soleil

2020/09/30 07:05

相当数Worksheet_SelectionChangeを使ってこんな感じで動かしています。特別に問題ないです。プログラムチェックを適正にやれば良いだけの話では・・・・
kuma_kuma_

2020/09/30 14:24

> プログラムチェックを適正にやれば うん気を付けてね。 この永久ループ起こすとExcelファイルの破損とかWindowsのシステムダウン起こすから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問