SSブログ

今日のデータを入力するセルへ [コンピューター]

勤務管理表とか、毎日データを入力して欲しい表があったとして、表を開いたら、今日のデータを入力する行へ飛ぶエクセルのVBAマクロを考えました。

まず、アルゴリズムを考えます。

1.表(ワークシート)を開いたら、マクロを自動起動する。
2.今日のデータを入力する行を探す。
3.見つかったら、その行へ飛ぶ。

と、これだけなのですが、実際作ってみると、案外難しかったです。

1.表(ワークシート)を開いたら、マクロを自動起動する。
VBAのウィンドウを開き、ThisWorkbookで「Workbook」「Open」をプルダウンメニューから選び、次のコードを打ち込む。

Private Sub Workbook_Open()
  Call JumpToday ' 今日へ飛べ
End Sub

表(ワークシート)を開いたとき、JumpTodayマクロが自動起動します。

2.今日のデータを入力する行を探す。
3.見つかったら、その行へ飛ぶ。

今日の日付は、Date関数で入手します。今日の日付を検索するため、Find関数を使います。
2014/8/31の記事で紹介した勤務管理表ではA列に「日」を表示していました。

http://cheese999.blog.so-net.ne.jp/2014-08-31

今日を「年月日」で判定したいので、「年月日」を表示する列をA列の左に追加し、新しいA列とします。

001.jpg

A列には直接「年月日」の値を入力せず、B列を参照する式を入力します。A列、B列、C列に入力している式、値、書式は次のとおりです。

 A列B列C列
書式*2012/3/14daaa



行番号A列B列C列
2=B22014/9/1=B2
3=B3=DATE(YEAR(B2),MONTH(B2),DAY(B2)+1)=B3
||||
32=B32=DATE(YEAR(B31),MONTH(B31),DAY(B31)+1)=B32


Find関数の引数は、Find(What:=Date, LookIn:=xlValues)とします。What引数とLookIn引数の組合せにより、
日付がうまく検索できない場合もあるようです。詳しくは、Office TANAKAの「日付を検索する」の記事を参考にして下さい。

http://officetanaka.net/excel/vba/tips/tips131d.htm

なお、年月日(A列)の書式は、「*2012/3/14」とします。理由は、上記の、Office TANAKAの記事の解説を参考にして下さい。
書式が「2012/3/14」だと、うまく検索できません。
年月日のセル範囲に「年月日」の名前を付け、A列は非表示にしておきます。

VBAに標準モジュールを追加し、そこにJumpTodayマクロを記入します。

01:Sub JumpToday()
02:  ' 機能:今日の日付へ飛ぶ
03:  ' 【変数】
04:  Dim FoundCell1 As Range
05:  Application.ScreenUpdating = False ' 画面更新停止
06:  Columns("A").Hidden = False ' A列を再表示
07:  ' 今日の日付を探す
08:  Set FoundCell1 = Range("年月日").Find(What:=Date, LookIn:=xlValues)
09:  If FoundCell1 Is Nothing Then
10:    MsgBox "今日(" & Date & ")の日付が見つかりません。"
11:  Else
12:    Application.Goto FoundCell1.Offset(0, 3), True ' 今日の出社時刻のセルを選択
13:    ActiveWindow.SmallScroll Up:=1, ToLeft:=2 ' 1つ上、2つ左にスクロール
14:  End If
15:  Columns("A").Hidden = True ' A列を非表示
16:  Application.ScreenUpdating = True ' 画面更新再開
17:End Sub

6行目:年月日を記入したA列を再表示します。
8行目:Find関数で今日の日付を検索します。今日の日付が見つかったら、その位置をFoundCell1に格納します。
12行目:Goto関数で、FoundCell1の3セル右の出社時刻に移動し、左上に表示されるようにスクロールします。
13行目:そのままでは、日(B列)、曜(C列)が見えませんし、前日のデータも見たいので、SmallScroll関数で1つ上、2つ左にスクロールします。
15行目:最後にA列を非表示にして終了です。

(おまけ)
今日の日付を強調するため、条件付き書式を追加しています。

数式:=B2=TODAY()   【今日】★今回、追加
数式:=WEEKDAY(B2)=1 【日曜】
数式:=WEEKDAY(B2)=7 【土曜】

なお、土日を判定する数式としては、

=TEXT(B2,"aaa")="日" 【日曜】
=TEXT(B2,"aaa")="土" 【土曜】

でも、いけます。
ヤバイぜ!(23)  コメント(1)  トラックバック(1) 
共通テーマ:日記・雑感

ヤバイぜ! 23

コメント 1

cheese999

「ヤバイぜ!」 ありがとうございます。[__猫]

今日の年月日を検索するために列を追加しなくても、実現できることが分かりました。次回、記事にします。
by cheese999 (2014-09-24 22:54) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字(英大文字の「オー」、英小文字の「ユー」、アラビア数字の「ハチ」、アラビア数字の「イチ」、アラビア数字の「ニ」)を入力してください。

Facebook コメント

トラックバック 1

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。