0

VBA を使用して、常に同じ形式の生成された CSV ファイルにさらに書式を設定しています。For Each ループに問題があります。最初の列だけで判断できる空白行が複数ある場合、ループは行全体を削除します。

Dim rowCount As Integer
For Each cell In Columns("A").Cells 
    rowCount = rowCount + 1
    '
    ' Delete blank row
    '
    If cell = "" And cell.Offset(1, 0) = "" Then
        Rows(rowCount + 1).EntireRow.Delete
        spaceCount = 0
    End If
Next

ある時点で、呼び出しの 1 つのループの値に "" の値がありません。値が空であるため、クラッシュが発生します。これを解決するには、その比較の前にセルのタイプをテキストに変更するとうまくいくと思いますが、その方法がわかりません(インテリセンスはありません!!!)

では、VBA でセル型をどのように変換するのですか、それとも他にどのように問題を解決するのでしょうか?

ありがとう。

4

2 に答える 2

2

書式設定に関係なくセルの値を評価するため、cell.Value代わりに使用します。F1をcell.Text押して、両方の詳細を読んでください。.Value.Text

For Each cell In Columns("A").Cellsシート内のすべての行 (Excel 2010 では 100 万行以上) をテストすると、Excel がクラッシュする可能性があるため、ステートメントには注意してください。

編集:

関数も考慮してくださいTRIM。文字列の前後のすべての空白を削除します。セルに空白 " " がある場合。人間の目には空のように見えますが、内部にスペースがあるため、"" とは異なります。空のセルのように扱いたい場合は、次を試してください。

If Trim(cell.value) = "" then
于 2012-05-14T21:29:08.593 に答える
0

@andy ( https://stackoverflow.com/users/1248931/andy-holaday ) がコメントで述べFor Eachたように、間違いなく進むべき道です。これにより、行間にスペースを入れることもできます。

コード例:

Sub ListFirstCol()

Worksheets("Sheet1").Activate
Range("A1").Activate

For Each cell In Application.Intersect(Range("A:A"), Worksheets("Sheet1").UsedRange)
    MsgBox (cell)
Next

End Sub

ありがとうアンディ!

于 2015-10-22T15:18:01.533 に答える