痔になりやすい生活習慣とは?

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

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

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

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

このQ&Aに関連する最新のQ&A

A 回答 (15件中1~10件)

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になります。
として、日曜日かチェックするようにして下さい。
    • good
    • 0

takntさんへ


う~ん、どうなんでしょう?
そうなのかもしれません。
が、「私の周りでは、10月の2週目の月曜日って何日?」
ときけば、14日と回答が返ってきます。

私は、どちらでもいいですけど・・・
こちらの質問者の週の決め方は、補足にもあった通りなので、
他の質問であげてみたらいかがですか?

usi-itiさんへ
関係のない、回答を何度も繰り返し、すみません。

この回答への補足

>回答者の方へ

ありがとうございました。
第何週とか第何曜日とかで
皆様を惑わせてしまいました事を
お詫び致します。

補足日時:2002/11/07 13:59
    • good
    • 0
この回答へのお礼

>回答者の方へ

色々とありがとうございました。
大変参考になりました!

お礼日時:2002/11/07 13:59

#6さんへ


>体育の日は10月第2週の月曜日になっていると思いますが・・・
>今年の体育の日は、10月14日ですよね?

つまんない突っ込みですが、体育の日は 第二月曜日であって、第二週目の月曜ではないと思います。
つまり、その月で 2回目の月曜ということだと思うのですが・・・。
    • good
    • 1

ちょっと質問なんですが、


>今年の11月ですと、
>10/28(月)~11/3 (日)…11月第1週
>11/4 (月)~11/10(日)…11月第2週
>10/11(月)~11/17(日)…11月第3週
>11/18(月)~11/24(日)…11月第4週
この場合、10月28日と 入れたら 11月第一週と出ないとダメなんですよね?

11月25日から11月30日の場合は、12月第一週と出ればいいのでしょうか?
    • good
    • 0

すみません、なぜか==になってたり、カレンダーを見間違えて、9/25とか書いてたり、+8では・・・


申し訳御座いません。
とりあえず、
>今年の11月ですと、
>10/28(月)~11/3 (日)…11月第1週
>11/4 (月)~11/10(日)…11月第2週
>10/11(月)~11/17(日)…11月第3週
>11/18(月)~11/24(日)…11月第4週
ですと、
日曜日=年月日-Weekday(年月日,2)+7
月=Month(日曜日)
週=Int(Day(日曜日)*-1/7)*-1
もしくは、
週 =(Day(日曜日)-1)\7+1
でどうでしょう?
後は、
でしたら、月曜日=日曜日-6てな具合でどうでしょう?
    • good
    • 0

月の境目を第何週にするかが明確になっていないので、見当違いの回答をしている可能性がありますが。



>自動的に出した日曜日の日付から
日曜日 = =年月日-Weekday(年月日)+1

>その月の第何週かを求める
月 = =Month(日曜日)
週 = =Int(Day(日曜日)*-1/7)*-1

ではどうでしょう?

9/25~10/5 9月5週
10/6~10/12 10月1週

になると思います。
9/25~10/5 10月1週にしたい場合は、
日曜日 = =年月日-Weekday(年月日)+8

>日曜までの日付を自動的に画面に
は、元になる日曜日から、1づづプラス、もしくはマイナスした値になると思いますが。
    • good
    • 0
この回答へのお礼

>回答者の皆様

色々とありがとうございました。
処理の仕様として、月曜~日曜を
1週間とし、日曜を週の切替日として
作成しております。
今年の11月ですと、
10/28(月)~11/3 (日)…11月第1週
11/4 (月)~11/10(日)…11月第2週
10/11(月)~11/17(日)…11月第3週
11/18(月)~11/24(日)…11月第4週

としております。
この辺の記述が抜けていました。
申し訳ありませんでした。

宜しければ、再度書き込みを
お待ちしております。

お礼日時:2002/11/01 14:38

#8の回答


???
また、新たな考え方がでてきました。

でも、10/6が1週目で、月曜~日曜日ならその考え方が一番しっくりくるような気もします。

変な解説をつけてしまったのでおかしな話題になってしまいましたが、

月曜日~日曜日を基準に考えた場合を想定し、
日曜日のみ考えた場合には、
1週目の日曜日は(1~7)
2週目の日曜日は(8~14)
・・・・になるので、以下私の#4の回答に続く
に変更してください。この解説なら問題ない?とおもいます。

他の曜日を考えた場合には、先の回答で述べましたが、
考え方により、式が変わります。
    • good
    • 0

やっぱり、駄目でした。


7/1 (月)~ 7/7(日)の場合、
7 \ 7 + 1 で、2週になっちゃいます。
7で割り切れると、バグちゃいます。

日曜日の日を、マイナス1しないと駄目みたいです。。。
    • good
    • 0

日曜日が基準だから、10月の場合、


第1週:9/30 (月) ~ 10/6 (日)
第2週:10/7 (月)~ 10/13(日)
第3週:10/14(月)~ 10/20(日)
第4週:10/21(月) ~ 10/27(日)

第1週:6 \ 7 (=0 少数点以下切捨) + 1 = 1
第2週:13 \ 7 (=1 少数点以下切捨) + 1 = 2
第3週:20 \ 7 (=2 少数点以下切捨) + 1 = 3
第4週:27 \ 7 (=3 少数点以下切捨) + 1 = 4

となると思ったのですが、勘違いでしょうか?!
    • good
    • 0

#4さんへ


体育の日は10月第2週の月曜日になっていると思いますが・・・
今年の体育の日は、10月14日ですよね?

ということは、第2週は8日~14日というのが正しいと思います。
違っていたらすみません。

質問者のusi-itiさんの考え方もあると思いますので、
1週目をカレンダーの1行目とする考え方でしたら#2さんの方法でいいと思います。
(パッと見ただけなので検証はしていません)
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

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

Q第○曜日であるかを取得する関数

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

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

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

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

Aベストアンサー

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

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

その日 ¥ 7 + 1 が、第?曜日の数値になります。

Q特定の日付が第何週目にあるかを知る

タイトルのとおりです。セレクト分で
特定の日付(たとえば2006年10月10日)は
10月の第何週であるかを取得するにはどうすれば
よいでしょうか?初歩的な質問ですいません。
select to_char(sysdate,'w') from dual;
上記ではシステム日付の週は取得できました。
よろしくお願いいたします。

Aベストアンサー

例えば2006/10/11の週を求めるなら
select to_char(to_date('2006/10/11','YYYY/MM/DD'),'w') from dual;
ではどうでしょうか?

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)
で切り上げです。

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

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

Q日付の範囲検索がしたい

お世話になります。

テーブル名:info
フィールド名:no,date,name
フィールドのデータタイプ:int型,char型,char型

のデータベースがあります。dateにはyyyy/mm/ddの形でデータが入っているのですが、
そのdateから、例えば2004/01/01~2005/01/01までに該当するデータを検索して、抽出したいのですが、方法がわかりません。

SELECT REPLACE(date, '/', '') FROM info

で、“/”がないデータを取り出すことはできるのですが、その後どうしたら良いかがわかりません。
どなたかいい方法教えていただけないでしょうか?

Aベストアンサー

SELECT * FROM info WHERE date BETWEEN '2004/01/01' AND '2005/01/01'

で取れませんか?

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。


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

人気Q&Aランキング