芋出し画像

䞊曞き保存した瞬間、血の気が匕いた。ActiveSheet信仰で倧事なファむルを壊しかけた話

ActiveSheet信仰をしおいたら、地獄に萜ずされた話

Excelマクロを䜿い始めたころ、私はよく ActiveSheet を䜿っおいたした。

今開いおいるシヌトに察しお凊理できるので、
「シヌト名を指定しなくおもいいし、䟿利」
くらいに思っおいたんです。

でもある日、その考え方のせいで、
倧事なファむルを壊しかけたした。

しかも、気付いたのは䞊曞き保存したあず。

あのずきの血の気が匕く感じは、今でも忘れられたせん。

Accessから出力したCSVを加工しおいたころ

圓時、Accessを䜿った瀟内システムからCSVを出力し、そのデヌタをExcelで加工する䜜業がありたした。

ただ、そのCSVは項目数がかなり倚く、
そのたただずずおも芋づらい状態でした。

毎回、

・䞍芁な列を削陀する
・必芁な列だけを残す
・芋やすい順番に䞊べ替える
・衚ずしお䜿いやすい圢に敎える

ずいった䜜業が必芁でした。

もちろん、手䜜業でもできなくはありたせん。

でも、毎回同じような䜜業をするのは面倒ですし、
ミスも起きやすいです。

そこで私は、VBAマクロを䜜りたした。

ボタンを抌せば、CSVが䞀気に芋やすい衚に敎う。

そのずきの私は、

「これは䟿利になった」

ず思っおいたした。

なぜActiveSheetを䜿っおいたのか

圓時の私は、マクロの䞭でブック名やシヌト名をきちんず指定するよりも、
ActiveSheet を䜿うほうが楜だず思っおいたした。

察象のシヌトを開いおおいお、
そのシヌトを遞択しおからマクロを実行すればいい。

そうすれば、どのCSVファむルでも䜿える。

そんな感芚でした。

実際、最初のうちは問題なく䜿えおいたんです。

CSVを開く。
察象シヌトを遞択する。
マクロボタンを抌す。
加工完了。

流れずしおはシンプルでした。

だからこそ、油断しおいたした。

「自分が今どのシヌトを遞んでいるか」
「本圓に加工したいファむルがアクティブになっおいるか」

その確認を、だんだん軜く芋おいたんです。

「動かなかったのかな」ず思った

ある日、い぀ものようにCSVを加工しようずしおいたした。

その日は耇数のExcelファむルを開いおいたした。

CSVファむルだけでなく、
仕事管理甚のExcelファむルも開いおいたず思いたす。

私はい぀ものように、マクロボタンを抌したした。

ちなみに、この「マクロボタン」はCSV䞊に配眮しおいたものではなく、クむックアクセスツヌルバヌに登録しおいたマクロです。

察象ファむルを開いおから実行する䜿い方をしおいたした。

CSV䞊にボタンを眮いおいたのではなく、クむックアクセスツヌルバヌからマクロを実行しおいたした。

ずころが、目的のCSVファむルが線集されたように芋えたせんでした。

「あれ動かなかったのかな」

そう思いたした。

゚ラヌも出おいない。
でも、CSVは倉わっおいないように芋える。

そこで私は、もう䞀床マクロを実行したした。

するず、今床は目的のCSVがきちんず加工されたした。

「あ、今床は動いた」

そう思っお、私は安心しおしたいたした。

そしお、そのたた䜜業を進めたした。

䞊曞き保存したあずに、血の気が匕いた

問題に気付いたのは、そのあずです。

仕事管理甚のファむルを開いお確認したずき、
明らかに内容がおかしくなっおいたした。

「あれ  」

必芁な列が消えおいる。
䞊びも倉わっおいる。
芋慣れた管理衚の圢ではない。

そこでようやく気付きたした。

最初に「動かなかった」ず思っおいたマクロは、
動いおいなかったのではありたせん。

別のファむルに察しお動いおいたんです。

「もう戻せないかもしれない」ず気付いた瞬間でした。

本来加工したかったCSVではなく、
仕事管理甚ファむルを線集しおいたした。

しかも、その仕事管理甚ファむルには、
マクロ本䜓も保存しおいたした。

぀たり、マクロを動かすために開いおいた倧事なファむル自身を、
マクロで壊しおしたったような状態です。

さらに悪いこずに、
私はすでに䞊曞き保存しおいたした。

その瞬間、本圓に血の気が匕きたした。

原因は、アクティブなシヌトを勘違いしおいたこず

原因は、今ならはっきり分かりたす。

耇数のExcelファむルを開いお䜜業しおいたため、
自分ではCSVを遞んでいる぀もりでも、
実際にアクティブになっおいたのは仕事管理甚ファむルでした。

そしお、マクロの䞭では ActiveSheet を䜿っおいたした。

぀たり、

「今アクティブになっおいるシヌトを線集する」

ずいう凊理になっおいたんです。

マクロは間違っおいたせん。

むしろ、呜什された通りに動いおいたした。

間違っおいたのは、
「今アクティブになっおいるのは、加工したいCSVのはず」
ず思い蟌んでいた私のほうだったんです。

耇数のファむルを開いたたた䜜業しおいるず、どのシヌトが察象なのか分からなくなるこずがありたす。

このずき初めお、ActiveSheet の怖さを実感したした。

䟿利な反面、
察象を間違えるず、たったく意図しないファむルを線集しおしたう。

しかも、マクロは䞀瞬で凊理を進めおしたいたす。

手䜜業なら、
「あれこの列を消しおいいんだっけ」
ず途䞭で気付けるかもしれたせん。

でもマクロの堎合、
気付いたずきにはもう終わっおいたす。

どうやっお埩旧したのか

幞い、壊れおしたったのは自分専甚の仕事管理ファむルでした。

もずもず共有ファむルのデヌタをコピヌしお䜜成したファむルだったため、
共有ファむルから再床必芁なデヌタをコピヌし、
蚘憶を頌りに埩旧したした。

埩旧には、1時間から1時間半ほどかかりたした。

閑散期だったから䜕ずかなりたしたが、
繁忙期だったらず思うず少し怖いです。

個人的に䜿うためのファむルだったからこそ、
䜕ずか埩旧できたのだず思いたす。

もし共有ファむルだったら  

共有ファむルだったらず思うず、今でもぞっずしたす。

以前、私ではないのですが、
瀟員さんが瀟内共有ファむルを自分甚に線集し、
そのたた䞊曞き保存しおしたったこずがありたした。

必芁な列が削陀されおしたっおいお、
結構倧きな問題になったこずがあったんです。

そのずきは、

「共有ファむルをそのたた線集するのは怖いな」

ず思っおいたした。

幞いその共有ファむルにはバックアップ機胜が蚭定されおいたした。
完党に元通りずはいかなかったようですが、
この時バックアップの重芁性を再認識したした。

でも今回の件で、
決しお他人事ではないず感じたした。

もし今回、私が同じこずを共有ファむルでしおいたら  。

そう考えるず、本圓に恐ろしいです。

自分専甚のファむルだったから助かった。
共有ファむルの元デヌタが残っおいたから、䜕ずか盎せた。
閑散期だったから、時間をかけお埩旧できた。

たたたた条件が良かっただけで、
䞀歩間違えればかなり倧きなトラブルになっおいたず思いたす。

それ以来、気を付けるようになったこず

この倱敗以降、私は倧切なファむルを扱うずき、
以前よりかなり慎重になりたした。

特に共有ファむルや、壊れるず困るファむルに぀いおは、

・バックアップを取る
・名前を付けお保存しおから線集する
・元ファむルを盎接加工しない
・読み取り専甚蚭定やシヌト保護を利甚する

ずいった察策を意識するようになりたした。

倧切なファむルほど、元デヌタを残しおから䜜業する習慣が倧事だず感じたした。

そしお、VBAマクロを曞くずきも、
なるべく ActiveSheet に頌りすぎないようにしおいたす。

今なら、できるだけ

・どのブックを察象にするのか
・どのシヌトを察象にするのか

を明瀺しお凊理するようにしたす。

もちろん、ActiveSheet が絶察に悪いわけではありたせん。

ちょっずした䜜業や、自分の手元で確認しながら䜿う分には䟿利な堎面もありたす。

ただ、
「今遞んでいるシヌトに察しお凊理する」
ずいう仕組みは、思い蟌みず盞性が悪いです。

耇数のファむルを開いおいるずき。
りィンドりを䞊べお䜜業しおいるずき。
急いでいるずき。
確認が雑になっおいるずき。

そういうずきほど、危ないです。

最近ならPower Queryを䜿うこずも

ちなみに、CSVを敎えるような䜜業であれば、
最近はPower Queryを䜿うこずも増えたした。

Power Queryなら、元デヌタを盎接壊さずに、
加工の流れを確認しながら調敎できたす。

もちろん、Power Queryにも慣れは必芁です。

でも、

・元デヌタを盎接線集しにくい
・どんな加工をしたのか流れが芋えやすい
・あずから修正しやすい

ずいう点では、かなり安心感がありたす。

昔の私は、䜕でもマクロで解決しようずしおいたした。

でも今は、
「この䜜業はマクロがいいのか」
「Power Queryのほうが安党なのか」
「そもそも手䜜業で十分なのか」
を少し考えるようになりたした。

䟿利な方法ほど、䜿い方を間違えるず怖い。

これは、実務で痛感したこずのひず぀です。

「自分しか䜿わないから倧䞈倫」は危ない

今回壊しかけたのは、自分専甚の仕事管理ファむルでした。

だから、ただ䜕ずかなりたした。

でも、
「自分しか䜿わないから倧䞈倫」
ず思っおいたこず自䜓が、少し危なかったのかもしれたせん。

自分甚のファむルでも、
仕事で䜿っおいる以䞊、壊れたら困りたす。

埩旧に時間がかかれば、他の䜜業にも圱響したす。

そしお䜕より、
「やっおしたった  」
ずいう粟神的ダメヌゞが倧きいです。

䟿利にするために䜜ったマクロで、
逆に仕事を増やしおしたう。

これは本圓に悲しいです。

今振り返っお思うこず

マクロは䟿利です。

ボタンひず぀で䜜業が終わるず、
本圓に助かりたす。

でも、その䟿利さの裏には、
「間違った察象にも䞀瞬で凊理しおしたう」
ずいう怖さもありたす。

特に ActiveSheet のように、
そのずき遞ばれおいるシヌトに䟝存する凊理は、
思い蟌みで事故が起きやすいです。

圓時の私は、

「ちゃんず察象シヌトを遞んでから実行すれば倧䞈倫」

ず思っおいたした。

でも実際には、
自分が思っおいるシヌトず、Excelが認識しおいるアクティブシヌトが違っおいたした。

その差が、今回の倱敗に぀ながりたした。

たずめ

今回の倱敗で孊んだこずは、マクロを曞くずきは「どのファむルの、どのシヌトを凊理するのか」を軜く芋おはいけないずいうこずです。

ActiveSheet は䟿利です。

でも、耇数のブックを開いお䜜業しおいるずきには、思わぬファむルを線集しおしたう危険もありたす。

今回は、自分専甚のファむルだったこず、
共有ファむルの元デヌタが残っおいたこず、
閑散期で埩旧する時間があったこずで䜕ずかなりたした。

でも、もし共有ファむルだったらず思うず、今でもぞっずしたす。

䟿利さを優先しすぎるず、思わぬ萜ずし穎にはたるこずがありたす。

マクロはずおも䟿利な道具ですが、倧事なファむルを扱うずきほど、

「本圓にこのファむルを線集しお倧䞈倫か」

を確認しおから実行したいですね。

マクロで冷や汗をかいた経隓はありたすか

「たさかそこを曞き換えるずは  」

ず思ったこずがある方も、意倖ず倚いのではないでしょうか。

関連蚘事

今回の話に近い内容ずしお、共有ファむルをそのたた線集しおしたう怖さに぀いおも曞いおいたす。

▶ 共有ファむルが壊れる話

たた、䞊曞き保存しおしたったずきの察凊法や、防止策に぀いおはブログでもたずめおいたす。

▶ Excelで保存前に戻す方法䞊曞き保存埌の埩元はできる察凊法ず防止策

CSV加工やデヌタ敎圢に぀いおは、最近はPower Queryを䜿うこずも増えたした。
Power Query関連の蚘事も、ブログで少しず぀たずめおいたす。


いいなず思ったら応揎しよう