日付の入力チェックについて教えてください。
アクセス2000のVBでプログラムを作っているのですが、
二つのテキストボックスがあり日付をFrom、Toで入力してもらい
その入力された期間が1ヶ月以上だったらエラーとしたいのですがいい方法はないでしょうか?
入力形式は2001/01/01という形です。
月またがりの一ヶ月以内(2001/01/31~2001/02/10等)はエラーとはしません。
すみませんがどなたか良い方法をご存知でしたら教えて下さると助かります。
よろしくお願いします。

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

A 回答 (4件)

DateAdd関数をよく使いますよ。


一ヶ月というので日にち換算するのは微妙だから
単純に一ヶ月加算するのがベストではないでしょうか?

入力したFromに一ヶ月加算して比較する方法です。
ポイントは DateAdd関数とFormat関数です。

参考ソースをのせました。
日付のチェックは 行っていません。
入れる場合は工夫してください。

Private Sub Command1_Click()

Dim sSDate As String
Dim sAddDate As String
Dim sEDate As String

On Error GoTo FncEnd

sSDate = Format$(Text1(0).Text, "yyyy/mm/dd")
sAddDate = Format$(DateAdd("m", 1, sSDate), "yyyy/mm/dd")
sEDate = Format$(Text1(1).Text, "yyyy/mm/dd")

If sAddDate <= sEDate Then
Call MsgBox("NG!!" & sSDate & " - " & sEDate, vbExclamation)
Else
Call MsgBox("OK!!" & sSDate & " - " & sEDate, vbInformation)
End If

FncEnd:
End Sub
    • good
    • 0
この回答へのお礼

Hk2001さんありがとうございます。
どうやらこの方法が一番ベストのようです!!
回答していただきありがとうございました。
とても助かりました。また何かあったらその時は宜しくお願いします<(_ _)>

お礼日時:2001/06/29 10:00

#3.Hk2001さんの回答がベターだと思いますが、


ローカル変数 sAddDate と sEDate を String型 のまま比較しちゃっちゃってるところが気になりました。
実動作では恐らく問題ないし、結構平気でやっちゃいますけどね。
しかしY2Kのころとか、結構アバウトなロジック部分がおかしくなっちゃったりしたから、データ型は厳密に適用するに越したことはないってだけです。
あと99年ぐらいは大丈夫でしょう。
それと、DateAddはOSの日付によるので、OSのカレンダがバグってると狂います。
といってもわざわざ1ステップで済むところを自分でコーディングするほどヒマじゃないけど・・・。余計な話ですね。失礼。
    • good
    • 0
この回答へのお礼

余計な話なんてとんでもないです!!
>DateAddはOSの日付によるので、OSのカレンダがバグってると狂います。
そうなんですかー。知りませんでした。
貴重な情報ありがとうございました。

お礼日時:2001/06/29 10:04

DATEDIFF関数ではダメですか?

    • good
    • 0
この回答へのお礼

DATEDIFFを使って戻り値が31より大きかったらエラーという事でしょうか?
さっそく実行してみます!!
アドバイスありがとうございました。<(_ _)>

お礼日時:2001/06/29 09:57

力技であれば、



例:2001.5.1~2001.5.30
年を比べて同じであれば、
月を見て、月も同じであれば日を見る。
終わりから開始の日を引く、1ヶ月以上ならエラー

例:2001.5.15~2001.6.10
月が違うなら、その月の日にちを足す
(31+15)-10 = 36
一ヶ月以上なのでエラー

というようにしたら良いのでは?
    • good
    • 0
この回答へのお礼

なんとかチェックできるようになりました。
アドバイスありがとうございました。
また何かありましたらよろしくお願いします≦(._.)≧

お礼日時:2001/06/29 09:54

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

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

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

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

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3コピー元ワークシート3

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = Workbooks.Add

'ここからが実際のコピー処理です。
'単純に3回コピーメソッドを呼び出して3回コピーしています。
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)

End Sub

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = W...続きを読む

Q日付の年の確認方法について A1セルに2017/4/1 コンボボックスに2018/4/1 と入ってい

日付の年の確認方法について

A1セルに2017/4/1
コンボボックスに2018/4/1
と入っています。この両方の年だけ等しいか確認するには rang("a1").Format(Date, "yyyy")=コンボボックス.Format(Date, "yyyy")で大丈夫ですか。
よろしくお願いします。

Aベストアンサー

年の比較であれば、
year(セル)
です。

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3ワークシート

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめる。
 新規ブックのオープンをtestwriteを呼ぶ前に1度だけ行い、
 testwriteの中ではその新規ブックに対してシートを追加していく。
 そしてtestwriteの処理が全部終わったら、
 新規ブックの全シートを1度に「記録シートYYYY/MM/DD.xls」にコピーする。

それでも駄目でしたら、以下の回答No.1を試してみてください。
http://oshiete.goo.ne.jp/qa/1822561.html

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめ...続きを読む

Qタイムゾーン? ※2009-07-03T02:38:01Z のTとZの意味

タイトルの通りなのですが、別のシステムで出力されたXMLを取り込む機能を作っています。
読み込み対象のXMLのDate要素(出力日付)が2009-07-03T02:38:01Zとあります。
内容のTとZはどこかのタイムゾーンかな?と思ってるのですが、どうすれば判断出来るのでしょうか?
ちなみに自分の時計と比較したときの差は9時間ありました。

以上です、よろしくお願いします。

Aベストアンサー

ISO 8601に定められる日付および時刻の形式です。

Tは日付と時刻の間に挟む区切りです。
Zは,タイムゾーンがUTCであることを示します。
日本標準時で書くなら,
2009-07-03T11:38:01+09:00
のようになります。

Visual Basicの場合,.NET Framework 2.0 SP1以降にDateTimeOffsetというクラスがあります。
Parseすることでタイムゾーンまで読み取ることができます。

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

Qセルに入力すると隣のセルに日付が入力される コード訂正願い

お世話になります。
VBA初心者の者です。
タイトルの通りのなのですが、以下の通りコードを作りました。
A列に文字が入力されると、F列に日付が入力されることを目指して成功しています。
しかし、ここで AとE列同時にデータをペーストすると、なぜかB列に日付が
入ってしまいます。
どのように変化させれば宜しいでしょうか。
ご教授下さい。よろしくお願い致します。 (※ excel2003を使用)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Cells(Target.Row, 1).Value <> "" Then Status = Date Else Status = ""
If TypeName(Target.Value) <> "Variant()" Then Cells(Target.Row, 6).Value = Status Else _
For i = 0 To UBound(Target.Value) - 1: Cells(Target.Row + i, 2).Value = Status: Next
End If
End Sub

お世話になります。
VBA初心者の者です。
タイトルの通りのなのですが、以下の通りコードを作りました。
A列に文字が入力されると、F列に日付が入力されることを目指して成功しています。
しかし、ここで AとE列同時にデータをペーストすると、なぜかB列に日付が
入ってしまいます。
どのように変化させれば宜しいでしょうか。
ご教授下さい。よろしくお願い致します。 (※ excel2003を使用)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Cells(Target.Row,...続きを読む

Aベストアンサー

For...Nextの間でB列に日付を設定しているようですが、これは意図したものではないのですか?
コードを見ただけでは何がしたいのか不明です。(特にFor...Nextの間)
仕様の説明をお願いします。

QVBAのワークシートの追加とコピーなんですが。

VBAのワークシートの追加とコピーなんですが。


sheet1の原紙をすべてコピーして、

新しくワークシートを追加してそのシートに貼り付けるプログラムを

教えてください。

Aベストアンサー

With ActiveWorkbook
  aaa = .Sheets("Sheet1").Cells(9, 4).Value 'aaaは社員
  bbb = .Sheets("Sheet1").Cells(9, 5).Value 'bbbは4月
  .Sheets("Sheet1").Copy After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = aaa & bbb

QVB.NETで「20040101」を「西暦2004年01月01日」とするメソッド

いまASP.NETでユーザ登録のページを作成しているのですが、ユーザにフォームで入力してもらった半角数字8桁の値をあるメソッドで「西暦2004年01月01日」のようにして返すようにしたいです。
まだ経験が浅いのでよくわからないのですが、どうすれば可能でしょうか。教えてください。

Aベストアンサー

フォームの値を取得した後に
Left関数とMid関数でデータをばらして
それをつなげる処理を設ければ良いのではないですか。

きちんと8桁の数値が入っているかどうかは
Varidateコントロール等でチェックさせるなりして。

QEXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

 EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法
 普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

Aベストアンサー

コピー元のBookとコピー先Bookをどちらも開いて
Excel画面上に並べます(左右に並べる方が作業しやすいと思います)

Ctrlキーを押しながら、コピーしたいシートのタブ部分を
クリック長押しすると、+マークと▲マークが出てきます。
マークが出てきたら、新しいBookにドラッグ&ドロップ で
シートコピーが出来ます。

全く同じシートがコピーされ、マクロもコピーされます。

QlvwReport/エラー/プロジェクト又はライブラリが見つかりません

VBAでドラッグ&ドロップをListViewで使うため、組み込み定数:lvwReportを使っていますがここで「プロジェクト又はライブラリが見つかりません」というエラーが出ます。

環境
WINDOWS2000
EXCEL2000

組み込み定数:lvwReportを使用するために必要な参照設定とコントロールを教えてください。

Aベストアンサー

Windowsのコモンコントロールライブラリに定義されていたと思います。
したがって参照設定などでは選択できないです。

コモンコントロールライブラリのバージョンをあげることで改善するのではないでしょうか?

またはlvwReport=3なので、3と記述すればよいと思います。


人気Q&Aランキング

おすすめ情報