• ベストアンサー

VBA チェンジイベント 任意のセルに自動表示の仕方

お世話になります。 見よう見まねでチェンジイベントを使っていましたが、うまくいきません。 マクロで行いたい作業は、 G23からG37のセルに何か入力された場合は、自動的にそのセルの隣のG列に"非課税"と表示させたいのです。とりあえず下記の記述をご覧ください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range Set rng = Intersect(Target, Range(Cells(23, 7), Cells(37, 7))) If Not (rng Is Nothing) Then Cells(ActiveCell.Row, 8).Value = "非課税" End If End Sub G列に入力するとH列に"非課税"と入力されるのですが、G列にセルを持っていっただけで、Hに入力がされてしまいます。あくまでG列に何かを入力した時にだけ、Hには"非課税"を表示させたいのですが。。。 どうすればよろしいでしょうか?よろしくご享受くださいませ。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

またまた登場、myRangeです。 >データが入力されているG列のセルをDeleteで空欄に戻した場合、H列も空欄に戻すにはどうしたらよろしいのでしょうか?   でしょうね。たぶんこの質問は出るだろうと思ってました。 '--------------------------------------------------  Private Sub Worksheet_Change(ByVal Target As Range)  Dim Rng As Range  Set Rng = Intersect(Target, Range(Cells(23, 7), Cells(37, 7)))    If Not (Rng Is Nothing) Then    If Target.Value = "" Then      Cells(Target.Row, "H").Value = ""    Else      Target.Offset(0, 1).Value = "非課税"    End If  End If End Sub '--------------------------------------------- H列の値を消す場合は、上記のようにするか Cells(Target.Row, "H").ClearContents とします。 Cells(Target.Row, "H").Clear でも消去できますが、これだと、色、罫線などの書式も全て消去されますので それぞれの場合で使い分けましょう。 以上です。

TENSAW
質問者

お礼

たびたびすみません。ありがとうございました。 ばっちり動きましたよ! 今後ともよろしくお願いいたします。

その他の回答 (3)

回答No.4

老婆心ですが、複数セルを選択したときの動作確認(入力や内容削除など)をお忘れなく。

回答No.2

すでに指摘されてますように「Worksheet_Change」イベントを使うわけですが、この場合は、「ActiveCell」は使えないようです。次のセルに移動してしまいますから。 結局、こんな感じでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range For Each c In Target If c.Column = 7 And 22 < c.Row And c.Row < 38 Then If 0 < Len(c.Value) Then c.Offset(, 1).Value = "非課税" Else c.Offset(, 1).Clear End If End If Next End Sub <<説明>> 複数のセルを選択した場合にも対応するために、1セルずつ検査しています。 質問にあるマクロのままでは、当該セルの内容を削除してもH列に「非課税」と表示されしまうので、当該セルに入力があったときは、H列に「非課税」と表示し、何もないときはH列もクリアしています。

TENSAW
質問者

お礼

cistronezkさん、 どうもありがとうございました。 c.Column = 7 And 22 < c.Row And c.Row < 38 ↑なんかとても参考になります。自分では決して思いつかないです。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

>G列にセルを持っていっただけで、Hに入力がされてしまいます イベントが違います。 Worksheet_SelectionChangeイベントは、 セルを選択したときですから質問のようになります。 値を入力したときに発生するイベントは、 Worksheet_Changeイベントですので、コードはそこへ書きましょう。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim rng As Range  Set rng = Intersect(Target, Range(Cells(23, 7), Cells(37, 7)))  If Not (rng Is Nothing) Then    Cells(ActiveCell.Row, 8).Value = "非課税"  End If End Sub '--------------------------------------------- それから、 Cells(ActiveCell.Row, 8).Value = "非課税" この書き方はいつくかあります。 Cells(Target.Row, "H").Value = "非課税" とか Cells(Target.Row, 8).Value = "非課税" とか Target.Offset(0, 1).Value = "非課税" とか 以上です。

TENSAW
質問者

補足

myRangeさん、 さっそくのご回答ありがとうございました。 もう一つ質問させてください。 今度は、データが入力されているG列のセルをDeleteで空欄に戻した場合、H列も空欄に戻すにはどうしたらよろしいのでしょうか? いろいろためしてみたのですが、全く動かずで。 よろしくお願い申し上げます。

関連するQ&A

  • シートのイベント VBA

    シートをクリックしたらシートをクリアしたいのですが クリックするセルがA1の場合は、マクロを実行させたくないのですが 下記のコードだとエラーになってしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Range = Range("a1") Then Cells.Clear End If End Sub ”Range("a1")でなければ、Cells.Clearする” にはどうすればいいですか?

  • エクセル2003 VBAでセル移動

    いつもお世話になります。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row > 9 Then If Target.Column = 3 Then Cells(Target.Row, 4).Select ElseIf Target.Column > 5 Then Cells(Target.Row + 1, 1).Select End If End If End Sub これで、B列からC列を飛ばしてD列にセル移動して取りあえずの目的は達成しているのですが、 D列からB列には方向キー移動してくれません。Target.Columnが3になるんで当たり前なんですが・・・ B列の入力ミスがあるときマウスで移動させるか、A列まで戻ってから方向キーで上に上がるかです。 何かいい方法ありませんでしょうか。D列から方向キーで戻るときも、出来ればC列を飛ばしてほしいです。 よろしくお願いします。

  • VBA 検索して一致したセルへジャンプさせたい

    Excelにて、シート1のA列とシート2のA列のデータにNoを入れます。 シート1のA列のNoをクリックすると、シート2のA列の同じNoにジャンプするマクロを組みたいです。 現在組んでいるマクロは、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Sht As Worksheet Dim Rng1 As Range Dim Rng2 As Range Dim FindCell As Range Set Sht = Worksheets("シート2") Set Rng1 = Range("A2:A100") Set Rng2 = Sht.Range("A2:A100")If Intersect(Target, Rng1) Is Nothing Then Exit Sub If Target.Count > 1 Then Exit Sub Set FindCell = Rng2.Find(Target.Value) If Not FindCell Is Nothing Then Application.Goto Reference:=FindCell, Scroll:=False End If End Sub です。 一応マクロは実行されますが、そうすると、シート1のA列の編集(Noを追加したり変更したり・・・)できません。 編集や変更もできて、検索マクロも実行できるというマクロの組み方はありますでしょうか?

  • VBA 範囲選択時エラー

    Private Sub Worksheet_SelectionChangeのVBAでA列B列C列でワンクリックで文字が入力できるように設定致しました。 その後、A列からC列を範囲選択してDeleteするとデバック 「実行時エラー  型が一致しません」と出てしまいます。業務上、そのセルのデータは一気に消したいので困っております。どなたか分かる方よろしくお願い致します。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range, rng_1 As Range, rng_2 As Range Application.EnableEvents = False Set rng_1 = Range("H17:H100") Set rng_2 = Range("I17:I100") Set rng_3 = Range("J17:J100") Set rng_4 = Range("K17:K100") Application.EnableEvents = True Set rng = Intersect(Target, rng_1) If Not rng Is Nothing Then Cancel = True If Target.Value = "" Then Target.Value = "(1)" Else Target.Value = "(1)" End If Else Set rng = Intersect(Target, rng_2) If Not rng Is Nothing Then Cancel = True If Target.Value = "(2)" Then Target.Value = Empty Else Target.Value = "(2)" End If Else Set rng = Intersect(Target, rng_3) If Not rng Is Nothing Then Cancel = True If Target.Value = "(3)" Then Target.Value = Empty Else Target.Value = "(3)" End If Else Set rng = Intersect(Target, rng_4) If Not rng Is Nothing Then Cancel = True If Target.Value = "(4)" Then Target.Value = Empty Else Target.Value = "(4)" End If End If End If End If End If End Sub

  • 【Excel VBA】チェンジイベント

    Excel2003を使用しています。 マクロの記録を元に、チェンジイベントを下記のように作成しました。 下記は、B列の11行目以降のセルのデータが変化したら、その行のF列に入力規則を設定するように作成したつもりです。 テストもしてみましたが、きちんと動作しました。 さらに、B列の11行目以降のセルのデータがクリアされたら、その行のF列に設定した入力規則もクリアしたく  If Target.Columns(2).ClearContents And Target.Row >= 11 Then   Cells(Target.Row, 6).Validation.Delete  End If 分からないながらにも、↑このように追加して試してみたのですが、何も動作しなくなりました(^_^;) こういう場合は、どのようにコードを書いたらいいのでしょうか? よろしくお願いします。 -------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 2 And Target.Row >= 11 Then   With Cells(Target.Row, 6).Validation    .Delete    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _    xlBetween, Formula1:="=$F$3:$F$7"    .IgnoreBlank = True    .InCellDropdown = True    .InputTitle = ""    .ErrorTitle = ""    .InputMessage = ""    .ErrorMessage = ""    .IMEMode = xlIMEModeNoControl    .ShowInput = True    .ShowError = False   End With  End If End Sub ------------------------------------------------

  • VBA チェンジイベント 別シートにデータ転記

    お世話になります。チェンジイベント初心者です。 同一BOOK内の特定のコラムのセルを選択した場合に、自動的に他のシートの特定のセルにデータを転記させたいのですが、どう書けばよいのか分かりません。添付の画像と下記マクロをご覧になって下さい。 -マクロ- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = ActiveCell.Column Then Worksheets("01").Cells(ActiveCell.Row, 3) = Cells(ActiveCell.Row, 1) Worksheets("01").Cells(ActiveCell.Row, 4) = Cells(ActiveCell.Row, 2) End If End Sub メインのシートは[01]です。このシートのC4を選択し、次に[02]のA列にあるセルを選択すると、[02]のA列・B列のデータがC4・D5に転記されるようにしたいのですが、画像にあります通り[02]のA5を選択してしまうと、[01]のC5・D5に転記されてしまいます。 どのようにすれば、[01]でアクティブにしておいた行の3列目、4列目に転記が行われるのでしょうか? よろしくご指南くださいませ。

  • エクセル マクロを利用して繰り返して入力する方法

    マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい

  • VBAの記録を追加したい

    エクセル2002使用です。 VBAで次のコードを使っています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Set Target = Intersect(Range("C:C"), Target) If Target Is Nothing Then Exit Sub For Each Rng In Target If Rng.Value <> "" Then Rng.Offset(, -2).Value = Now Else ' (*) Rng.Offset(, -2).Value = "" ' (*) End If Next Rng End Sub (C列のセルに何か入力されると、A列の同じ行にその時刻が入る。) 同じシートで、F列に何か入力されるとE列の同じ行にその時刻が入るように書き直したいのですが、どうすればいいのでしょうか? すいませんが、よろしくお願いします。

  • エラーが出てしまいます。

    特定の列(C列)に日付が入力されると同じ行の違う列に月名が入力されるマクロをt食ってみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 Then Cells(Target.Row, 10) = Month(Target.Value) End If End Sub しかしC列の一つのセルに入力したときはきちんと作動したのですが、C列の複数セルを選択したときにエラーが出てしまいました。 このエラーを回避する方法はあるのでしょうか。

  • Excel VBA セルの値を変更後にVBA作動

    Excel VBAを活用して、特定のセルの値が変更されたときに、VBA処理を発動させることになりました。 処理といたしましては、C列(3列目)の4行目以下の空白セルに数値を入力するか、セルに入力されている数値を変更した場合にVBAを発動させたいです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row >= 4 Then MsgBox "セルの値が更新されました" End If End Sub 上記のコードを実行してみたところ、3列目(C列)の4行目を選択した段階でVBAが作動してしまいます。 セルの値変更後に作動するようにするには、どう修正すればよろしいでしょうか?

専門家に質問してみよう