• ベストアンサー

vba

下記はマクロコードの最初のほうをもってきたものですが、 TypeName(Selection) = "Range" And Selection.Value<> "" の意味を説明していただけませんか。 TypeNameとは何か (Selection)とは何か TypeName(Selection) とは何か TypeName(Selection) = "Range" とは何か Selectiionとはカーソルがさしている何か1つのセルのようなものとみていいのでしょうか。 よくTypeName(Selection) = "Range" と検索するとフィットするのですが、何のために使っているのがわかりません。どういう目的のためにTypeName() 関数というのは、使われますか。 Sub Macro1() Dim ptr As Long Dim str As String If TypeName(Selection) = "Range" And Selection.Value <> "" Then   ptr = 0

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

http://oshiete1.goo.ne.jp/qa3684837.html 先の回答者です >TypeName(Selection) = "Range" Selectionは「現在選択されているもの」ですから、ワークシート上にあるShapeだったりもします。仮にShapeを選択した状態で先に回答したマクロをこのIf文なしで実行したらエラーになります。ですから予め「今選択されているのがセルである」かどうかチェックしているのです。いわゆる「定石」です。(Shapeが選択された状態でSelection.Offset(1,0)なんてありえませんよね) 実は先の回答は少し手抜きがあるのです。 それは複数セルが選択された状態であのマクロを実行すると期待通りの動きをしない可能性があります。本当は  Selection.Cells(1,1) にすべきだったのです(複数範囲の左上のセルを示す) でも質問に「カーソルがあるセル」という表記があったので、そのまま掲示してしまいました。 またSelectionの代わりにActiveCellを使用することも考えました でも複数セルを選択した場合ActiveCellは必ずしも「左上」とならない場合があるので、それもやめました。 マクロを作る場合、何らかの「エラーとなる」あらゆる可能性を想定して、エラーとならないように作るのが筋です。その意味でこの質問は私の至らなさを思い知らしめてくれました。ありがとうございます

taktta
質問者

お礼

Sub test() MsgBox TypeName(Selection) End Sub ソフトでわからないときは実行させてみる。 これをVBAの新格言として今年は取り組んでいきたいと思います。 zap35様、貴重な教えありがとうございました。

taktta
質問者

補足

いろいろ実行させてみました。 楕円図形ではovalなど意味がよくわかりました。 セルではrangeと表示されました。

その他の回答 (1)

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

セル・図形・グラフなどをマウスでクリックしてから、 Sub test() MsgBox TypeName(Selection) End Sub を実行してみれば、何がセレクトされているのか、わかるのでは? それがセル(=Range)であり、且つセルの値が空白でない(<>"")事を 判定しているのでしょう。 ヘルプやサイトを検索すると色々見つけられますよ。

taktta
質問者

お礼

Sub test() MsgBox TypeName(Selection) End Sub ソフトでわからないときは実行させてみる。 これをVBAの新格言として今年は取り組んでいきたいと思います。 n-jun様、貴重な教えありがとうございました。

関連するQ&A