Office TANAKA

Excel MVPの不定期Blog
田中亨
Excelのバグ
たまにはExcelネタを。それもVBAのバグネタです。
つい先日、私自身がこれにハマりました。

まず「前提」の1つめ。
Excel VBAではプロパティを省略することが許されています。
プロパティを省略すると、そのオブジェクトの"既定のプロパティ"が指定されたものとします。
たとえばセルに値を代入するとき、セルの値はValueプロパティですから、本来なら次のように書くのがセオリーです。

Range("A1").Value = "tanaka"

これを、プロパティを省略して、次のように書いてもOKです。

Range("A1") = "tanaka"

次に「前提」の2つめ。
VBAの変数にはバリアント型という型があります。
バリアント型にセル(Rangeオブジェクト)を格納すると、変数を介してセルを操作できます。
次のコードで確認してみましょう。

Sub Sample1()
  Dim c
  Set c = Range("A1")
  c.Font.ColorIndex = 3
End Sub


以上の「前提」から、次のコードは何も問題がないように思えます。
選択したセル範囲(Selection)の各セルに対して、セルの値(数値とします)を10倍します。

Sub Sample2()
  Dim c
  For Each c In Selection
    c = c * 10
  Next c
End Sub


ところがコレ、まったく機能しませんし、エラーも発生しません。
いったい、どうしたことでしょう。

あれこれと試した結果、回避策はわかったのですが、そもそも原因は何なのでしょう。
調べてみたら、Excelのバグでした。
詳しくは、次のサポート情報(機械翻訳)に書かれています。

■XL98: Value プロパティがバリアント種類の For Each ループに unchange しました。
http://support.microsoft.com/kb/191176/ja


Excel 97とExcel 2007で確認しましたが、確かにおかしいです。

回避策は次の2点です。

・セルを格納する変数は、バリアント型ではなくObject型やRange型を使う

Sub Sample3()
  Dim c As Range
  For Each c In Selection
    c = c * 10
  Next c
End Sub


・代入される側のプロパティを省略しない

Sub Sample4()
  Dim c
  For Each c In Selection
    c.Value = c * 10
  Next c
End Sub


どうせプロパティを省略しないのなら「c.Value = c.Value * 10」と書くべきでしょうけど。
また、Microsoftのサポート情報では「For Eachループ内で発生する」ように書かれていますが、次のようなコードでも同じバグが発生します。

Sub sample5()
  Dim c
  Set c = ActiveCell
  c = c * 10
End Sub


これは、遭遇する機会の多いバグだと思います。十分に注意してくださいな。
| Excel | 06:13 | comments(3) | trackbacks(1) |
バグというか、一瞬不思議な仕様ですね。加算代入演算子(+=)があれば良いのかな。(^^A)
| 藤代千尋 | 2008/07/10 5:32 PM |

う〜む。でも、加算代入だけでなく、

Sub sample5()
  Dim c
  Set c = ActiveCell
  c = Now()
End Sub

Sub smaple6()
  Dim c
  For Each c In Selection
    c = Now()
  Next c
End Sub

なんてのもダメですからね。

こうした書き方がダメだという必然性を感じませんから、やっぱ、バグでしょう(^^;
| 田中亨 | 2008/07/10 8:25 PM |

そうか。再代入で入れたものが入れ替わってしまうので、=Now() でもダメですね。

でも私的には“VBA の”仕様として正しく見えるのですが。今まで、これが元のエラーに出会ったことがないですし。(^^;)
#変数の型宣言無しや、オブジェクトしかいれないのに Variant 型を使ったりはしたことが無い。
| 藤代千尋 | 2008/07/11 1:25 AM |










http://blog.officetanaka.com/trackback/984366
excelのこと
楽天から検索された商品Microsoft Office Specialist問題集 Microsoft Office …¥ 2,100オススメ度:★★★★Microsoft Office Specialist 公認コースウェアよくわかるマスター 著者:富士通オフィス機器株式会社出版社:富士通エフ・…速効!パソコン講座エクセル¥ 53
| WEBの情報缶! | 2008/07/10 7:31 AM |
   1234
567891011
12131415161718
19202122232425
2627282930  
<< September 2010 >>
Pagerankページランクブログ カウンター
[[[ ]]]
- PROFILE -
- LINKS -
Office TANAKA

Excel 2010 Preview Blog

Excel 2007 ブログ

Excel World

VSUG
- RECOMMEND -
- RECOMMEND -
- RECOMMEND -
- RECOMMEND -
- RECOMMEND -
- RECENT COMMENTS -
- CATEGORIES -
- ARCHIVES -
- OTHERS -
- MOBILE -

※当ブログではPNG形式の画像を使っているため、携帯では画像を表示できないこともあります。

このページの先頭へ