VBATips

セルの値が数値の場合、シート名取得する際Cstrで文字列変換する【ExcelVBA】

セルの値が数値の場合、シート名取得する際Cstrで文字列変換する

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

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

上記を解決させたのがこちらですが、開発者の想定通り動かないケースがあります。
③ワークシート内に入力された文字が数値だった。
→結果、エラーは出ないが意図しない動作になった。
(シート名「1」を取得ではなく、インデックス番号1番のシートが選択された)

Public Sub sample()
  ’■セルA1に「1」と記載がある、且つ シート名「1」が存在する場合
    Set ws = Worksheets(Range("A1").Value) 'シート名「1」ではなく、1番目のシートが選択される
    Set ws = Worksheets(Cells(1,1).Value)  'シート名「1」ではなく、1番目のシートが選択される

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

注意点

  • エラーの細かい内容はこちらの記事参照。
  • 後考えられるエラーはワークシートに設定できない禁則文字があった場合と思われます。
    ※本記事では対処していません。

関連記事

 

コメント

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