[[20140715204353]] 『空白を取り除く』(あちゃこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空白を取り除く』(あちゃこ)

 質問1
 B列からBP列まで空白が入った文字列が、9万行にわたりびっしり詰まったデータが
 あります。
 その空白を取りたいのですが、作業列を設けてTRIMで取るにしてもこれだけの大きな
 データでは厳しいです。できれば処理の早い方法を教えてください。

 質問2
 A列に、文字列が全角で入っているものを半角にしたいのですが、
 この文字列も空白が入っており、空白除去を望みます。

     A       B    BP
 1 GS2        G231     G250
 2 VG48      G220     G230 
 3 GS20      G180     G237
 4 BS20      G060     G061

< 使用 Excel:Excel2010、使用 OS:Windows8 >


 >質問1

 ダメ元で。

 あまり(というか全く)お勧めしませんが、
 セル範囲をコピー
 ↓
 メモ帳に貼り付け
 ↓
 メモ帳上でスペースを空白(置換後の文字列には何も入れない)に置換
 ↓
 メモ帳をコピー
 ↓
 エクセルに貼り付け

 ※実際には試してません。
(カリーニン) 2014/07/15(火) 21:36

 B1:BP90000まですべてのセルにデータを入れて試しましたが出来ました。
 ただし、若干時間がかかります。※PCの性能にもよります。
(カリーニン) 2014/07/15(火) 23:37

ショートツしました

 早い遅いは別にして試してみました
 ↓このデータをA1:BP90000に入力(入力時間が1分弱)
  V G 4 8 
 Vの前と8の後ろ、文字間に半角スペース

 A:BPを選択して置換ボタンクリック
 5分20秒で約15,000行まで置換を確認(名前ボックスで進捗状態がわかる)
 待ちきれずタスクマネジャーから終了

 ↑このファイルをCSVにして同様手順
 約15,000行まで約4分30秒 タスクマネジャーから終了

 メモ帳貼り付けは5分待っても貼り付け完了せず
 これもタスクマネジャーから終了

 結構厳しい作業です

 10列くらいに分けて作業、を繰り返すのが少しは楽かもしれません ←チョット修正^^

(jun53) 2014/07/15(火) 23:41


 エクセルのみ
 B1:BP90000まで選択されている状態で置換→15,000行までで6分36秒(ESCで終了)

 エクセル+メモ帳
 B1:BP90000をコピー
 メモ帳に貼り付け→59秒
 メモ帳上で置換→1分9秒
 メモ帳をコピー
 エクセルへ貼り付け→45秒

 メモ帳ですと合計で2分53秒ほど(エクセルとメモ帳を行ったり来たりする時間は含めず)でした。

 エクセルで書式など設定している場合の影響は考慮していません。
(カリーニン) 2014/07/16(水) 00:31

 あれ?
 別シートに関数じゃだめなの?

 別シートのA1に=ASC(SUBSTITUTE(SUBSTITUTE(Sheet1!A1," ","")," ",""))
 A1をコピー。
 A90000まで選択、ペースト。
  →ペースト時間2〜3秒ほど

 同じくB1に=SUBSTITUTE(SUBSTITUTE(Sheet1!B1," ","")," ","")
 B1のセル枠右下をダブルクリック(これでB90000まで数式がコピーされる)
  →ペースト時間1〜2秒ほど

 B1からB90000まで選択された状態でコピー。
 C1からBP1まで選択。
 ペースト。
  →ペースト時間20秒ほど

 表全部を選択。元シートかこのシートか他のシートに値だけペースト。

 俺のPCもそんなスペック良い訳じゃないと思うけど、こんなもんで。
 どっちかというと計算式入れたままシート消す方が時間かかった(^^;
 今度から計算式消してから、シート消すわ…

(1111) 2014/07/16(水) 09:16


 下記のVBAで11万行チョイで私の環境だと約20秒ほど

 Sub test()
    Dim s As Single
    s = Timer
    With ActiveSheet.UsedRange
        .Value = Evaluate("trim(" & .Address & ")")
        .Columns(1).Value = Evaluate("asc(" & .Columns(1).Address & ")")
    End With
    MsgBox Timer - s
End Sub

(seiya ) 2014/07/16(水) 10:28


 多数の回答ありがとうございます。
 seiyaさんのVBAを例題でやってみるとすべてのセルが、A1のGS2になりました。
 なぜでしょうか?
(あちゃこ) 2014/07/16(水) 21:05

 おっと、下記に変更

  Sub test()
    Dim s As Single
    s = Timer
    With ActiveSheet.UsedRange
        .Value = Application.Trim(.Value)
        .Columns(1).Value = Evaluate("if(row(" & .Address & "),asc(" & .Columns(1).Address & "))")
    End With
    MsgBox Timer - s
End Sub
(seiya ) 2014/07/16(水) 21:42

seiyaさん、処理の速さに驚いています。ありがとうございました。 
(あちゃこ) 2014/07/16(水) 22:56

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.