• ベストアンサー

VBA セル内改行禁止

H列の全てのセルで、セル内改行(Alt+Enter)したら、 "セル内改行禁止"というメッセージボックスを表示させたいのですが、 どのような構文になりますか。 Dim inputdata As Integer On Error GoTo MSG inputdata = Worksheets("sheet1").Column("H:H") if inputdata ここまで書いてみたのですが、全然自信がありません。 ご存知の方、ご教授お願い致します。

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

"H列”を見落としてました。 ↓でお試しください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Value Like "*" & vbLf & "*" And Target.Column = 8 Then MsgBox "H列かつセル内改行あり" End If End Sub

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

これはVBAでなくても、データー入力規則ーユーザー設定ー =ISERROR(FIND(CHAR(10),A1)) でできることです。ですから それをマクロの記録をとったものを下記に挙げておきます。 Sub Macro1() With Range("A:A").Validation .Delete .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=ISERROR(FIND(CHAR(10),A1))" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "セル内改行禁止" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With End Sub A列の例ですから、H列なら With Range("H:H").Validation と変えます。

  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.6

訂正です。 >ぐらいの使用にした方が簡単だと思いますが、いかがですか? ぐらいの仕様にした方が簡単だと思いますが、いかがですか?

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.5

入力時(コピー&ペースト)ということなら下記で強制的に改行を解除できます。 Private Sub Worksheet_Change(ByVal Target As Range) For Each RG In Target If RG.Column = 8 Then If InStr(1, RG.Value, Chr(10)) > 0 Then MsgBox "セル" & RG.Address & "に改行を取り消します。", , "改行禁止" RG.Value = Replace(RG.Value, Chr(10), "") End If End If Next RG End Sub

sMyamYs
質問者

お礼

出来ました! 今回は改行を解除しないでメッセージだけ表示したかったのですが、 こちらもとても役に立ちそうです。 ありがとうございました。

  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.4

ちょっと仕様が変更して、 改行コード Vblfが 当該シートの H列に入力されると エラーメッセージを表示した後に、 改行コードを削除します。 ぐらいの使用にした方が簡単だと思いますが、いかがですか? これでよいなら、 当該シートのモジュールに '======================================================= Private Sub Worksheet_Change(ByVal Target As Range)   Dim trng As Range   Dim crng As Range   Set trng = Application.Intersect(Target, Range("h:h"))   If Not trng Is Nothing Then    Application.EnableEvents = False    For Each crng In trng      If InStr(crng, vbLf) Then       MsgBox "改行はできません"       With crng        .Value = Replace(crng.Value, vbLf, "")        End With       End If      crng.WrapText = False      Next    Application.EnableEvents = True    End If End Sub として、H列に入力して試してみて下さい。

sMyamYs
質問者

お礼

ありがとうございました! 今回は改行を解除せずにメッセージだけ表示したかったのですが、 こちらもとても役に立ちそうです。

回答No.3

シートモジュールに貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myrng As Range For Each myrng In Target If myrng.Column = 8 Then If InStr(myrng.Value, Chr(10)) > 0 Then MsgBox "セル内改行禁止" End If End If Next myrng End Sub

sMyamYs
質問者

お礼

ありがとうございました。 思い通りの事ができました!

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

セル内改行の有無をチェックします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Value Like "*" & vbLf & "*" Then MsgBox "セル内改行あり" End If End Sub

sMyamYs
質問者

お礼

ありがとうございました。 出来ました! ここまで出来るよう、勉強します。。。

関連するQ&A