はっしーのデジタルワーク

コンピュータ利用からデジタルに関わる様々なことを書き記します。

Excel2013のVBA(マクロ)は遅い  

Microsoft EXCELが多くの方に使われる理由の一つに、VBA(Visual Basic Application:マクロもこれに含まれると考えて良いです)があります。

例えば、
・ エクセルの中にフォームを作ってセルへのデータ入力を簡単にする。
・ ユーザーのある操作をイベントとして、プログラムを実行させる。
なんてことができるのですが、これを作るには、それなりにプログラミングの知識が必要です。

また、以前からマクロウイルスなんて厄介なものまで登場しています。
最近の標的型ウイルスで添付文書に仕掛けられていたのも、このマクロウイルスです。
当然気をつけて作って、また、利用しなければなりません。
最近、また猛威を振るっているとIBMが警告しています。

ところで、今日の話題ですが、これまで、Excelの2007や2010では、快適に動いていたものが、
Excel2013で利用すると、めっちゃ遅くなってしまった。こんな、話がネット上を賑わして(私の興味の中だけですが)おり、
そして私も巻き込まれてしまった。

私の場合は、なんとか解決できたので以下の「続きに」に記録しておきます。




-- 続きを読む --

Posted on 2015/09/05 Sat. 20:44 [edit]

category: excel

tb: 0   cm: 0

エンドユーザーさんは偉大です  

 昨年の12月
Microsoftのセキュリティアップデートを適用するとExcelのマクロとVBAが動かなくなった件での続報ですが、
私のお客さんでこれに遭遇してしまった人がいました。(アップデートすると間違いなく遭遇するはずなんで)

今週になって、お客さんBに私が作ったExcelアプリでボタン押せなくなっちゃったと言われました。
私:「えっ!?今になって?昨年末はどうしてたの?」(アップデートは去年実行したと思われるので)
お客さんB:「でも、Aさんがこうすれば使えるって!!」
私:「えっ!」

で、一昨日、お客さんの事務所へ年始の挨拶も含め伺った時に詳しい話を聞きました。

お客さんのところは、大組織のとある部門!
Windowsは、アクティブディレクトリという大規模なネットワーク利用方式で使っています。
MSFroms.exdファイルを探して削除すれば復活するのですが、当然お客さんのところのユーザーさん皆んなのPCには管理者権限はありません。このファイルを探すことも削除することもできません。

私:「これ、管理者権限ないと復旧できないですね。情報システム部門へMicrosoftのこの技術文書持っていて、このファイル削除してもらうしかないですね!?」ということになったのですが、

お客さんA「そうなんだけど、あそこへ持っていっても、すぐに対応してもらえるかわからない、PCがない間は仕事にならなくなってしまう!」と
妙に納得!
私:「ところで、Excelのボタン効かなくなってからどうやって使っていたの?」
お客さんA「作っていただいたユーザー定義のリボンメニューからなら普通に使えますよ!」
私:「えっ!!!」
  「そうか、ユーザー定義リボンメニューは、ActiveXじゃないですね!!よく見つけましたね」
お客さんA「休日出勤して動かなくて困って色々触っていたら、これが動いたので、みんなにこれで使えるよと!」

これ使われないかもしれないが作っておこうと考え、作ってあったものが功を奏しました。これもマーフィーの法則の一つでしょうね、すばらしいお客さんに感謝です。
それで、今後の対策を相談した結論として、あと2週間でPC入れ替わるので、仕事止められないからそのままにしておこうということになりました。
めでたし、めでたしです。

Microsoftさん、読んでくれていますか!?
このお客さま、この度、ようやくVistaから7に入れ替わるのです。



Posted on 2015/01/08 Thu. 14:05 [edit]

category: excel

tb: 0   cm: 0

Excelをアップデートしたときの不具合解決策が見つかりました  

12月のWindows恒例のアップデートにおいて、Excel のマクロやVBAが動作しなくなる件ですが、解決策が見いだされました。

Windows7では、Cドライブの次のファイルを削除して再起動させれば元通りになります。
C:¥ユーザー\AppData\Local\Temp\Excel8.0\MSForms.exd(数字の所は、バージョンによって異なります)
Windows8.1でも同様です。(場所は、この通りではないかもしれません。)

これは、ActiveXに脆弱性が見つかり、それに対応するために更新プログラムが提供されたのですが、上記のファイルが旧バージョンの問題あるActiveXで作成されているため、マクロ等が無効になってしまう事が発見されました。更新プログラム等のアンインストールせずに上記ファイルを削除するという対応で大丈夫です。

その他の問題は、マイクロソフトが公開を停止したのもありますので、現時点でセキュリティアップデートすれば問題は発生しないと思います。
アップデートを躊躇されていた方、もう大丈夫です。(ただし、会社組織等では、システム管理者の指示に従ってください。)

Posted on 2014/12/12 Fri. 18:07 [edit]

category: excel

tb: 0   cm: 0

〔Excel〕重複データのチェック方法  

先日、仕事で嵌ってしまった一意性違反を起こすデータをExcelシート上で事前にチェックする方法です。
IF式とCOUNTIF関数を使います。

例えば、A列の値に重複値がないかをB列に表示させる方法です。
Excelシートの1行目は、見出し行として、10000行目までのデータがある場合ですが、

A2セルの値がA10000セルまでの間に重複するデータがないかを判定します。
B2セルに次の式を入力します。
  = IF(COUNTIF($A$2:$A$10000,A2)>1,"重複","-")
※ この式を、B3セルからB10000セルまでコピーします。
  A2の部分が相対セルになっていますので、コピー先では、n行目では、Anをなります。

まず、COUNTIF($A$2:$A$10000,A2) の意味は、A2のセルの値が、A2セルからA10000セルまでの間にいくつあるかです。重複がなければ結果は、自分自身をカウントした「1」となります。
他のセルに同一の値があれば、「2」以上となります。

ここが「2」となった場合は、IF式で
  IF( 2 > 1,"重複","-") で
  2 > !が「真」であれば、最初のカンマの後の「重複」の文字がA2 セルに表示されます。
  「偽」となれば、「ー」がセルに表示されます。
  IF ( 判定式 , 「真の場合の代入値」 , 「偽の場合の代入値」 ) が、IFの式の処理内容です。

ただし、データの列数やマシンの性能にもよりますが、数万行のデータであれば結果が出るのに数分要する場合もあります。
注意すべき事項は、このようなデータを扱う場合、データと式をセットするまでは、再計算オプションを無効にしておかないと、まるでハングしてしまったような状態になります。
全てのデータと式のセットが終わった段階で、
「数式」リボンメニューから「計算方法」グループの「再計算実行」をクリックします。
この処理も数分要する場合がありますので、Excelのステータスバーに注意してください。
計算経過が、%値で表示されています。これを見逃すと、重複がないと思い込んでしまう場合があります。
(特に、せっかちの方は、要注意です。私もこの部類です。)

もう一つのチェック方法として、「ホーム」リボンメニューの「スタイル」から「条件付き書式」→「セルの強調表示ルール」→「重複する値」と進むと重複しているセルに色を付ける機能がありますが、処理速度は、上記の場合以上の時間を要します。

Posted on 2014/05/27 Tue. 20:53 [edit]

category: excel

tb: 0   cm: 0

Excelのデータは、ZIP圧縮されたXMLファイルの塊りです  

 Microsoft Excelのファイルは、XMLファイル群をZIP圧縮したものです。

突然とんでもない話題の備忘録ですが、豆知識として紹介します。

1年程前、Excel  2007(2010以降でも動くのですが)でVBA(Visual Basic Application)を利用したシステムを依頼されて作成しました。そこで、メニューを用意するために、作成した機能をユーザー定義のリボンメニュー(Excelの画面上部にアイコン等で表示される機能ボタン見たいなものです)にアイコンで割り当てました。最近、当システムの改善を頼まれて実施したのですが、ユーザーカスタマイズのリボンメニューの定義内容を変更する必要があって直したのですが、修正したものを適用させる時に方法を忘れてしまってしばらく呆然としてしまいました。

最後には思い出すことができたのですが、普段はEvernote等に自分が体験し習得したノウハウ(たいしたものではないですが)を記録して、いつでもどこでも自分自身で参照できるようにしていたのですが、今回自分の備忘録が見つからなくて大変困ったのでした。また、1年前は忘れずはずがないと思いこんでいたせいもあります。そんなことを防ぐためにも最近、多重防御のため、ブログにも書き留めておくようにしたのです。

前置きは長くなりましたが、Excelのデータファイル(2007以降の.xlsxファイルです)は、複数のxmlファイルが所定のフォルダに構成されZip圧縮されてものです。
それでは、サンプルを使って解読してみましょう。
まずは、以下のようなExcelファイルを作りました。五十音のひらがなを並べただけです。
テスト作成したエクセルデータ 
ファイル名は、Gojuon.xlsxとしました。
最初に、ファイル名の拡張子を変更します。Gojuon.xlsx  を  Gojuon.zip  とするだけです。
そして、このZipファイルを解凍してみて下さい。Macで解凍した結果の画面は、以下の通りです。
Excelデータの内部構造

実は、PDFファイルも同じです。拡張子を.zipに変更して解凍してみましょう。
WindowsでもMacでも同じです。
このExcelファイルをZip解凍してみた所で、わざわざxmlファイルを修正してExcelファイルを直すような事をする人はいないと思います。
私は、ユーザー定義のリボンメニューを変更する必要から、xmlファイルを修正しなければならなかったのです。リボンメニューを日本語で表示させるためにです。ユーザー定義のリボンメニューの作成方法については、長くなりますので、別の機会に掲載させていただきます。

最後に重要な事。解凍し編集したものを元のようにxlsxファイルを戻す方法です。解凍時とは逆に、zip圧縮して拡張子を.xlsxにすれば良いだけなのですが、問題は、どこのレベル(フォルダ位置で)で圧縮ファイルを作るかです。
解凍時には、ファイル名でフォルダが作られてその中に解凍されますが、zip圧縮ファイルに戻す時は、圧縮する場所を間違えないようにしましょう。サンプルの場合では、Gojuonフォルダの中で全てのファイルとフォルダを選択してzip圧縮する事を忘れないようにして下さい。
圧縮・解凍のアプリの性格を考えれば当然の事と後で気がつくのですが、急いでいる時はそれに気がつくまで、パニックに状態になります。しかも仕事の締切直前になっていますと!
で、備忘録に緊急掲載させていただいた次第です。これで、もう忘れることはないでしょう。


Posted on 2014/04/16 Wed. 13:53 [edit]

category: excel

tb: 0   cm: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

FC2ブログランキング

カウンター

ユーザータグ

メールフォーム

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード


▲Page top