• ベストアンサー

Excelのworkseatコマンドについて

Excelで下記のようなマクロを実行し、入力した日付に対応するシートを開くようにしたいのですが、二つずれて表示されてしまいます。 Worksheets(d).Activateでは、左からいくつ目を表示させてしまうのでしょうか。 お知恵をお貸しください。 シートの順番は、[work][累計][1][2][3][4][5][6][7][8][9][10]・・・・[29][30][31] Sub auto_open() If MsgBox("自動実行を実施しますか", vbDefaultButton2 + vbYesNo, "自動作業") = vbNo Then Exit Sub h = InputBox("作業したい日付=") d = Day(h) k = StrConv(d, vbWide) MsgBox k Worksheets(d).Activate End Sub

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

>h = InputBox("作業したい日付=") で返る(受け取る)hが文字列、数値、日付かに注意してください。 2日の意味で数値2は善いが、文字列や、日付文字列(例2007/7/2) だと意図どおりに行かないかもしれない。日付シリアル値では、INPUTBOXを使っていると、絶対ありえない。 Dayは日付シリアル値に対して使う関数で、数や文字列ではダメ。 ー Application.InputBox関数にも日付を受け取るタイプは無いようであるので使えない。 http://www.moug.net/skillup/nksw/nksw06-01.htm  など ーー Worksheets(d).Activate のdは数で、この場合数の2を指定するようにしないといけない。 数値化するには、 (A) Sub test02() d = InputBox("日付") Worksheets(Val(d)).Activate End Sub か (B) Sub test01() d = Application.InputBox("日付", Type:=1) Worksheets(d).Activate End Sub か、 (C)日付形式で応答させたいなら Sub test03() d = InputBox("日付") V = DateValue(d) d = Day(V) Worksheets(d).Activate End Sub 2007/7/3のように答えること。

demiguru
質問者

お礼

ありがとうございます。 下記のようにしてみました。しかし、最後のworksheetsのことろで止まってしまいます。何か間違っているのでしょうか。 Sub auto_open() Dim d As Variant If MsgBox("自動実行を実施しますか", vbDefaultButton2 + vbYesNo, "自動作業") = vbNo Then Exit Sub d = Application.InputBox("作業したい日付を入力してください", Type:=1) Worksheets(d).Activate End Sub

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

Worksheets(1).Activateで一番左、Worksheets(5).Activateなら左から5番目のシートを開きます。変数dが数値なら2枚ずれますね。 変数dを文字列に変換すればシート名として認識してくれるはずです  Worksheets(Format(d,"#0")).Activate それともStrConvで全角文字に変換した変数kを使って  Worksheets(k).Activate でも良いかもしれません(ただし各シート名も全角文字でないとダメ) でも変数はきちんと定義(Dim)して用いる方が良いですよ。 またInputBoxもメソッドの方を使用して、入力できる文字を制限した方がよいです。質問の例だと数字以外も入力できてしまいます Dim d As Variant d = Application.InputBox("作業したい日付=",Type:=1) '数値しか入らない If TypeName(d) = "Boolean" Then ' キャンセルが押された Else ' 以降の処理 End If

すると、全ての回答が全文表示されます。

関連するQ&A