コミュニティでの活動の履歴として、自身(Orator/魔界の仮面弁士)が掲示板・Mailing List・Newsgroup等へ発言した内容の中で、再利用できそうな物を拾い出して、掲載しています。

« 2007年11月 | Main | 2008年02月 »
日本語版 Visual Studio 2008 登場! / 2007年12月14日(金)
Visual Studio 2008 日本語版の開発が完了。2 月より販売を開始

ついに、待望の VS2008 日本語版 の登場です。

パッケージ販売は 2008年2月8日からのようですが、MSDN Subscription の契約レベル次第では、既にダウンロードにて入手可能です。(約 4.5GB です。エディションによって異なりますが)

なお、来週18日には、無償版の Visual Studio 2008 Express Edition 日本語版もダウンロード可能になるとのことです。

続きを読む...  
Posted at 14:24 / .NET / この記事のURL
コメント(0)
[VBA] Long 型同士の乗算がエラーにならない理由 / 2007年12月09日(日)

田中亨さんのExcel 2007 blogに、Excel 2007 に関する、以下のような実験コードがありました。

次のようなコードもオーバーフローします。
Sub Sample1()
    Dim n
    n = Rows.Count * Columns.Count
    MsgBox n
End Sub
なぜか次のように明示的にWorksheetオブジェクトを指定してやると、全行数×全列数の計算結果は取得できるようです。
Sub Sample1()
    Dim n
    n = Worksheets(1).Rows.Count * Worksheets(1).Columns.Count
    MsgBox n
End Sub

前者がエラーになる理由は明確ですね。これはつまり、Excel 2007 では、
 Rows.Count は、1,048,576 (Long 型)を返す。
 Columns.Count は、16,384 (Long 型)を返す。
 それらを乗算した結果は 17,179,869,184 となる。
 結果、Long の上限値 2,147,483,647 を上回ってしまう。
というものです。


では、何故後者がエラーにならないのかというと、Rows プロパティ以下がレイトバインドのコードであるため、Count プロパティの戻り値がLong 型ではなく、(内部Longの)Variant型として処理されていたためです。実は下記のように、いずれか一方が Variant 型であれば、オーバーフローにはなりません。

n = CVar(Rows.Count) * Columns.Count

これは何故かというと、「内部処理形式 Long の Variant 型」に対する乗算は、Long の精度を超えた場合、自動的に内部処理形式 Double の Variant 型」に拡張される…という仕様が存在しているためです。


この Variant に対する演算については、ヘルプの「* 演算子」の項にも書かれているのですが、よく読まないと見落としてしまうでしょうね。


 
Posted at 21:05 / Visual Basic / この記事のURL
コメント(0)
P R

Microsoft Most Valuable Professional, Visual Developer - Visual BasicMSMVP for Visual Basic


Global Media Online INC.