• ベストアンサー

Visual Basicについて

Excel2007にて以下のようなプログラム(一部)を書きました。 If Selection.Column = 5 And Selection.Row >= 4 And Selection <> "" Then・・・以下省略 実際空欄でないのはセルE4~E13なのでこの中の一つを選んだ場合はTrue、それ以外はFalseとしたいのです。 しかし、セルを一つ選択した状態ではきちんと分岐するのですがセルを二つ以上選択した状態だと「型が一致しません」というエラーが起こってしまいます。デバッグをすると原因はこの部分にあるようなのですが自分ではどうしたらよいのかわかりません。 二つ以上選択した場合もFalseとしたい場合にはどうすればよいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.3

複数の選択範囲がある場合は、Selection <> "" がエラーになります。 複数のセルの値を同時にとるという動作になるため、配列に格納されるためです。 単一セルの場合はSelectionはString型ですが、複数選択の場合はArrayListのような配列型になってしまうため、「型が一致しません」とエラーになってしまいます。 対処としてはSelection(1)のようにインデックス付けが必要です。 そうすれば、問題は解決できると思います。 詳しい使用方法は参考URLを参照ください。

参考URL:
http://www.officetanaka.net/excel/vba/tips/tips111.htm

その他の回答 (3)

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.4

皆さんの説明で分かりました? おせっかいながら補足。 Selectionプロパティーは選択状態にあるCellを指します Ctrlキーを押しながらマウスで幾つかのセルをクリックして見てください。 クリックされたCellが反転状態で表示されていると思います 同様に複数個の範囲選択をする事も可能です。 なので選択状態にあるセルが1個しかないのであればSelection.RowやColumnは有効ですが複数セルを選択状態にしている時(反転状態のCell)はどの内容を返せば良いか判断できませんのでエラーになります。 仕様的に最後にクリックしたCell位置(四角で囲まれたCell)で良いならば単純にSelectionをActiveCellに変更するだけでOKです 複数選択状態での実行を禁止するなら該当If文を実行する前にSelection.Count = 1である事を確認するなどを取る必要があると思います。 但し結合されたセルがActiveの場合Selection.Countは結合されたセル数が返りますのでその辺の考慮も必要かと

julius_mhp
質問者

お礼

返事が遅れて申し訳ありません。まとめて失礼します。 皆様の助言のおかげで無事にプログラムを完成させることができました。ありがとうございました。 またなにかあった時はよろしくお願いします。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

取りあえず、ActiveCellにしてみたらどうでしょうか。 If ActiveCell.Column = 5 And ActiveCell.Row >= 4 And ActiveCell <> "" Then

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

セルを2つ以上選んだ場合は、1つずつに対してチェックしていかなければ無理なのでは? 提示されたコードだけでは、どのように修正が可能かは判断できませんでしたけど。

関連するQ&A