【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言

見積書の表に入力する際、Enterキーで横に移動し、行の最後入力したら次の行の先頭に移動するマクロを作成していたのですが、うまく動きません
ネットで検索してコードをコピーして、そのままだと動くのですが、セルを変更したりすると動いてみたり、エラーが出たり…
チェックボックスを作成して、チェックが入っている時のみマクロが動くコードを教えて下さい!
どうぞよろしくお願いいたします

表の範囲➡ A15:K35
入力したい順➡ A15,F15,G15,H15,K15,A16,F16,G16,H16……K35(A列とH列はそれぞれ結合セル)
チェックボックスの希望の場所➡ J13(K13に表示)

質問者からの補足コメント

  • うーん・・・

    範囲指定して入力する方法、範囲に名前を付けて入力する方法
    は試したのですが、セルにグレーの色がつかない方法での入力を考えております
    どうぞよろしくお願いいたします

      補足日時:2022/05/01 22:15

A 回答 (3件)

こんにちは


マクロを作成したが、エラーや動作が思うようにいかないと言う事ですね
考えられるのは(ご存知かと思いますが)
>(A列とH列はそれぞれ結合セル)
結合セルを選択している時、1番上の左側セルが返るので、
Application.MoveAfterReturnDirection = xlToRight
などで右移動を設定してもF列セルに移動した時、A列結合セルの一番上の行になってしまうと思います。
従って、行が下に進まないまま選択セルが移行します。

やるのなら・・
入力シートに結合セルを作らない事(もう作っちゃた)
範囲選択や名前選択で実行(グレーになるから嫌)
結合セルを省く処理(除くと選択できないからダメ)
などになると思います。

セルにグレーの色がつかない方法でとの事で力業のような(実用的でない)限定的コードですがサンプルを・・参考になるか分かりません

A15:K35の途中で他のセルを選択し直す時の処理は入れていません
結合セル数が不明な為、モジュールレベル変数nで行移動
チェックボックスはActivexコントロール
シートイベントWorksheet_SelectionChange 併用

Option Explicit
Dim flg As Boolean, n As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If flg <> True Then Exit Sub
If Intersect(Target, Range("F15:F35"), Range("I15:I35")) Is Nothing Then
Application.EnableEvents = False
Cells(15 + n, Target.Column).Select
Application.EnableEvents = True
End If
If Not Intersect(Target, Range("K15:K35")) Is Nothing Then n = n + 1
End Sub

Private Sub CheckBox1_Click()
Application.MoveAfterReturn = True
If CheckBox1 = True Then
n = 0
flg = True
With ActiveSheet
.Range("A15:A35,F15:K35").Locked = False
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
.EnableSelection = xlUnlockedCells
End With
Application.MoveAfterReturnDirection = xlToRight
Else
n = 0
flg = False
ActiveSheet.Unprotect
Cells.Locked = True
Application.MoveAfterReturnDirection = xlDown
End If
Application.EnableEvents = False
Range("A15").Select
Application.EnableEvents = True
End Sub

不具合があるかも知れませんので、あれば、直してください
    • good
    • 0
この回答へのお礼

ありがとうございます!
やりたいことを理解してくださって感謝しています
早速コードを記入し、私がお伝えしきれていなかった部分を直しているところです
本当にありがとうございました

お礼日時:2022/05/02 19:01

こんばんは



どのようなレイアウトなのか不明ですが・・

標準のカーソルの移動方向は、エクセルの機能でEnter時の移動方向を横に設定しておくことで可能です。

>そのままだと動くのですが、~~
いずれにしろ、カーソル移動の制御をなさりたいのでしょうから、単純な矩形の範囲の入力であれば、
「最後の列をを過ぎたら」を範囲に応じて判定すれば良いでしょう。
範囲がいろいろバラバラであるのなら、各行ごとに最終列か否かを判断するようにすれば良いでしょう。

>チェックが入っている時のみマクロが動くコードを教えて下さい!
簡単な仕組みを追加すれば実現可能です。
処理の最初に、「チェックが入っているか」をチェックし、入っていなければ何も処理を行わないようにすれば良いだけです。(=カーソルの制御をおこなわない)

「何をどうしたいのか」がはっきりとはわかりませんけれど、入力時などに指定セル以外は選択できないようになさりたいのなら、エクセルの機能だけでも実現可能です。
 ・カーソル移動を許可するセルだけをロックを外しておいて
 ・「シートの保護」で「ロックされたセルの選択」を不許可に
することで、指定セル以外にはカーソルが行かなくなります。
(セルが飛び飛びでも、あちこちにあっても可能です)
標準のカーソル移動方向を横にしておけば、「移動可能なセル」だけに順に移動するようになります。
    • good
    • 0
この回答へのお礼

ありがとうございます
分かりにくい伝え方で申し訳ございません
色々と教えて下さり、答えて下さって感謝しています

お礼日時:2022/05/02 19:01

マクロなんて作らなくても出来ますよ。


Enterでのカーソル移動方向を「横」にしておいて、入力したい範囲をドラッグで設定してから入力すれば、左上から右に向かって入力が進み、範囲設定した右端に行けば、次のEnterで一段下の左端に移動して入力を続けられますよ。
MS-Excelの標準的な使い方です。
    • good
    • 0
この回答へのお礼

早速ありがとうございます
お伝えするのを忘れてしまったのですが、
範囲を指定してから入力する方法、範囲に名前を付けて入力する方法も知っていたのですが、セルに色がつかない状態での入力をしたかったので、マクロを作成を試しておりました
言葉がたらずに申し訳ございません

お礼日時:2022/05/01 22:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報