列で40列、行で3500行ぐらいのデータがあり、
そのうちの半分に値が、半分はブランクというデータがあります。そこから置換でブランクを”0”にするということをしたいのですが、処理するのに、
15~20分ぐらい掛かってしまいます。
置換ではなく、他にマクロ等でブランクセルのみを”0”にする良い方法はないでしょうか?
マクロの実装例です。
対象範囲を選択して実行してみてください。
Sub fillZero() Dim rng As Range For Each rng In Selection If IsEmpty(rng) Then rng.Value = 0 End If Next End Sub
ちょっと正攻法ではないかもしれませんが、以下の方法ではいかがでしょうか?
シートをコピーする。
元のシートのデータをCTRL+A等で全選択し、CTRL+C等でコピーする。
コピーしたシートの一番左上のセル上でマウス右クリックまたはメニューの編集の[形式を選択して貼り付け」を選び、その中にあるリンク貼り付けを選ぶ。
ブランク部分は0、それ以外の部分は元のシートの該当個所を参照する形になる。
コピー後のシートを再度全選択(CTRL+A)し、同じ場所に形式を選択して貼り付けで今度は値のみを選択する。
私の環境ですと、置換ではちょっと待たされましたが、上記のアクションをとれば、さほど時間はかかりませんでした。(40列×4000行くらいのデータでやったのですが、置換でも15分も待たされはしませんでしたが....)
例示のようなファイルを作成して、
A1を選択
→Ctrl+Shift+End
→Ctrl+H→
「検索する文字列」をそのまま、置換後の文字列「0」で「すべて置換」
という手順で置換してみましたが、私のPCでは数秒で処理することができました。
WinXP、Excel2002、Pen4 2.4GHz 512MBの環境です。
環境がかなり劣るということでしたら、PCの処理能力のせいということもあると思います。
環境にあまり差がないようでしたら、
データ自体の問題も考えられます。
(実際のデータや環境がわからないのでなんとも言えませんが)
単に手法の問題ならばいくつか方法があります。
Sub blank_0() Cells.Replace What:="", Replacement:="0", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub
一瞬で0が書き込まれます。
これは複数のまとまっていないセルに対して同じ数字を加減乗除するのに便利です。
(例えば数字を全部1000で割って千円表示するなど)
以上ご参考まで。
>「空白セル」にチェックし、OK
ここで”選択範囲が大きすぎます”とエラーに
なってしまいました・・・
以下の手順で できるかもしれません。
まず、
列で40列、行で3500行ぐらいのデータと同じだけの
エリアに 0を入れて用意します。
それをコピーし、
元のところで 右クリック、
形式を選択して貼り付け で
演算の箇所の加算を 選択し、OKとします。
すると 貼り付け分が すべて 0加算され
ブランクセルも 0になります。
文字列のセルは そのままです。
ただ、数式の箇所には +0 が 付与されますので
数式がある場合は、いまいちかもしれませんが。
ありがとうございました。
結構いいかもしれません。
#3のrikuzaiさんの回答に似ていますが..
3番目までは同じです。
マクロでは、
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "0"
選択した範囲で上の操作をキー記録したものです。
環境にもよるでしょうが、数秒で終わると思います。
ブランクのセルが、空白が入力されているセルなのか、空っぽのセルなのか?
悩んだのですが、空っぽのセルとして回答しています。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | りくっち | 1366回 | 1298回 | 141回 | 2007-10-03 15:44:01 |
すいませんVB初心者なのですが、
例えば"K"列と"L"列を選択した場合の式は
どうなるのでしょうか?お願いします。