- ベストアンサー
EXCEL VBAで実行時エラー13が発生する理由と対処方法
- EXCEL VBAでセルに式を設定する際に、実行時エラー13が発生する場合の理由を解説します。
- エラー13の原因は、セルの型が一致しない場合です。データの型を確認し、適切な型に変換する必要があります。
- 対処方法は、条件式を使ってセルの値の型を判断し、適切な式を設定することです。エラーチェックとデータ型の変換を行うことで、エラーを回避できます。
- みんなの回答 (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
お礼
丁寧にありがとうございました さっそく使わせていただきます