[[20161106065930]] 『ブックを開くと本日日付のセルを表示 Auto_Open(』(ことみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ブックを開くと本日日付のセルを表示 Auto_Open()』(ことみ)

先ほどやっと、使用のExcel2007でのVBA編集画面の開き方を知ったほどの
VBAビギナーで 至極恐縮です。

車や会議室の予約表ブックです。
シートは月別に12シートあり、
ひと月分1シートには、1日毎に8時から20時までの小さな表が
月の日数分30ないし31あります。
日付は個表の先頭セルに表示させていて、
前日の日付セル+1という数式で入っています。

このブックを開いた時に、開いた当日の日付の表を表示させたいと四苦八苦しております。

ここに、ネットで調べた
Sub Auto_Open()
 Dim sh As Worksheet
 Dim rng As Range

 Application.ScreenUpdating = False

 For Each sh In Worksheets

  sh.Activate
  Set rng = sh.Cells.Find(what:=Date)

  If Not (rng Is Nothing) Then
   rng.Activate
   Exit For
  End If

 Next sh

 Application.ScreenUpdating = True

End Sub

を入れましたが、機能しません。
VBA編集画面で実行すると、「型がありません」というエラーが出ます。
12月分×30ほどもある個表の日付セルを修正するしかないのでしょうか。
この日付形式でも機能するVBAの組み方があるのでしょうか。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 日付の検索は、時にすごく厄介になることがあります。

 >「型がありません」というエラー
 これは、ちょっと思い当たらないです。

 >この日付形式
 どんな書式になっているんですか? (全部、同じ書式ですか?)

 >日付は個表の先頭セルに表示させていて、 
 個表の先頭セルは決まった位置にあるんですか? (例:A列に全部ある)

 >前日
 一番先頭の日付(月初)は、どんな値ですか。

(半平太) 2016/11/06(日) 08:23


★半平太様★

お休みのところ、早速のお返事をありがとうこざいます!<m(__)m>

 >>この日付形式
 >どんな書式になっているんですか? (全部、同じ書式ですか?)
はい、全て書式はセルのユーザー設定でd"日""("aaa")"です

 >>日付は個表の先頭セルに表示させていて、 
 >個表の先頭セルは決まった位置にあるんですか? (例:A列に全部ある
はい、B列に、全てあります

 >>前日
 >一番先頭の日付(月初)は、どんな値ですか。
その月の一日は 数式バーでは 西暦年yyyy/月mm/日dd と表示されています。
毎年更新時に、月ごとに 一日のセルのみ日付入力をして更新させています。
(ことみ) 2016/11/06(日) 09:10

 >B列に、全てあります

 なら以下のコードの方が簡明です。

 ※(日付の検索には問題山積みの)Findメソッドは使わない方がいいです。

 Sub Auto_Open()
   Dim sh As Worksheet
   Dim rng As Range, Pos As Variant

   Application.ScreenUpdating = False
   For Each sh In Worksheets
     sh.Activate
     Pos = Application.Match(CLng(Date), Range("B:B"), 0)

     If IsNumeric(Pos) Then
       Cells(Pos, "B").Activate
       Exit For
     End If

   Next sh
   Application.ScreenUpdating = True
 End Sub

(半平太) 2016/11/06(日) 09:29


★半平太様★

find ではなく CLng関数、という事でしょうか…
辞典をひいて「指定された式をバリアント型 (内部処理形式が長整数型 (Long) の Variant) に変換して返します。」という説明を読んでもサッパリわかりませんでした(;´∀`)
お時間の許す時にでも、
この構築のご説明を伺えたなら☆

ペーストして上書き保存し、
機能しました!!
とても嬉しいです!!(((o(*゚▽゚*)o)))

回答の早さ共、
とても素晴らしく感動いたしました!
半平太様、大変ありがとうございました。<m(__)m>

(ことみ) 2016/11/06(日) 11:09


 >find ではなく CLng関数、という事でしょうか… 

 いやそんな事ではなく、
 「B列にしかないのが分かっているなら、Match関数で日付が何行目にあるか探ればいい」(※)
 と言う考え方です。

 その際、Matchの検索値が「Date型」だとヒットしないので、
 Date値をCLng関数でLong型に変換する、と言うことです。

 (※)
 Findは、「値」か「式」でしか検索できない。

 「値」と言っても、表示値を見に行くものである。
  これはセルの書式に左右されることであり、状況依存の不安定な検索方法と言えます。

 「式」と言っても、Formulaプロパティしか見ない。(Valueプロパティと同じ保証はない)

 以上により「数式の結果値」を探索するには中途半端なメソッドである、と言えます。

(半平太) 2016/11/06(日) 12:27


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.