
みなさんこんにちは。私は 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
表示されるかがわかっている場合は、これが最も簡単に実行できます。
コード条件が含まれ、Selection
byを通過するための外側のループが追加されます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
、ループして値を確認するなど)。