セルの値が数値の場合、シート名取得する際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
注意点
- エラーの細かい内容はこちらの記事参照。
- 後考えられるエラーはワークシートに設定できない禁則文字があった場合と思われます。
※本記事では対処していません。
関連記事
- Workbooks.Openと同時に変数wsに格納する
- Worksheet変数にSetする際「エラー13型が一致しません」の対処方法
- ワークシート名を変数にSetし、短い名前で利用する【マクロ初級者必読】
- String型(文字列型)に変換する【Str関数】
コメント