VBATips

セルの値からシート名取得する場合、.Value省略するな【ExcelVBA】

セルの値からシート名取得する場合、.Value省略不可

備忘録です。
CellsやRangeの場合、Valueを省略してコードを書く機会が多く、
そうすると、うまく動かなくて困ってしまうケースがあります。

————–
①マクロ実行対象とするシート名は可変にしたい。
②マクロ実行対象とするシート名はユーザーに決めさせたい=ワークシート内に入力させる。
————–

上記のような処理があったのですが、どうしてもうまくいかない。
調べた結果、いつもValueを省略している事が問題だったと思い出します。

Public Sub sample()
  ’■セルA1に「xxx」と記載がある、且つ シート名「xxx」が存在する場合
    Set ws = Worksheets(Range("A1"))  '型が一致しません
    Set ws = Worksheets(Cells(1,1))  '型が一致しません

  ’■セルA1に「xxx」と記載がある、且つ シート名「xxx」が存在する場合
    Set ws = Worksheets(Range("A1").Value)  '正常に選択される
    Set ws = Worksheets(Cells(1,1).Value)  '正常に選択される
End Sub

注意点

  • セルの値が数値の場合は、インデックス番号とみなされるため、
    想定した結果とは異なる可能性があります。
  • エラーの細かい内容はこちらの記事参照。

関連記事

 

コメント

タイトルとURLをコピーしました