プログラミング初心者ですが、ある日が「第○曜日」(例 第1火曜日)を取得する関数をつくりたいと思うのですが、素人考えでは、

1、その日の曜日を取得
2、その月の日数を取得
3、その日を7日で割って第○週であるかを判断

というようことが思いつきますが、このようなやりかたはプログラミングの一般的な方法でしょうか?

#質問のしかたは自信なし。
#何かもっと便利な方法があるのではと思ったりしての質問です。
#aspにて作成します。
#あまり馬鹿馬鹿しい質問だとしたら黙殺して下さい。 (^^;

A 回答 (5件)

asp は良く知らないんですが、多分 VB と文法は同じでしょう。



整数の除算は ¥ でできます。

その日 ¥ 7 + 1 が、第?曜日の数値になります。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
「\」もaspで無事活用できました。

何よりも、「正攻法」だというコメントが「自信」につながります。

お礼日時:2002/01/08 04:46

こんにちは。

itohhといいます。

すみません、わたしの間違いのようです。
こんな常識も間違えてしまうなんて、お恥ずかしい。

>2.日曜日を0とした数を日付に加算する。
を省いてください。
    • good
    • 0
この回答へのお礼

おかげさまで無事、作成できました。
コメントのおかげでいろいろシミュレーションできました。

お礼日時:2002/01/08 04:47

itohh> でも、2月11日は第3月曜日になります。



第3週の月曜日だけれど、第2月曜ですよね?
s-holmes さんは、どちらを取得したいのですか?

この回答への補足

回答ありがとうございます。

2002/02/11 は第2月曜日として取得したい。 (^^;
世間一般の呼び方はよくわからないですが。

補足日時:2002/01/07 15:39
    • good
    • 0

こんにちは。

itohhといいます。

もう少し、判定が必要ではないでしょうか?

例えば、今年の1月11日は第2金曜日ですよね?でも、2月11日は第3月曜日になります。

ですから、当月の1日が何曜日かを見て日数を加算してから7日で割るようにしないと行けな
い気がします。

1.当月1日の曜日を算出する。
2.日曜日を0とした数を日付に加算する。
  日曜日:0
  月曜日:1
   :
   :
  金曜日:5
  土曜日:6
3.加算した日数を7日で割って得た数が第n曜日となる。
(余りがあるときは+1した数が第n曜日となる。)

こんな感じでは如何ですか?
    • good
    • 0

その月の日数は必要ないでしょう。

1と3で求まります。

正攻法だと思いますが、どんな不安があるのでしょう?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelで第一〇曜日を求める方法がわかりません

初めて質問させていただきます。

Excelファイルで毎月お客様に送付状を作成しており、その送付状内に次月作業日程(何月何日何曜日)を載せて送付しております。
弊社は基本的に第1水曜日など曜日で定期日程を組んでいるお客様が多い状態です。
現在カレンダーと睨めっこしながら手入力しておりますが、自動表示したいです。

色々調べた結果
=DATE(YEAR(B2),MONTH(B2)+1,1)+7-WEEKDAY(DATE(YEAR(B2),MONTH(B2)+1,1),2)+1
の数式を使うとできるようなのですが、この数式だと第一週の始まりが日曜日に限定されている?ようです。

例えば、今月2012年10月の送付状を作る時、来月の日程が第一土曜日の場合。
=DATE(YEAR(B2),MONTH(B2)+1,1)+7-WEEKDAY(DATE(YEAR(B2),MONTH(B2)+1,1),2)+6
※B2には2012/10/8と記入されている。
と入力すると、11月10日と第二土曜日が入力されてしまいます。
この部分を11月3日と表記されるように数式を入力したいのです。

何かいい方法はありませんでしょうか?
分かりにくい文章ですいません。宜しくお願いします。

初めて質問させていただきます。

Excelファイルで毎月お客様に送付状を作成しており、その送付状内に次月作業日程(何月何日何曜日)を載せて送付しております。
弊社は基本的に第1水曜日など曜日で定期日程を組んでいるお客様が多い状態です。
現在カレンダーと睨めっこしながら手入力しておりますが、自動表示したいです。

色々調べた結果
=DATE(YEAR(B2),MONTH(B2)+1,1)+7-WEEKDAY(DATE(YEAR(B2),MONTH(B2)+1,1),2)+1
の数式を使うとできるようなのですが、この数式だと第一週の始まりが日曜日に限定されて...続きを読む

Aベストアンサー

質問の式を使うのはやめます。
これ、全部一般的にうまくいくように関数で表現するのは、面倒です。たとえば、5週目の曜日はうまく出ない。これを避けるのはできないこともないが、関数でやるのは生産的ではないでしょう。

で、第4週分、28曜日(4週目土曜日)までを出すことにして、それ以上は、保証しないとすれば、次式ではどうでしょう。

=IF(WEEKDAY(EOMONTH(B2,0)+1)>IF(MOD($C$1,7)=0,7,MOD($C$1,7)),EOMONTH(B2,0)+1-WEEKDAY(EOMONTH(B2,0)+1)+7+$C$1,EOMONTH(B2,0)+1-WEEKDAY(EOMONTH(B2,0)+1)+$C$1)

$C$1に曜日の数値を入れます。どこでも適当に決めるか、直接曜日を表す数値を入れても構わないが、4つありますね。
第1週  1~7
第2週  8~14
第3週 15~21
第4週 22~28
第5週 29~ やめといたほうがいい

Q指定した日付が、その月の第何週かを求める方法

月曜から日曜の作業内容を
書く報告書作成画面の作成をしています。
処理の一つに、
作成したい週の月曜の年月日を入力し、
日曜までの日付を自動的に画面に出す、
というものがあります。
さらに自動的に出した日曜日の日付から、
報告書作成週はその月の第何週かを求める、

(今月ですと10/6は第1週、10/13は第2週、
10/20は第3週、10/27は第4週、となります)

という処理を作成したいのですが、
良いロジックが思い浮かびません。
(処理する月の日付と曜日を配列に入れて、
ループカウントで第何週かを求める、という
方法は思いついたのですが、効率が悪いと思うので…)

何か良いロジックがありましたら、
書き込みをお願い致します。

Aベストアンサー

usi-itiさんへ

何度も書き込みしてすみません。
それと、お礼欄への書き込みは、全ての回答者には、メールが届かないと思います。
Niiさんへの書き込みを知らない回答者もいるのではないでしょうか?
補足は全員に届くようです。

さて本題です。
Niiさんが書いていらっしゃるのと同じなので、実際のプログラムを書いてみます。

フォームに[Text1],[Label1][Label2],[Label3(0)]~[Label3(6)],[Command1]を作成し、
下記のコードを貼り付けて、実行
Text1に日付(日曜日でなくても構いません)を入力し、コマンドボタンを押す
Label1に月、Label2に週、Label3(0)~Label3(6)に月~日の日付が表示されます。
今回は、Weekday(Wk_Date, vbMonday)としています。
WeekdayにvbMondayと指定すると、月曜日を1として 火曜日=2,水曜日=3,・・・日曜日=7を返します。
(NiiさんのWeekday(年月日,2)と同じです)

Private Sub Command1_Click()
Dim i As Integer
Dim Wk_Date As Date '入力した日付
Dim Wk_Sun As Date '入力した週の日曜日

Wk_Date = DateValue(Text1)
Wk_Sun = Wk_Date + (7 - Weekday(Wk_Date, vbMonday)) '日曜日の日付を求める

Label1 = Month(Wk_Sun) & "月"
Label2 = (Day(Wk_Sun) - 1) \ 7 + 1 & "週目"
For i = 6 To 0 Step -1
Label3(i) = Day(Wk_Sun - (6 - i))
Next i
End Sub

必ず日曜日の日付を入力する場合には
Wk_Sun = Wk_Date + (7 - Weekday(Wk_Date, vbMonday)) '日曜日の日付を求める
は削除するか、
If (Weekday(Wk_date) = 1 ) then 'この場合のWeekdayは日曜日=1になります。
として、日曜日かチェックするようにして下さい。

usi-itiさんへ

何度も書き込みしてすみません。
それと、お礼欄への書き込みは、全ての回答者には、メールが届かないと思います。
Niiさんへの書き込みを知らない回答者もいるのではないでしょうか?
補足は全員に届くようです。

さて本題です。
Niiさんが書いていらっしゃるのと同じなので、実際のプログラムを書いてみます。

フォームに[Text1],[Label1][Label2],[Label3(0)]~[Label3(6)],[Command1]を作成し、
下記のコードを貼り付けて、実行
Text1に日付(日曜日でなくても構いません)を入...続きを読む

Qエクセルで第2、第4土曜日を抽出する方法

毎月第2、第4土曜日だけのスケジュール表を作りたいと考えています。

・A1セル=2014年4月、B1セル=4月12日、B2セル=4月26日
・A3セル=2014年5月、B3セル=5月10日、B4セル=5月24日
・A5セル=2014年6月、B5セル=6月14日、B6セル=6月28日
(以下はどんどん続きます)

C列にはスケジュールを入力します。

第1、第3、第5土曜日は必要ありません。
A列はセルの書式で月までの表示ですが、実際は2014/4/1となります。

出来ればA2やA4、A6セルには年月を表示したくありません。
B列に返すことを考えると難しいかもしれませんが・・・

weekdayやmodで色々試したのですが、5週ある月だと日にちがずれてしまったり、他にも失敗ばかりです。頭がこんがらがってきました。

毎年、ドラッグひとつで作れればとても助かるのですが・・・

どなたか教えて頂けますでしょうか?よろしくお願いします。

Aベストアンサー

A1セルには 2014/4/1 とデータが入っていて、表示形式で2014年4月 (yyyy年m月)とか表示させてるだけですよね?

ならば、B1セルに =(7-WEEKDAY(A1))+A1+7、B2セルに B1+14 とそれぞれ数式を設定し、
2行まとめてドラッグで連続データ作成すればできませんか?

WEEKDAY関数で、毎月1日の曜日から最初の土曜日までの日数を 7-WEEKDAYで計算し、
第2土曜日はさらに7日足す。次の第4土曜日は、B1にさらに14日足す。

という方法です。

QExcel関数で当月の第一日曜日の日付を表示したい

Excel関数で当月の第一日曜日の日付を表示したいです。

例えば2009年7月の第一日曜日は7月5日です。

このように当月の第一日曜日の日付を○月○日のように
文字列で表示させる関数を教えてください。

ちなみに、同シート内には当月の開始日を入力しています。

以上宜しくお願い致します。

Aベストアンサー

たとえばA1に当月の開始日(1日)が入っている場合
以下のような式でどうでしょうか。

=A1+7-WEEKDAY(A1-1,1)

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QExcelVBAでBookを開く時にファイル名の一部だけを指定で

VBA初心者です。
ExcelVBAで決まったフォルダーのファイルを開きたいのですが、ファイル名が固定した文字+日付になっているため、この固定した文字だけでこのファイルを開く方法を教えて下さい。このフォルダーには2つファイルがありますが、もう1つは全く違うファイル名です。

Aベストアンサー

> ワイルドカード"*"はどんな時に使えるのですか

Dir関数を使用時の"*" (アスタリスク) および "?" (疑問符) のワイルドカード文字については、
VBAのヘルプを参照し、特に「使用例」のコードを理解してください。

その他 VBAでの ワイルドカード使用に関しては、ヘルプで Like で検索して、
Like 演算子 を参照し、同じく「使用例」のコードを理解されたら宜しいかと思います。


> 通常のOPENメソッドでの> ファイル名指定では使えないと思うのですが。

Workbooks.Openメソッドの1番目の引数は、ファイルが特定出来るように指定する必要が
ありますので、当然 ワイルドカード文字は、使用出来ません。

殆ど、フルバスで指定します。 もし、パス名を省略すると カレントホルダ内のファイルを
指定したことになります。([メニュー]-->[オプション]-->[全般]タブの中で指定)

QエクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?

ワークシート関数で書けば
=IF(OR(F18=0,AND(F15>0,F16>0)),TRUE)です。
これをVBAで書こうとして

If Sheet1.Range("F18") = 0 Or Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then
MsgBox True
Else
MsgBox False
End If

とやってみたのですが、正しくないようです。
どのように書けばいいのでしょうか?

Aベストアンサー

>とやってみたのですが、正しくないようです。

式は正しいと思いますよ

ANDとORは、ANDが先に演算されます。/*と+-では、/*が先に演算されるようなものです。

でも、わかり易くするために、#1のかたのように括弧をつけるほうが良いですね。

Q第1月曜日は第1週の月曜日かその月の最初の月曜日か

皆さんに一般論的、社会通念的なところもからめて伺いたいのですが,第1月曜日、第2月曜日といった言葉の「第1、第2」というのは、
「カレンダー上の第1週の月曜日」でしょうか、
それとも「その月の最初の月曜日」なんでしょうか?


今月4月はキレイに日曜頭の1日始まりで誰の目にも4月2日が第1月曜日ですが、翌5月をみると、火曜日1日はじまりです。こういった場合、第1月曜日は「5月7日」であると考える人はいないのでしょうか?
理美容関係の業種等、「その月の最初の月曜日」を「第1月曜日」としてないかなぁと・・・。

Aベストアンサー

↓は、とある美容室の定休日ですが、

http://ameblo.jp/chic-g/entry-10029580890.html
>※ もしその月の第一火曜が1日にあたる場合は
第一月曜が7日となるため
その月の第一月・火曜は7日・8日
となりますのでご注意ください

という但し書きがあります。

通常考えれば、カレンダー通りの解釈になるのではないでしょうか。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング