• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel 特定のセルだけEnterでセル内改行)

Excel 特定のセルだけEnterでセル内改行

このQ&Aのポイント
  • Excelの特定のセルだけEnterキーでセル内改行できる方法を探しています。VBAを使っても形を崩さずにできる方法が望ましいです。
  • 他のセルではAlt+Enterで改行できるのに、特定のセルではAltキーを押しながら改行する必要があります。そのため、このセルのみでEnterキーだけで改行できる方法を見つけたいです。
  • 特定のセルのみでセル内改行をするために、VBAの機能であるApplication.MoveAfterReturnを試しましたが、うまくいきませんでした。他の方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

「セルに入力中」はマクロは起動できないため,原則としてご相談のことをマクロでやっつける方策はありません。 が,まぁそこを何とか次のようにします。 ただしあくまで無理矢理なので,いつものEnterキーの動作から意図しない動作になる副作用が起こります。マクロの中で,ある程度の手当はしていますが。 状況設定: book1.xlsのSheet1のE7セルで,希望の動作を行う 手順: book1.xlsを開く ALT+F11して標準モジュールを挿入する 次のマクロを記述する Sub Auto_Open()  Application.OnKey "{ENTER}", "macro1"  Application.OnKey "~", "macro1" End Sub Sub Auto_Close()  Application.OnKey "{ENTER}"  Application.OnKey "~" End Sub Sub macro1()  If ActiveWorkbook.Name = "Book1.xls" And ActiveSheet.Name = "Sheet1" And ActiveCell.Address = "$E$7" Then   Range("E7") = Range("E7") & vbLf   SendKeys "{F2}"   Exit Sub  End If  With ActiveCell  Select Case Application.MoveAfterReturnDirection  Case xlToRight   .Offset(0, 1).Select  Case xlDown   .Offset(1, 0).Select  Case Else  End Select  End With End Sub ブックを保存し,閉じて,開き直し,Sheet1のE7セルで言葉を記入してEnterする。

tetsusi
質問者

お礼

ありがとうございます Enterを押した時に強制的に改行コードを送るのですね

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

お試し下さい。 シートモジュールに Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Not Intersect(Target, Range(特定セル)) Is Nothing Then     Application.OnKey "{Enter}", "改行処理"     Application.OnKey "~", "改行処理"   Else     Application.OnKey "{Enter}"     Application.OnKey "~"   End If End Sub 標準モジュールに Sub 改行処理()   With ActiveCell     If .Value <> "" Then       .Value = .Value & vbCrLf       SendKeys "{F2}"     End If   End With End Sub

tetsusi
質問者

お礼

こちらも#1の方と同じ原理ですね

tetsusi
質問者

補足

皆様のコードを確認していて気づきました これらのコードだと末尾にしか改行が入れられない、という事です 入力途中に改行を挿入しなおすという事ができなかったのです。 編集モード中にキャレットの位置をVBAで取得、というのは不可能のようで 実用的に問題あり、実質使えないという事になってしまいました このままでは厳しいので大元の方に掛け合うことにします

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

tetsusiさん こんにちわ 該当シートのWorksheet_Changeイベントを利用します。 文面からすると、それなりにVBAを活用されているようですので、コードの貼り付け方法は割愛しますが、もし分からない際は、私の過去の解答 http://okwave.jp/qa/q7499581.html の、「記入が終わったら・・・」のくだり以降を参照ください。 では、コメントつきでコードを紹介します。ここでは対象セルをA1としています。対象セルを変更したい場合は、If分の後の$A$1を任意のセルに変更してください。(絶対参照($付き)で指定してください) '--------------------ここから---------------------- Private Sub Worksheet_Change(ByVal Target As Range)   'シート上のセルの値に変化があった際に発生するイベント   'セルA1が変化し、かつ、現在のカーソルが1行下にあるときのみ実施   'つまり、セルA1を編集し、Enterを押されたときのみ実施ということになる   If Target.Address = "$A$1" And ActiveCell.Address = Target.Offset(rowoffset:=1).Address Then     Application.EnableEvents = False    'イベント発生の抑止(再帰動作抑制)     Target.Value = Target.Value & Chr(10)  '該当セルの値の最後尾に改行を付加     Target.Activate             'カーソル位置を元に戻す     SendKeys "{F2}"             'F2キーを押すのと同じ動作(該当セルを編集状態に戻す)     Application.EnableEvents = True     'イベント発生の復帰   End If End Sub '--------------------ここまで---------------------- これでお望みの動作になると思います。編集状態から抜けるには、該当セルと該当セルの下のセル以外のセル(上の例であればA1とB1以外のセル)をクリックします。

tetsusi
質問者

お礼

ありがとうございます Changeの所でもできるのですね