自動化して配布している大きなデータセットがいくつかあります。テキストとして保存されている数字についてユーザーに警告する小さな緑色の三角形を削除したいと思います。私は次のコードを使用しましたが、大量のシートでは非常に遅いです。
Range(Cells(1, 1), Cells(lastrow, lColumn)).Select
'kill those dang green cell triagles
Dim rngCell As Range, bError As Byte
For Each rngCell In Selection.Cells
For bError = 3 To 3 Step 1
With rngCell
If .Errors(bError).Value Then
.Errors(bError).Ignore = True
End If
End With
Next bError
Next rngCell
ご覧のとおり、防止しようとしているエラーだけをすべてループするのではなく、すでに1/7の時間に削減していますが、それでも非常に遅いです。
また、私はすでに知っています
Application.ErrorCheckingOptions.NumberAsText = False
しかし、ユーザーのシステム設定を変更したくないので、使用したくありません。すべてのセルをループせずにループの効果が必要です。セルごとにループせずに範囲全体のチェックを停止するようにExcelに指示する方法はありますか?
これを行うための効果的で迅速な方法は非常に役立ちます。前もって感謝します!!
推奨される解決策は、文字列をExcelに取り込む前に、文字列を数値に変換することです。たとえば、SQLNVARCHAR
を使用していて、データベースにいくつかの数値がaとして格納されている場合、CONVERT(int, colName)
Excelに取り込むときにSQLステートメントでaを使用します。これはそれを数字として持ち込み、私はもはやそのメッセージを受け取りません。
現在、この種のオプションが利用できない場合は、別の方法でそのエラーを修正できます。テキストエラーとして格納されている数値がそれ自体と等しい値の範囲を設定するだけです。
例えば:
Sub Test()
Sheets("Sheet1").Range("A1:A3").Value = Sheets("Sheet1").Range("A1:A3").Value
End Sub
どこでA1:A3
この例では値の範囲がありますがテキストとしてもはや店にしたいです。
数値には先行ゼロがあるため、これらのセルのフォーマットを変更して、これらのゼロを次のように追加できます。
Sub Test()
Sheets("Sheet1").Range("A1:A3").Value = Sheets("Sheet1").Range("A1:A3").Value
'This assumes your numbers are 11 digits long
'Thus 11132 would display as 00000011132
Sheets("Sheet1").Range("A1:A3").NumberFormat = "00000000000"
End Sub
これにより、表示が変更され、先行ゼロが再び表示されます。このデータを何らかの方法でエクスポートする場合は、この特定の列が数値ではなくテキストとしてエクスポートされるようにするための手順を実行する必要があるかもしれませんが、詳細がなければこれ以上のことはできません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加