• 締切済み

VBで「体育の日を返す関数」

VBの標準モジュールを使って体育の日を返したいのですがまったくわかりません。 excelで「A1{2000}と書いてB2{=Taiiku(A1)}」こたえを出せる感じにしたいのですが。。 関数名を「Taiiku」引数を「Toshi(2000とか年の4桁整数)」2000年までは10/10で以降は10月第二月曜日という設定です。 とっても素人なので細かい解説が付いていると助かります。 文が稚拙で大変恐縮なのですがよろしくお願いします。

みんなの回答

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

まずはサンプル(とういかまんまですが) Function Taiiku(ByVal Y As Integer) As Date   Dim FstYoubi As Integer '火曜日を先頭とした曜日を表す数字を格納   Dim SecMon As Integer '第二月曜日の日付を格納   If Y <= 2000 Then     '##2000年以前はその年の10月10日を返す     Taiiku = DateSerial(Y, 10, 10)   Else     '#2001年以降は10月の第2月曜日を返す     '火曜日を1、月曜日を7とした曜日に対応する数字を取得     FstYoubi = Weekday(DateSerial(Y, 10, 1), vbTuesday)     '第二月曜日の日付をもめる     SecMon = 15 - FstYoubi     Taiiku = DateSerial(Y, 10, SecMon)   End If End Function ポイントとしては如何に第二月曜日を求めるかというかです。 ※もっと分かりやすい説明や考え方があるかもしれませんが、一例としてお考えください。 まず1日がとりうる曜日は当然7種類で、1日が日~土までのときの第二月曜日の日付は 日=9 月=8 火=14 水=13 木=12 金=11 土=10 となります、これを計算しやすいように並べ替えると 火(1)=14 水(2)=13 木(3)=12 金(4)=11 土(5)=10 日(6)=9 月(7)=8 ※( )の数字はFstYoubiの値 ( )内の数字と第二月曜日の日付の和が15になることが分かることから 第二月曜日は SecMon = 15- FstYoubi で求めることが出来ます。

mi-yu27
質問者

お礼

大変遅くなってしまいしたが、VBでのご説明とても助かりました。 丁寧で凄くわかりやすかったです。 本当にありがとうございました! それでは短い文で申し訳ないですが失礼いたします。

関連するQ&A

  • VB6でのフィールド定義

    基本的な質問で申し訳ございません。 VB6を使用して画面作成しています。 1. 例えば100桁, CHAR型のフィールドをユーザーコントロールで定義する方法を教えてください。。 もしくは、標準モジュールなどで定義するのですか? 2. MAXの表示桁数はいくつですか?

  • VB初心者です

    VB初心者なので教えて下さい。 a As String a = "平成17年" の時、中の数字の"17"の部分だけを抽出するには、 どのように記述すれば宜しいでしょうか? 中の数字は1桁でも2桁でも、とにかく数字だけを抽出したいのです。VBのVer6.0を使っています。

  • 色々なメソッドを宣言することについて・・・

    /*引数で指定された範囲内のランダム整数値を取得し返す*/ /*キーボードから入力を受け付け、整数に変換後その値を返す*/ /*キーボードから入力された複数の文字列を配列に編集し返す*/ /*キーボードから入力された複数の整数を配列に編集し返す*/ /*引数で渡されたint型配列を指定された順(昇順または降順)にソートする*/ /*引数で渡されたint型配列中の最大値及び最小値を求め返す*/ /*引数で渡されたint型配列中の最大値及び最小値を求め画面に出力する*/ /* 引数で渡された8桁の年月日を、年、月、日に分割し返す 例  : 20050521が引数で渡されたら      2005 05 21 に分割しStringの配列を作成し返す */ /* 引数で渡された8桁の年月日を、年、月、日に分割し返す 例  : 20050521が引数で渡されたら      2005年05月21日 と出力する。 */ /* 引数で渡された10桁の年月日(YYYY/MM/DD)から'/'を削除し8桁で返す */ /* 引数で渡された10桁の年月日(YYYY/MM/DD)から'/'を削除し8桁で表示する */ /*引数で渡された3つのint型の平均を求めdouble型で返す*/ /*引数で渡された3つのint型の平均を求めdouble型で表示する*/ /*●●●●●●●●●●●●●●●●●●●●*/ /*●●●●●●●●●●●●●●●●●●●●*/ /*●●●●●●●●●●●●●●●●●●●●*/ /*●●●●●●●●●●●●●●●●●●●●*/ /*●●●●●●●●●●●●●●●●●●●●*/ } } /* このクラスを利用するクラスを作成する /*●●*/は自分でメソッドを考えて作成する */ というプログラムを作成したいのですがどのようにしたらいいかわかりません!!ところどころはわかるのですが…。

  • VB.NETからVBAマクロ(引数)を呼び出す方法

      VB.NETから参照型引数付きのFunctionのVBAマクロを呼び出す方法 Excel2003のVBEの標準モジュールModule1にあるFunctionのマクロtest(引数)をVB.NETから呼び出して、引数に設定した値をVBA側で加工して、加工された値をVB.NETで取り出したいのですが、VB.NET側でどのように記述してよいのかがよく分かりません。 具体的には、以下のVBAをVB.NETから呼び出すにはどのように記述すればよいのでしょうか。できましたらそのままVB.NETのConsoleApplicationのModule1のSub Main()の中にコピーペーストして動くコードと参照設定を教えていただけると助かります。 ---Excel2003のVBA(C:\test\Book1.xls)---------- Function test(ByRef data As Long) As Long  If data = 0 Then   test = 0   data = 0  Else   test = 1   data = 100 / data  End If End Function ---------------------------------------------- よろしくお願いします(WindowsXP,VisualStudio2010,Excel2003VBE)  

  • VB6で、C言語の(argv,argc)みたいな、コマンドライン引数を実現する方法は?

    Microsoft-VisualBasic6でプログラミングしてます。 外部から(不特定の)ファイル名を指定して、 VBモジュールを起動して処理をしたいのですが、 C言語でいう、(argv,argc)みたいなものを使って(いわゆるコマンドライン引数)、 VBプログラミングする方法を教えて下さい。 <実行例>  ・(モジュール名) (任意のファイル名)   vbmodule.exe sample-a.cvs

  • 体育の時間に・・・

    はじめまして。 私は女子高に通っている2年生です。 昨日体育の時間にバスケットをしたんですが、そのとき相手の子のボールをはたこうとして、手を叩いてしまいました。 相手の子は「痛ーい!!ウザイ!!」と言ったんですが、試合中だったので謝るタイミングを逃してしまいました。 試合が終わってからもしばらく友達を取り囲んで手を見せていました。 彼女とは違うクラスで話したこともないんですが、私はちょっと叩いただけなのに・・・という気がしています。 月曜日も体育があります。 そのとき私はどういう態度で試合をするべきでしょうか。 よろしくお願いします。

  • 確立の問題です。

    確立の問題です。 1~6までの6個の整数を全て並べて6桁の整数を作ります。 この時6桁の整数が3の倍数になる確立を求めよ。 という問題です。 全体の確立が 6×6×6×6×6×6というのは わかりました。 解説お願いします。 出来たら証明のようなかんじ(aとかをつかって)をねがいします。

  • 質問です

    504×a=b^2 の式のaの最小の二桁の整数の十の桁と一の位の和を求めよ。 回答解説お願いいたします

  • 東京五輪1964から明日で半世紀~体育の日は月曜

    明日でちょうど半世紀です。 東京五輪1964の思い出を教えてください。 当時生まれていない方は、 東京五輪1964の印象をどうぞ。 1980年代初頭に生まれた私も、 オリンピックは映像でしか知りません。 東京五輪がきっかけで「体育の日」(10月10日)が制定されました。 せっかく土日前の金曜日に当たっているのだから、 今年くらい翌週月曜日(10月13日)にしないで、 体育の日を本来の10月10日にして欲しいですよね。

  • VBA関数の使い方がわからないです

    A1にはハイパーリンクとしてhttp://www.yahoo.co.jp/ が入っていて、標準モジュールで Sub Macro1() MsgBox HyperlinkAddress End Sub Function HyperlinkAddress(target As Range) As String HyperlinkAddress = target.Hyperlinks(1).Address End Function としたら、引数は省略できません。になるのですが、 どうすればいいですか? Sub Macro1() MsgBox Selection.Hyperlinks(1).Address End Sub これと同じような事を、関数を使って表現したいです。

専門家に質問してみよう