|
isida さん、こんばんわ。
>下記の数式を行毎に挿入したいのですがよろしくお願いします。
>L9==IF(ISBLANK(H9),"",IF(I9="X",(H9*J9/1000000),IF(I9="L",H9*J9/1000000,IF(I9="P",(H9*H9)/1000000*0.785))))
↑を既に分岐した状態で書きこみたいということでしょうか。
>
>1.H9に数値が(1以上)入力されたら各列に数式書込
ということなので、Changeイベントで対応しました。
該当のシートのChangeイベントに以下を記述してください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r1 As Range, r2 As Range, s1 As String
'範囲内を判定
Set r1 = Application.Intersect(Target, Range("H9:H95"))
'範囲内をループ
If Not r1 Is Nothing Then
Application.EnableEvents = False 'イベント回避
For Each r2 In r1
With r2
If IsNumeric(.Value) Then
If .Value >= 1 Then
'I列で分岐(半角大文字で判定)
Select Case StrConv(.Offset(, 1).Value, vbNarrow + vbUpperCase)
Case "X","L": s1 = "=RC[-4]*RC[-2]/1000000"
Case "P": s1 = "=RC[-4]*RC[-4]/1000000*0.785"
Case Else: s1 = ""
End Select
.Offset(, 4).FormulaR1C1 = s1 'Lは分岐結果
.Offset(, 6).FormulaR1C1 = "=IF(RC[-6]>0,RC[-2]*RC[-1],"""")"
.Offset(, 7).FormulaR1C1 = "=IF(RC[-4]>0,RC[-4]/RC[-1]/3600,"""")"
.Offset(, 14).FormulaR1C1 = "=IF(RC[-6]>0,AVERAGE(RC[-6]:RC[-1]),"""")"
.Offset(, 15).FormulaR1C1 = "=IF(ISBLANK(RC[-7]),"""",RC[-9]*RC[-1]*3600)"
End If
End If
End With
Next
Application.EnableEvents = True 'イベント再開
End If
'終了
Set r1 = Nothing
End Sub
こんな感じです。
H9:H95の間に1以上の数値が入ると数式が入ります。
既に入っている場合は上書きされます(ほぼ同じ式が入るわけですが)。
|
|