カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

VBで指定した日の曜日が月のうち何回目かを調べる

今回は、「今日は第何○曜日か知りたい」という時に使えるプログラムを紹介します。
今日が金曜日だと仮定して、今月のうち何回目の金曜日かを知りたい時に使います。

2つの日時の間隔を返すDateDiff関数を使って結果を求めます。

まずDateDiffの第1引数には「ww」を指定し、週の開始曜日をカウントの基準に設定します。
そして第3引数である“週の開始曜日”に調べたい日の曜日を入力することによってその曜日が月のうち何回目なのかを取得することができます。

ソースは次のようになります。

Dim year As Integer
Dim mon  As Integer
Dim day  As Integer
Dim ww   As Integer

year = 2020
mon = 7
day = 10

ww = DateDiff("ww", DateSerial(year, mon, 0), _
    DateSerial(year, mon, day), _
    Weekday(DateSerial(year, mon, day)))

Debug.Print ww & "回目"

出力結果は

2回目

となります。
続きを読む…»

2,592 views

Chr関数で表現する制御文字

vbCrLfやvbTabなど、定数が使用できないときにChr関数を使って表現します。

Chr関数の書式

Chr([ASCIIコード])
定数 Chr関数での表記
vbTab Chr(9) タブ
vbCr Chr(13) キャリッジリターン
vbLf Chr(10) ラインフィード
vbCrLf Chr(13) & Chr(10) キャリッジリターン+ラインフィード

ACCESSのクエリでは定数が使用できないので、知っておくと便利です。

1,377 views

ナビゲーションウィンドウを非表示にする

ACCESSにて、コードでリンクテーブルを設定した時など、非表示にしていたナビゲーションウィンドウが表示されてしまうことがあります。
以下のコードを実行するとナビゲーションウィンドウを再び非表示にすることができます。

DoCmd.NavigateTo "acNavigationCategoryObjectType", ""
DoCmd.RunCommand acCmdWindowHide

また、逆に表示したいときは以下のようにします。

DoCmd.NavigateTo "acNavigationCategoryObjectType", ""
DoCmd.RunCommand acCmdWindowShow
6,302 views

他のシートの値を参照するときに便利なINDIRECT関数

通常は他のシートの値を参照し表示しようとするとき、
以下のように式を書くと思います。

=Sheet1!A1

特に数が少ない場合はこれで問題ないと思いますが、
数が増え、参照するシートも可変の場合にはいちいちシート名を
打ち変えて修正していくには手間がかかり過ぎます。

そんな時に利用したいのがINDIRECT関数です。
INDIRECT関数は参照したいシートの名前をセルの値を元に判別してくれるのです。

Sheet2のA1に「Sheet1」と入力されていたとします。
そしてA2に以下の式を入力します。

=INDIRECT(A1&"!A1")

するとSheet1のA1に入力されている値が表示されます。

こうすることで、いちいち式を変更しなくても
セルの値を変えれば参照するシートを変更することができます。

832 views

3ヶ月前の末日を取得する

日付関数を使って3ヶ月前の末日を取得するTipsです。

$year  = date("Y"); //2018
$month = date("n"); //3
$day   = 0;         //末日を取得するので「0」とする

$time = mktime(0, 0, 0, $month - 2, $day, $year);

echo date("Y-m-d", $time);

出力結果は「2017-12-31」となります。

Visual Basicでやってみる

VBでも同様のことができます。

DateSerial(Year(Date), Month(Date) - 2, 0)
1,468 views