• ベストアンサー

どの繰り返しを?

A列に値が入力されていて 値が変わったらメッセージボックスでそれを表示する というのはどの繰り返しの文法を使えば良いですか??

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

それは繰り返しの文法でなく、Worksheetのイベントで処理します。 たとえばSheet1のA列の値が変わったときに、メッセージを出すのは、 Alt+F11でVBAの画面を開き、Sheet1のコードに以下のように書きます。 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Column = 1 Then     MsgBox (Target.Address(RowAbsolute:=False, ColumnAbsolute:=False) & _         "に" & Target.Value & "が入力されました")   End If End Sub

その他の回答 (1)

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

A列との表現がありますから、VBでなくエクセルVBAでしょう。 この質問のようにセルの値やその他が変わったら知らせてもらうのは エベントといって、OSの機能に組み込んでもらって、見張ってもらい それを知らせてもらう、イベントプロシジュアーという仕組みがあり、それを使います。オブジェクトごとにエクセルVBAではイベントは決まっていて、これらを知り利用します。 こういう仕組みは、もっと基礎のレベルでは、繰り返しソフトで判別して監視するとかハードウエアの入出力など割り込みの仕組みがありますが、汎用言語ソフトのレベルでは、ユーザーが繰り返して聞くようなレベルのものでは有りません。 処理を終了して、終わりファイルに保存するときなら、セルを各列ごとに繰り返し、元のデータと比べる処理をするかも知れません。 本件は Private Sub Worksheet_Change(ByVal Target As Range) End Sub というイベントがあるのでそれを使います。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then MsgBox Chr(64 + Target.Column) & "列 " & Target.Row & "行が変わりました" End If End Sub (なおこれはA列だけを捉えていますが、If Target.Column = 1 ThenとEndIfを除いても、手抜きをしているので、Z列までしか MsgBox Chr(64 + Target.Column) & "列 " & Target.Row & "行が変わりました" では正しく表示しません。) WorkSheetのイベントはVBEの画面で、GereralをWorksheet、Declaration部の▼をクリックするとドロップダウンで出てきます。

関連するQ&A