石鹸箱 IV

VBA研究所に集まる方々の憩いの場です。みなさん自由にお使いください。
ここでは VBA の質問は厳禁。

4930 / 5126 ツリー ←次へ | 前へ→

【1769】Office 12 の互換性 YU-TANG 05/11/27(日) 21:46
【1770】Re:Office 12 の互換性 谷 誠之 05/11/27(日) 22:43
【1771】Re:Office 12 の互換性 YU-TANG 05/11/27(日) 23:33
【1773】Re:Office 12 の互換性 Kein 05/11/28(月) 15:58
【1777】Re:Office 12 の互換性 YU-TANG 05/11/30(水) 6:13

【1769】Office 12 の互換性
 YU-TANG WEB  - 05/11/27(日) 21:46 -

引用なし
パスワード
   こんばんは。

Office 12 の話題がボツボツ出てきていますが、今までのパターン
からして、VBA も使えて後方互換も保たれるはずなので、下の記事
ほどには気にしていませんでした。

http://www.itmedia.co.jp/news/articles/0506/06/news019.html

ただ、ふと思ったのですが、コードが動くということと、それが意図
した挙動になるかどうかはまた別ですよね。

Excel 12 の最大行数は現行の 16 倍に当たる 1,048,576 行に拡張
されるそうですが、そうすると今日たまたま見かけた次のような
コードはどうなってしまうんでしょう。

 Set LastCell = Range("A65536").End(xlUp)

これって、割とよく見かける最終行の取り方だと思うのですが、
Excel 12 では必ずしも真ではなくなってしまうわけで。

構文的にも問題ないし、コンパイラがチェックしてくれるとも到底
思えないので、まさか移行時に人力サルベージ…?

怖え〜〜。

【1770】Re:Office 12 の互換性
 谷 誠之 E-MAIL  - 05/11/27(日) 22:43 -

引用なし
パスワード
   YU-TANG さん、谷です。

>ただ、ふと思ったのですが、コードが動くということと、それが意図
>した挙動になるかどうかはまた別ですよね。

そうですね。

プログラミングの世界にも「建前」と「本音」があります。
「建前」は、「実行環境が必ずこうなっているはずだ、という決め付けでプログラムを作ってはいけない」というものです。

私が個人的に気になるのは、「メニューが廃止され、『コマンド タブ』と呼ばれるUIが新たに実装された」という点です。

http://www.microsoft.com/office/preview/uioverview.mspx

私はマクロを作ると、それのためのメニューをわざわざ作るのは面倒なので、

  Dim SubMenu As CommandBarButton
  Set SubMenu = CommandBars("Worksheet Menu Bar").Controls("ツール(&T)").controls.Add(msoControlButton)
  With SubMenu
    .Caption = メニュー名
    .OnAction = マクロ名
    .Style = msoButtonCaption
  End With

みたいなことをやって、「ツール」メニューにメニュー項目を追加して動かすということを時々やっています。

もちろんこれは「『ツール』というメニュー項目がワークシート メニュー バーに必ず存在する」ということを前提に書いてあるコードであるわけで、「Excelは必ずこうなっているはずだ」と決め付けてコードを書いている、お行儀の悪いプログラムということになります。

>Excel 12 の最大行数は現行の 16 倍に当たる 1,048,576 行に拡張
>されるそうですが、

1,048,576行×16,384列 になるそうですね。

そうすると今日たまたま見かけた次のような
>コードはどうなってしまうんでしょう。
>
> Set LastCell = Range("A65536").End(xlUp)
>
>これって、割とよく見かける最終行の取り方だと思うのですが、
>Excel 12 では必ずしも真ではなくなってしまうわけで。

建前上は「Excelの最終行は 65536行だ」と決め付けて書いてあるコードなわけですから、これもマイクロソフトに言わせたら「お行儀の悪いプログラムだ」ということになりますね。

しかし、建前は建前。本音は本音。
2000年問題を思い出します。

YU-TANG さんのおっしゃるとおり、上記のコードは必ずしも真にはなりません。
例えばExcel 12 では、上記の拡張によって、ひとつのワークシートですべての都道府県のすべての郵便番号(約12万件)が表せるようになりました。だからといって12万行入力されているワークシートを作ったら、もう上記のコードは正常には動作しませんね。

使われているワークシート範囲を調べる UsedRange というプロパティがあるんですが、こいつ時々誤動作するんですよ。だからあまり使えない。

今まで列は 256列までだったので、不幸にも列を示す変数を Byte 型で宣言していた人は、コードの作り直しになることでしょう。

私が上で書いたコードは、正常に動作するかどうかわかりません。
そもそも、ワークシート メニュー バーにはもう「ツール」というメニューがないわけですから、おそらくエラーになってしまいます。(Excel 12 のベータ版を入手した人、誰か確認して、教えてください)

実行環境を「決め付けて」コードを書いた側が悪いのか、それともそんな開発環境しか提供してくれない側が悪いのか・・・

一方、Office 12 は、Windows XP 以降でしか動作しません。
これがどれほどの影響を与えるか、ということも楽しみです。
私は個人的に、Office 2000 以降を持っている人が Office 12 に乗り換えるという人は、ほとんどいないのではないか、と想像しています。
新しいPCを買ったら Office 12 がついてきたとか、ボリューム ライセンスで購入している企業が2年後ぐらいに全社的に入れ替えるか、のどちらかではないか、と。

しかし、全バージョンをサポートしていくのも大変でしょうねぇ・・・

【1771】Re:Office 12 の互換性
 YU-TANG WEB  - 05/11/27(日) 23:33 -

引用なし
パスワード
   谷さん、こんばんはー。

> 私が個人的に気になるのは、「メニューが廃止され、『コマンド タブ』と
> 呼ばれるUIが新たに実装された」という点です。

おー。
そう言えばこの辺はモロに食らいそうですね。

> 建前上は「Excelの最終行は 65536行だ」と決め付けて書いてある
> コードなわけですから、これもマイクロソフトに言わせたら
>「お行儀の悪いプログラムだ」ということになりますね。

まあ、そう言われたら、ハイその通りとしか言いようがないですが。
でも MS がリリースしている技術情報でも、65536 の決め打ち
しちゃってますからー、残念!

http://support.microsoft.com/kb/291304/JA/

しかも「初心者向けのサンプル」かよ斬り!

# MS も動作中のバージョンの最大列数 | 行数を返す関数でも
# 実装しておいてくれりゃいいのに。

> 例えばExcel 12 では、上記の拡張によって、ひとつのワークシートで
> すべての都道府県のすべての郵便番号(約12万件)が表せるようになり
> ました。だからといって12万行入力されているワークシートを作ったら、
> もう上記のコードは正常には動作しませんね。

まだ一発目で正常に動作してくれないほうが、気付けるだけマシという
気がしますね。

初心者の方が過去ログのようなレガシーコードをコピペして、1000 件や
2000 件のデータでテストしても気付かず、リリース後しばらくして入力
データが 65,536 行超えて初めて発覚するという時限爆弾みたいな
パターンが一番イヤ。

> 使われているワークシート範囲を調べる UsedRange というプロパティが
> あるんですが、こいつ時々誤動作するんですよ。だからあまり使えない。

お、そうなんですか。_〆(。。;)メモメモ

> 私は個人的に、Office 2000 以降を持っている人が Office 12 に乗り
> 換えるという人は、ほとんどいないのではないか、と想像しています。

多くの企業さんで、Office 97 バリバリ現役ですしね。

> しかし、全バージョンをサポートしていくのも大変でしょうねぇ・・・

ヘルプデスクの皆さんに。(T人T)合掌

【1773】Re:Office 12 の互換性
 Kein  - 05/11/28(月) 15:58 -

引用なし
パスワード
   最近もEFCで論争をした「マジックナンバーを使うかどうか」の問題ですね。
私はやっぱり 65536 でコードを作り続けますね。そもそもExcelでデータを、
"実装されている行や列の限界付近まで使えるか" というと答えはNOです。
たとえデータの "入力" まではナンとか出来ても、Filterはかけられないは
ソートはうまくいかないは・・etc など、使い物にならない上に、ファイル
サイズの肥大化でいつ落ちても不思議でない、などという不安定な状況に陥る
のが目に見えてますから、せいぜい2〜3万行が実用上の限界と考えてます。
よって巷で実際によく使われているバージョン(97〜2003)では、それで全く
問題ないと思っているし、Web上で見かけたご意見として、Excelは97もしくは
2000あたりで完成した代物で、それ以降は「高い金を払っていることに見合う
だけの新機能はない、と言いきれる」と書いてあったのですが、全くそのとおり
だと思います。ではExcelで扱えないような大量のデータ処理をどうするか ?
と言えば、MdbファイルやCsvファイルにしておいて、DAOやADOでデータペース
としての扱いにすれば問題ないわけで、それに慣れてしまえば不安定なExcelでの
データベース設計が不要になりますから、行数・列数の拡大も恩恵が薄い(ペイ
しない)ということになります。
まぁ今までの推移を見ても「ソフト屋が笛を吹いてもユーザーは踊らない」という
賢い消費者の態度がはっきり現れているのですから、新規バージョンの発売から
7〜8年ぐらいたたないと、実際に普及してこないと予想できますね。あるいは
その間に、導入コストを考えてOpenOfficeの方へ乗り換えるところも増えてくる
だろうし、古くからのユーザーを切り捨てるようなことをすればどうなるか、
MicroSoftもバカじゃなければ考えるでしょう・・。

【1777】Re:Office 12 の互換性
 YU-TANG WEB  - 05/11/30(水) 6:13 -

引用なし
パスワード
   Kein さん、こんばんは。

> 「マジックナンバーを使うかどうか」の問題ですね。

互換性の話なので、それだけではないんですが、それも含みますね。

> 私はやっぱり 65536 でコードを作り続けますね。そもそもExcelでデータを、
> "実装されている行や列の限界付近まで使えるか" というと答えはNOです。
--(中略)--
> ではExcelで扱えないような大量のデータ処理をどうするか ?と言えば、
> MdbファイルやCsvファイルにしておいて、DAOやADOでデータペースと
> しての扱いにすれば問題ないわけで、

おおむね その通りですね。
分かっている方が適材適所で使う分には、ぜんぜん問題ないと思います。

# 全ユーザーが分かっていると断定できれば、ラクだろうな〜。(^ ^;)

4930 / 5126 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
219927
(SS)C-BOARD v3.8 is Free