dポイントプレゼントキャンペーン実施中!

毎度お世話になります。
先日も同じような質問をさせていただいたのですが、
パターンが替わると手も足も出ません。
Dim myweek As Integer

myweek = Worksheets(Sheets.Count).Range("A1").Value

Worksheets(Array("○○第" + myweek + "週", " ◇◇第+ myweek + "週")).Select
 という具合にシート名の週の数字だけを変数にしようとしていますが、うまくいきません。

指摘と修正お願いします。

補足Range("A1")には数字が入っています。
  ○○、◇◇は固有名詞です。

A 回答 (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で合っているし、お奨めしますよ、
という話です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/19 23:21

 


>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
'---------------------------------------------
 
それから文字列の結合は、&を使う方がベター。
 
    • good
    • 0

>"○○第" + myweek + "週"


↑でエラーになっていませんか?

VBAでの文字列連結を
  "○○第" & myweek & "週"
のようにするとどうでしょうか?
(正確には、integerのmyweekを文字に変換にして…となるのでしょうが、
 VBAが計算時に型変換してくれますね。)
    • good
    • 0

"○○第" + myweek + "週", " ◇◇第+ myweek + "週"



"○○第" & myweek & "週", " ◇◇第" & myweek & "週"
の間違いでしょうが、
    • good
    • 0

◇◇第 の右側に ” の終わりが無いせい…かな?


あと文字列の結合には + じゃなくて & をオススメ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/19 23:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!