• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 変数)

VBA変数の使い方と注意点

このQ&Aのポイント
  • VBAで変数を使ってシート名を動的に変更する方法についての質問です。
  • 特定のセルに格納された値を使い、シート名を生成する方法が分からず困っています。
  • 具体的なコードを記述しましたが正しく動作しないため、指摘と修正をお願いしたいです。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

> 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で合っているし、お奨めしますよ、 という話です。

daiettosur
質問者

お礼

丁寧にありがとうございます。 大変わかりやすかったです。

その他の回答 (4)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.5

  >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)
回答No.3

>"○○第" + myweek + "週" ↑でエラーになっていませんか? VBAでの文字列連結を   "○○第" & myweek & "週" のようにするとどうでしょうか? (正確には、integerのmyweekを文字に変換にして…となるのでしょうが、  VBAが計算時に型変換してくれますね。)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

"○○第" + myweek + "週", " ◇◇第+ myweek + "週" は "○○第" & myweek & "週", " ◇◇第" & myweek & "週" の間違いでしょうが、

  • suo2k
  • ベストアンサー率44% (183/408)
回答No.1

◇◇第 の右側に ” の終わりが無いせい…かな? あと文字列の結合には + じゃなくて & をオススメ。

daiettosur
質問者

お礼

ありがとうございます、初歩的ですね。

関連するQ&A