Excel VBA: 条件が満たされた場合に行全体を処理からスキップする

Excel VBA: 条件が満たされた場合に行全体を処理からスキップする

みなさんこんにちは。私は Excel (現在のバージョン 2010) の VBA コーディングに比較的慣れていないのですが、組織がリリースするテーブル内の小さな値を抑制する簡単なプログラムを改善しようとしています。私のデータの形式は次のとおりです。

一番左の列 (通常は C) には行ラベル (例: 病院、自宅、その他、欠落データ) があります。次の列には、そのカテゴリのレコード数があります。最後の列には、その行のパーセンテージ値があります。

結果を報告する際、セル サイズ 1 ~ 5 は常に抑制されます。ただし、「欠落データ」行のレコード数は抑制されません。

このフォーラムの他のユーザーの支援を受けて、テーブル内のすべての n 値を "<6" に置き換えるプログラムである次のマクロを生成しました。フォーマット ステートメントを使用する理由は、パーセンテージを抑制したくないためであり、パーセンテージは常に 1 つの小数点を持つ数値としてフォーマットされます。

Sub SuppressN()
Dim rng As Range, cell As Range
Set rng = Selection
If rng Is Nothing Then Exit Sub
For Each cell In rng.Cells
   If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And 
   cell.Value <= 5 Then cell.Value = "<6"
Next
End Sub

私がやりたいのは、Excelに「Missing Data」という文字列が見つかった場合はコードを実行しないように指示することです。その行のすべての値

ご協力いただければ幸いです。ありがとうございます!

答え1

行をスキップしたい場合は、Cellsを に分割しRows、条件を使用して行を実行するかどうかを決定します。 実際には、Rows最初に に分割し、Cells各行の を実行します。 がどこにMissing Data表示されるかがわかっている場合は、これが最も簡単に実行できます。

コード条件が含まれ、Selectionbyを通過するための外側のループが追加されますRows

Sub SuppressN()

    Dim rng As Range
    Set rng = Selection

    If rng Is Nothing Then Exit Sub

    'go through by rows first
    Dim rng_row As Range
    For Each rng_row In rng_data.Rows
        If rng_row.Cells(1, 1) <> "Missing Data" Then
            'if good keep going on all the cells
            Dim cell As Range
            For Each cell In rng_row.Cells
                If cell.NumberFormatLocal = "#,##0" And cell.Value >= 1 And cell.Value <= 5 Then
                    cell.Value = "<6"
                End If
            Next
        End If
    Next
End Sub

写真はビフォーアフター

前に 後

条件を除外してコードを実行したのは、NumberFormatそれをエミュレートしたくなかったからであることに注意してください。変更する必要がないように、最終コードでは条件を戻しました。

このコードでは、行のどこかに が存在することを確実に確認する方法が必要ですMissing Data。私は列の最初のセルを確認しましたが (これは、お持ちのセルと似ています)、この確認は他のさまざまな方法で行うことができます ( を使用するFind、ループして値を確認するなど)。

関連情報