2

英国の日付と通貨で書式設定されたセルが混在する Excel 2003 スプレッドシートがあります。スプレッドシートの構造を変更できません。VBA では、ワークシートの変更イベント中に、結合されたセルで構成される多数の範囲からユーザーがデータを削除したかどうかを確認したいと考えています。IsNull と IsEmpty を試しましたが、結合されたセルでは機能しません。Range.value = "" を使用すると、エラーがスローされます。

簡単に言えば、

変更イベントが発生し、変更が結合されたセルで構成される範囲を含み、かつ変更が結合されたセルからのデータの削除である場合 Then
Exit Sub Else 私の既存のコードはこれをカバーしています... End if

簡単な解決策についてフォーラムを広く読んだことがありますが、まだ何もうまくいきません。助けてくれてありがとう。ありがとう、そして素晴らしい仕事を続けてください!!

4

1 に答える 1

3

イベントを処理するときは、次のChange3 つのシナリオを考慮する必要があります。

  1. TargetUnmerged細胞のみからなる

  2. Target単一のMerged範囲のみで構成される

  3. Target1 つ以上のMerged範囲と 0 個以上のUnmergedセルで構成される

Range.MergeCellsプロパティは、次の可能性を明らかにします。

  1. Range.MergeCells = FALSE

  2. Range.MergeCells = TRUE

  3. Range.MergeCells = NULL

範囲内の各セルを個別に調べて、どれがマージされているかを確認Range.MergeCells = NULLする必要がある場合Target

このようなもの

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cl As Range

    If IsNull(Target.MergeCells) Then
        'Changed Range contains one or more Merged cells and other cells
        For Each cl In Target.Cells
            If cl.MergeCells Then
                ' only consider top left cell of a merged range
                If cl.Address = cl.MergeArea.Cells(1, 1).Address Then
                    If cl = "" Then
                        MsgBox "Merged Cell Deleted " & cl.MergeArea.Address

                    End If
                End If
            End If
        Next
    Else
        If Target.MergeCells Then
            ' Changed Range is a single Merged cells
            If Target.Cells(1, 1) = "" Then
                MsgBox "Merged Cell Deleted " & Target.Address

            End If
        Else
            'Changed Range is Unmerged cells only
        End If
    End If
End Sub
于 2013-01-05T02:35:20.423 に答える