2017-03-15 12 views
1

エンドユーザーに値を入力させたいスプレッドシートがあります。または、スプレッドシートが自動的に数式に入力されます。また、直接入力が削除された場合は、式を再入力することもできます。現在、以下のコードは何もしません。どんな助けでも大歓迎です!直接入力または数式

Private Sub Worksheet_Change1(ByVal target As Range) 

If target.Cells.Count > 1 Then Exit Sub 

If Not Intersect(target, Range("B8")) Is Nothing Then 

Range("B8").Formula = "=IF($B$1=""DC"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$I:$I,'Wage Run'!$D$1),0),IF($B$1=""Division"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$M:$M,'Wage Run'!$D$1),0)" _ 
& ",IF($B$1=""GBU"",IF(MAX('TY Data'!$L:$L)&>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$N:$N,'Wage Run'!$D$1),0),IF($B$1=""Rollup"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$O:$O,'Wage Run'!$D$1),0),""""))))" 

End If 
End Sub 

編集:私はあなたがイベントのトリガを無効にされていない古いサブ

Private Sub Worksheet_Change(ByVal target As Range) 

If target.Cells.Count > 1 Then Exit Sub 

If Not Intersect(target, Range("B1")) Is Nothing Then 
    Range("C1").ClearContents 
End If 

If target.Cells.Count > 1 Then Exit Sub 

If Not Intersect(target, Range("B8")) Is Nothing And target.Value = "" Then 

Range("B8").Formula = "=IF($B$1=""DC"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$I:$I,'Wage Run'!$D$1),0),IF($B$1=""Division"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$M:$M,'Wage Run'!$D$1),0)" _ 
& ",IF($B$1=""GBU"",IF(MAX('TY Data'!$L:$L)&>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$N:$N,'Wage Run'!$D$1),0),IF($B$1=""Rollup"",IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),SUMIFS('TY Data'!$K:$K,'TY Data'!$A:$A,5101200,'TY Data'!$L:$L,VLOOKUP('Wage Run'!$F$1,Dates!$A:$D,3,0),'TY Data'!$D:$D,""AP0345R"",'TY Data'!$O:$O,'Wage Run'!$D$1),0),""""))))" 

End If 

End Sub 
+2

「Worksheet_Change1」とは何ですか?それはその名前を持つことはできません、それは決して発射されません。 –

+2

また、ターゲットが空であることをテストしたいと思うでしょう。その前にIfを入れ、 'And Target.Value =" "' –

+0

okです。少なくとも発射は今...しかし、今では範囲( "b8")でデバッグエラーが発生しています。 –

答えて

0

に追加した後

新しい式は次のようになります。数式をB8に書き込むと、Worksheet_Changeはそれ自身の上で実行されます。数式が""を返す場合は、クラッシュするまでそれ自体の上を走り続けます。

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Cells.Count > 1 Then Exit Sub 

    On Error GoTo Safe_Exit 
    Application.EnableEvents = False 

    Select Case Target.Address(0, 0) 
     Case "B1" 
      Target.Offset(0, 1).ClearContents 
     Case "B8" 
      If Not Target.HasFormula Then _ 
       Target.Formula = "=IFERROR(IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), " & _ 
              "SUMIFS('TY Data'!$K:$K, " & _ 
               "'TY Data'!$A:$A, 5101200, " & _ 
               "'TY Data'!$L:$L, VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), " & _ 
               "'TY Data'!$D:$D, ""AP0345R""," & _ 
               "INDEX('TY Data'!$I:$O, 0, LOOKUP($B$1, {""DC"",""Division"",""GBU"",""Rollup""}, {1,5,6,7})), 'Wage Run'!$D$1), 0), """")" 
     Case Else 
      'do nothing 
    End Select 

Safe_Exit: 
    Application.EnableEvents = True 

End Sub 

これは私の修正です。 OR(B1={"DC","Division","GBU","Rollup"})の出番

=IFERROR(IF(MAX('TY Data'!$L:$L)>=VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), 
     SUMIFS('TY Data'!$K:$K, 'TY Data'!$A:$A, 5101200, 
           'TY Data'!$L:$L, VLOOKUP('Wage Run'!$F$1, Dates!$A:$D, 3, FALSE), 
           'TY Data'!$D:$D, "AP0345R", 
           INDEX('TY Data'!$I:$O, 0, LOOKUP($B$1, {"DC","Division","GBU","Rollup"}, {1,5,6,7})), 'Wage Run'!$D$1), 0), "") 

、などB8でINDEXとの最後の行があります。

+0

これは素晴らしいです!私はスマートな人が大好きです。最後の1つの質問:セルB8に直接入力できる方法はありますか?たとえば、値で数式を上書きしたい場合など、その値が削除された場合は、数式に戻ります。 –

+0

'If Not Target.HasFormula Then _'を' If IsEmpty(Target)Then _'に変更する 'If Target =" "を使うと' '' 'を返す式を持つTargetは除外されません。真に空白ですが、長さゼロの文字列です; IsEmptyのみ真に空白のセルを定義します。 – Jeeped

+0

あなたは素晴らしいです!完全に働いた:) –

関連する問題