- ベストアンサー
VBA変数の使い方と注意点
- VBAで変数を使ってシート名を動的に変更する方法についての質問です。
- 特定のセルに格納された値を使い、シート名を生成する方法が分からず困っています。
- 具体的なコードを記述しましたが正しく動作しないため、指摘と修正をお願いしたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> Worksheets(Array("○○第" + myweek + "週", " ◇◇第+ myweek + "週")).Select まず、 > " ◇◇第 半角スペースが入っちゃってるのはタイプミスでしょうけれど、 "◇◇第" ダブルクォートを閉じないと文字列として完結しません。 次に文字列の連結には「&」記号を使うのが一般的ですし、 間違いが少なくなります。 以上を踏まえると、 Worksheets(Array("○○第" & myweek & "週", "◇◇第" & myweek & "週")).Select となり、 変数部分を■で表すと ○○第■週 ◇◇第■週 という名前の2つのワークシートを同時に選択することになります。 条件として元の値が32767以下の正の整数、もしくは、 同等に評価できる文字列(数字にみえる文字列)でなければなりません。 原則に忠実な考え方として、文字列に連結するのは文字列ですから、 Integer型の変数をString型に変換しながら連結するような書き方もあります。 Worksheets(Array("○○第" & CStr(myweek) & "週", "◇◇第" & CStr(myweek) & "週")).Select ただし、これはVBAではあまり一般的な書き方ではありません。 都度、変数の型を直さなくても自動的に変換されて連結できますし、 これはレアケースとして曖昧さが許される部分と思ってもらって良いと思います。 多くの場合、同じプロシージャの中で数値処理も併せて実行することがありますが、 そんな時は数値(といってもIntegerとLongに限りますが) で宣言することを優先しておけば間違いが少ないと思います。 これはもう少し習熟が進んだ時の課題という言い方になりますが、 元となる.Valueが数値として読めるものなのかどうかを評価する必要がある、 ような場合だとVariantで宣言しないとなりません。 例えば元の値が数字ではない文字列なら、 Integer型の変数に格納する時点でエラーになる訳です。 しかし、 こういうエラーを経験することはVBAを習得する上で必要なプロセスだと 私は考えるので、是非Integer(必要ならLong)で実践してみてください。 つまり概ねIntegerで合っているし、お奨めしますよ、 という話です。
その他の回答 (4)
- onlyrom
- ベストアンサー率59% (228/384)
>Worksheets(Array("○○第" + myweek + "週", " ◇◇第+ myweek + "週")).Select 上記のように多くの文字列結合すると 慣れないうちはこんがらがってしまうでしょうから シート名もそれぞれ変数にすれば分かりやすいと思いますが。。 '----------------------------------------- Sub Test222() Dim myWeek As Integer myWeek = Worksheets(Sheets.Count).Range("A1").Value Dim Sht1 As String Dim Sht2 As String Dim Sht3 As String Sht1 = "●●第" & myWeek & "週" Sht2 = "■■第" & myWeek & "週" Sht3 = "▲▲第" & myWeek & "週" Worksheets(Array(Sht1, Sht2, Sht3)).Select End Sub '----------------------------------------------- Sub Test333() Dim myWeek As Integer myWeek = Worksheets(Sheets.Count).Range("A1").Value Dim Sht(2) As String Sht(0) = "●●第" & myWeek & "週" Sht(1) = "■■第" & myWeek & "週" Sht(2) = "▲▲第" & myWeek & "週" Worksheets(Sht).Select End Sub '--------------------------------------------- それから文字列の結合は、&を使う方がベター。
- fujillin
- ベストアンサー率61% (1594/2576)
>"○○第" + myweek + "週" ↑でエラーになっていませんか? VBAでの文字列連結を "○○第" & myweek & "週" のようにするとどうでしょうか? (正確には、integerのmyweekを文字に変換にして…となるのでしょうが、 VBAが計算時に型変換してくれますね。)
- hallo-2007
- ベストアンサー率41% (888/2115)
"○○第" + myweek + "週", " ◇◇第+ myweek + "週" は "○○第" & myweek & "週", " ◇◇第" & myweek & "週" の間違いでしょうが、
- suo2k
- ベストアンサー率44% (183/408)
◇◇第 の右側に ” の終わりが無いせい…かな? あと文字列の結合には + じゃなくて & をオススメ。
お礼
ありがとうございます、初歩的ですね。
お礼
丁寧にありがとうございます。 大変わかりやすかったです。