- ベストアンサー
エクセル 置換中の値の更新
01月→02月と置換をしたいのですが、ネットワーク内の他のシートやファイルを参照するため(他のPCから入力してもらう日報等)、1つ置換するたびにそのシートを参照しているようで非常に時間がかかっています。(1シート10万個ほど置換する必要があるファイルもあり・・・) 「置換だけ先に実行する方法はないでしょうか?」 シート名が同じファイルがあるため参照するシートを先に読み込んでおくことも出来ず・・・集計する項目が増えたり年度末は置換作業が多く、置換したまま帰宅→次の朝PCフリーズ・・・というトホホな状態が続いております。 皆様の知恵をお貸しください。宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ツール→オプションの計算方法のタブを開いて、計算方法を 手動にしてみてはいかがでしょうか。 置換作業が完了してから F9で再計算を実行することが出来ます。
その他の回答 (3)
- isoyujin
- ベストアンサー率21% (145/662)
一旦外部ファイルに書き出した後に、エディーター(ワープロみたいの)に読み込んで、エディターの機能で一斉に置換する。その後、エクセルに読み込む:って言うのはどうですか?一斉に置換するソフトがあればですが。。一太郎は行けそうに思います。 簡単なC言語を使って簡単に出来そうな気もしますが。 手元にソフトがなくて具体的なアドバイスが出来ずにm(__)m
お礼
職場のPCに一太郎がなくインストールも不可で試すことができませんでした^^; これだ!と思ったのですが残念・・・ 回答ありがとうございました!
- pauNed
- ベストアンサー率74% (129/173)
こんにちは。 >(1シート10万個ほど置換する必要があるファイルもあり・・・) というのはやはり多いと思います。 もしマクロに抵抗ないなら、サンプルですが、 選択範囲に対して、一旦配列に入れて、VBAのReplace関数で置換して元に戻す、という処理です。 置換したい範囲を選択して実行する必要があります。(試す場合はテスト環境で) Sub sample() Const s1 As String = "01月" '置換前文字列 Const s2 As String = "02月" '置換後文字列 Dim i As Long Dim j As Long Dim v '選択しているものがセル範囲でなければ何もしない If TypeName(Selection) <> "Range" Then Exit Sub Application.ScreenUpdating = False With Selection If .Count > 1 Then v = .Formula For i = 1 To UBound(v, 1) For j = 1 To UBound(v, 2) v(i, j) = Replace(v(i, j), s1, s2) Next j Next i .ClearContents .Formula = v End If End With Application.ScreenUpdating = True End Sub #あまり参考にならなかったらごめんなさい。
お礼
回答ありがとうございました!勉強不足で試すことも出来ませんでしたが・・・置換作業が一段落ついたら試してみたいと思います。
- isoyujin
- ベストアンサー率21% (145/662)
置換と言うのが良く分からないのですが・・・ そんなにデータが多くて時間が掛かるようなら、マクロとか、あるいは、エクセルではなくDBを直接プログラムで扱うようなシステムを考えた方が現実的では無いでしょうか?DBソフトでもいけそうな気がしますが、置換というのはイマイチ イメージできません。
お礼
回答ありがとうございます。定型の報告資料に値だけコピーできるようにしているようで、新しいシステムは難しいかもしれません・・・。 参考にしてみます。
お礼
回答ありがとうございました!「手動にする」+「置換範囲を小さくする」で時間が短縮されました。一気に複数シートを置換していたのも原因だったようでした(途中でフリーズなど・・・)