2

純粋に VBA を使用してデータ検証セルを作成しようとしています。問題は、検証済みリスト内の項目の 1 つがカンマを含む Excel 数式 (次のコードの IF() など) である場合、エラーが生成されることです。

 Dim str As String
 str = "=IF(SUM(A1:A2) = 0, ""Zero"", SUM(A1:A2)) , Item 2 , Item 3 , Item 4"

 s1.Range("B6").Validation.Add Type:=xlValidateList, _
          AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=str

エラー (実行時エラー 1004) が生成されるのは、最初のカンマで文字列が区切られているためです。したがって、検証の最初の項目は"=IF(SUM(A1:A2) = 0". これを回避するために、コンマのエスケープ文字 (C の \ など) があることを願っています。検証済みのリストを次のように表示したい:

<result of IF() function>
Item 2
Item 3
Item 4

注: 検証済みデータに範囲を使用することはできません。ユーザーが範囲を削除すると、スプレッドシートが破損します。

4

1 に答える 1

1

セル A1 または A2 が変更されたときにデータ検証をリセットする WorkSheet_Change イベントはどうですか?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ValidationString As String
Dim rngChanging As Excel.Range
Dim rngWithValidation As Excel.Range

Set rngChanging = Range("A1:A2")
Set rngWithValidation = Range("B6")
If Not Intersect(Target, rngChanging) Is Nothing Then
    With rngWithValidation
        .Validation.Delete
        If WorksheetFunction.Sum(rngChanging) = 0 Then
            ValidationString = "0"
        Else
            ValidationString = WorksheetFunction.Sum(rngChanging)
        End If
        ValidationString = ValidationString & ",Item2,Item3,Item4"
        .Validation.Add Type:=xlValidateList, Formula1:=ValidationString
    End With
End If
End Sub
于 2013-01-23T18:54:34.807 に答える