• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA Worksheet_Chang)

EXCEL VBAで実行時エラー13が発生する理由と対処方法

このQ&Aのポイント
  • EXCEL VBAでセルに式を設定する際に、実行時エラー13が発生する場合の理由を解説します。
  • エラー13の原因は、セルの型が一致しない場合です。データの型を確認し、適切な型に変換する必要があります。
  • 対処方法は、条件式を使ってセルの値の型を判断し、適切な式を設定することです。エラーチェックとデータ型の変換を行うことで、エラーを回避できます。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

>If Target = Range("C6") Then このコードですと、Target(変更されたセルの値)がセルC6の値と同じであれば処理をするという事になります。 >C6の内容に応じて、セルに式を設定する 以下のようにTarget.Address(変更されたセルのアドレス)が「C6」であるかを判定する必要があります。   If Target.Address = "$C$6" Then           又は   If Target.Address(False, False) = "C6" Then >Range("I11").Formula~Range("J14").Formula = "=C8" 「=C7」や「=C8」を絶対参照とし、セル範囲「Range("I11:I14")」を挿入先として指定することで以下のように出来ます。   Range("I11:I14").Formula = "=$C$7"   Range("J11:J14").Formula = "=$C$8" >Range("I11").Formula = ""~Range("J14").Formula = "" 数式を消すのであれば""を代入するのではなく、ClearContents(値の削除)で良いかと。 >Worksheet_Chang >セルに式を設定する Worksheet_Changイベントはユーザーが変更(入力やコピー)した場合に発生しますが、 VBAコード内で値を変更した場合にも発生します。 ですので、セルの値をVBAコードで変更する前にイベントを一時的に停止する処理 と、最後にイベントを再開する処理を追加してください。   Application.EnableEvents = False 'イベント停止        ~ セル変更処理 ~   Application.EnableEvents = True 'イベント再開 >If 条件式 Then 真の場合の処理 Else 偽の場合の処理 End If 上記If文において、偽の場合の処理が無い場合は「Else 偽の場合の処理」を省略できます 以上をふまえると以下のようになります。 ■VBAコード Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "C6" Then   Application.EnableEvents = False   If Range("C6").Value = "する" Then     Range("I11:I14").Formula = "=$C$7"     Range("J11:J14").Formula = "=$C$8"   Else     Range("I11:J14").ClearContents   End If   Application.EnableEvents = True End If End Sub

HiroBlue
質問者

お礼

丁寧にありがとうございました さっそく使わせていただきます

関連するQ&A