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


2

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

左端の列(通常C)には、行ラベル(例:Hospital、Home、Other、Missing Data)があります。次の列には、そのカテゴリのレコードの数があります。最後の列には、その行のパーセント値があります。

結果を報告するとき、常にセルサイズを1〜5に抑制します。ただし、「Missing Data」行のレコード数は抑制しません。

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

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に指示することです。

ご支援いただければ幸いです。ありがとう!


selectionコード内のを取り除き、別の手段で範囲を参照することをお勧めします。
レイスタファリアン

回答:


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、ループ、値のチェックなど)。


これが完璧に機能してくれてありがとう。ではごきげんよう。
user3771733
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.