- ベストアンサー
Excel 特定のセルだけEnterでセル内改行
- Excelの特定のセルだけEnterキーでセル内改行できる方法を探しています。VBAを使っても形を崩さずにできる方法が望ましいです。
- 他のセルではAlt+Enterで改行できるのに、特定のセルではAltキーを押しながら改行する必要があります。そのため、このセルのみでEnterキーだけで改行できる方法を見つけたいです。
- 特定のセルのみでセル内改行をするために、VBAの機能であるApplication.MoveAfterReturnを試しましたが、うまくいきませんでした。他の方法があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「セルに入力中」はマクロは起動できないため,原則としてご相談のことをマクロでやっつける方策はありません。 が,まぁそこを何とか次のようにします。 ただしあくまで無理矢理なので,いつもの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する。
その他の回答 (2)
- watabe007
- ベストアンサー率62% (476/760)
お試し下さい。 シートモジュールに 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
お礼
こちらも#1の方と同じ原理ですね
補足
皆様のコードを確認していて気づきました これらのコードだと末尾にしか改行が入れられない、という事です 入力途中に改行を挿入しなおすという事ができなかったのです。 編集モード中にキャレットの位置をVBAで取得、というのは不可能のようで 実用的に問題あり、実質使えないという事になってしまいました このままでは厳しいので大元の方に掛け合うことにします
- matsu_jun
- ベストアンサー率55% (146/265)
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以外のセル)をクリックします。
お礼
ありがとうございます Changeの所でもできるのですね
お礼
ありがとうございます Enterを押した時に強制的に改行コードを送るのですね