初めて、利用します!!
テキストボックスに日付型のデータを入れたら、
指定した日付型のフォーマットに変換する関数を作ってます。
例えば、[20010101]と入力したら[2001/01/01]に変換!
それで、入力桁数によって・・・年月日をそれぞれ算出しようとしてました。
例えば、2桁入力時は[1桁目]を「月」[2桁目]を「日」という具合に!
そうしていくうち、5桁入力時に、年と月と日の判断をどうやったら良いのか
わからなくなってしまいました。
今、考えられるケースとしては [YYYYM][YYMMD][YYMDD]なのですが
判断の方法を教えてください。_(_^_)_
※Y:年 M:月 D:日

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

A 回答 (6件)

>今、考えられるケースとしては [YYYYM][YYMMD][YYMDD]なのですが


そうですね。定まりませんね。
11111
と入力されたとき、
1年11月11日
11年11月1日
11年1月11日
111年1月1日
これは判断がつきません。
入力の書式が決まらないことには、プログラムで勝手に判断をつけるわけには行きません。

なので制限をつけるとか、MsgBoxを出して注意を促したり、Popupのフォームを出し、候補をリスト一覧に出し、ユーザー側に選択させるとかが必要になると思います。


なんにしても、この仕様では無理だと思います。(^^;)
    • good
    • 0
この回答へのお礼

ありがとうございます。<m(__)m>
やはりそうですよねぇ・・・
各年月日の間に[/]が入っていれば以下の要領で大丈夫なのですが・・・

If IsDate(変数) Then
変数 = Format(変数, "yyyy/mm/dd")
End If

お礼日時:2001/10/24 16:42

やっぱり、#2さんのように、年月日別々でコンボボックス等を設けて、選ばせるのが普通だと思います。


 #1さんと同じで、この仕様では無理だと思います。

なにせ Excelの場合でも入れ方によって、勝手に間違った日付で処理するぐらいですから。(^_^)"
    • good
    • 0
この回答へのお礼

ありがとうございました。_(._.)_
やはり、桁数を固定にするか年月日を別々に・・・
した方が無難かもしれませんね!!

お礼日時:2001/10/24 17:08

(1)日付の入力桁は固定とし指定桁数以外の入力桁ははじく。


(2)IsDate関数を使用し日付値としての整合性チェックを行う。
(3)整合性が確認できれば任意のフォーマットに変換し出力。
でどう?
    • good
    • 0

再度、田吾作7です。


>各年月日の間に[/]が入っていれば以下の要領で大丈夫なのですが・・・
そうですね[/]が入っていたら、日付の区切りが定まりますね。

しかし、[/]が存在しない要領では、法則がありません。
2つ以上のパターンが存在するならば、プログラムで勝手な判断をするわけにはいきません。
ユーザーの意思と反する結果を生む恐れがあるからです。

ユーザーの意思を反映させるためには
(1)ありえない法則はエラー
(2)ユーザーに問い合わす
という処理を行うべきだと思います。
    • good
    • 0

こんにちは。

maruru01です。
No.1の方の言う通り、桁数を自由にして自動的に判断というのは、限界があります。
したがって、年、月、日を別のテキストボックス(またはコンボボックス)で入力するか、8桁連続入力にして、文字数判定をする(+日付として無効かどうかの判定も)などにした方がよいと思います。
日付の入力程度のことに自由度を持たせても、プログラムが煩雑になるのでやめた方がいいと思います。
では。
    • good
    • 0
この回答へのお礼

ありがとうございました。_(._.)_
やはり桁数は固定で10桁、もしくは8桁固定が作る方としても楽です!
とにもかくにも、(ソフトとか別のOCXを使わずに)テキストボックスで
フォーマットが上手くできればいいのですがねぇ!

お礼日時:2001/10/24 16:50

やるんであれば年月日それぞれにテキストボックスを設け、



年:4桁又は2桁固定。
月:2桁以内で1以上12以下。
日:2桁以内で1以上31以下。(月の値によって最大値変動)

それ以外であればメッセージボックスで注意を促す
こんな感じでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。<(_ _)>
やはり固定にした方が良いですよね!!
ちなみに2桁~4桁までと7桁~8桁までは
何とか対応できた?と思ったのですがね・・・

お礼日時:2001/10/24 16:45

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

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

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

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

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

QEXCELにて、同一日付であれば空白にしたい

EXCELにて、同一日付であれば空白にしたい
EXCELにて、同一日付であれば空白にしたいのですが、できればVBAを使用せず実現したい。
ヒントをお願いします

Aベストアンサー

回答No2です。ダブった日付を白文字にするときにページが変わったところで空白になるのは避けたいとのことでしたらページの区切りを求める関数はありませんので、例えば1ページが49行で50行のところが次のページになるなどのことが判っていればA2セルから下方を選択してからの条件付き書式の設定で入力する式は次のようにすることでよいでしょう。

=AND(MOD(ROW(),50)<>0,A2=A1)

QVB.NETで、[Ctrl]+[Alt]+[Del]を無効にするプログ

VB.NETで、[Ctrl]+[Alt]+[Del]を無効にするプログラムを考えています。

グローバルキーフックを使用しないで、実現する方法はありますでしょうか?
ご教示の程お願いいたします。

Aベストアンサー

>グローバルキーフック
これの引数っていろいろありますよね?

マウスとキーボードだけは.NETで捕らえることができます。
ただCTL+ALT+DELというショートカットは、これらの管理よりもっと深いところで行われているので、仮にCで作成してフックしても目的の制御の実現は出来ません。


>グローバルキーフックを使用しないで
となると、やはり#1さんの方法しかありません。


#1さんの参考URL中に
「SAS発生時の動作:」
というのがあります。そこに
「GINAのWlxLoggedOnSas()」
というところがあるのですが、その近辺を熟読してください。
そしてこれ
http://msdn.microsoft.com/en-us/library/aa380570(VS.85).aspx


#1さんが示した情報は「古い」のではなく、古くから存在する実現方法というだけです。
そして現在、新たな別方法が出現しているわけではありません。

.NETで作成するDLLとCで作成するDLLは当然異なりますので、質問の
「VB.NETで、[Ctrl]+[Alt]+[Del]を無効にするプログラム」
という質問には、「無理です」としか言いようがありません。

>グローバルキーフック
これの引数っていろいろありますよね?

マウスとキーボードだけは.NETで捕らえることができます。
ただCTL+ALT+DELというショートカットは、これらの管理よりもっと深いところで行われているので、仮にCで作成してフックしても目的の制御の実現は出来ません。


>グローバルキーフックを使用しないで
となると、やはり#1さんの方法しかありません。


#1さんの参考URL中に
「SAS発生時の動作:」
というのがあります。そこに
「GINAのWlxLoggedOnSas()」
というところがあるのですが、その...続きを読む

QWORD差し込み印刷:日付の処理 - EXCELが空欄だと今日の日付が差し込まれてしまう

WORDの差し込み印刷について質問させてください。

EXCELのデータで日付を入れている列があります。この列に空欄がある(つまり日付が入力されていない)と、差し込み先のWORDのほうで、今日の日付が出てしまいます。

EXCELのデータが空欄の場合には、WORDの方に今日の日付を出さない(空欄のままにしておく)方法はありますか?

OSはWinXP, WORDとEXCELは2003を使っています。

よろしくお願いします。

Aベストアンサー

Word2002で確認したところ、質問と同じようになりました。
フィールドコードについては詳しくありませんが、消すことができました。
日付が空欄のところの差し込みフィールドでマウス右クリックしてフィールドコードの表示/非表示をクリックして表示させると
{MERGEFIELD"フィールド名"}となっていると思います。
1方法はココの”フィールド名"を削除すれば日付は表示されません。
もう一つの方法はフィールドを右クリックしてフィールドの編集を選択します。「フィールド」ダイアログボックスが現れます。
フィールドの種類から「差し込み印刷」を選択し、フィールドの名前から「If」を選択して条件式を入力する。
フィールドコードは
「If 式1 演算子 式2 Trueの場合の文字列 Falseの場合の文字列」
ここに
「If 日付のフィールド名<>"" "yyyy/mm/dd" ""」
というのを入力したところ表示されないようになりました。
日付のフィールドがブランクでない場合はyyyy/mm/dd、そうでなければブランクという条件式です
差し込みの1枚目のフィールドで条件式を入れておけば、日付空欄のところはすべて空欄にできると思います。
試しにチャレンジしてみて下さい。

Word2002で確認したところ、質問と同じようになりました。
フィールドコードについては詳しくありませんが、消すことができました。
日付が空欄のところの差し込みフィールドでマウス右クリックしてフィールドコードの表示/非表示をクリックして表示させると
{MERGEFIELD"フィールド名"}となっていると思います。
1方法はココの”フィールド名"を削除すれば日付は表示されません。
もう一つの方法はフィールドを右クリックしてフィールドの編集を選択します。「フィールド」ダイアログボックスが現れます。
...続きを読む

Q[ADO]と[ADO.NET]の違い

VB6とAD0が仲間で
VB.NETとADO.NETが仲間ですか?

よろしくお願いします。

Aベストアンサー

どんな回答を望んでいるのだろうか。
質問文に対する簡潔な回答をするならば 「そうです」 と回答しておきましょうか。
タイトルに対する回答なら 「ado ado.net 違い」 で検索すれば理解可能な回答を得られる。
http://www.google.co.jp/search?q=ado+ado.net+違い&ie=UTF-8&oe=UTF-8&hl=ja

QExcelで日付を入力したら締日を表示させる

Excelで経費の支払いの表を作ろうとしています。

A列のセルに日付を入力し、
A列に入力した日付が1日~15日までなら
B列のセルにその月の最終日の日付を
16日~31日までなら
B列に翌月の15日と自動で表示されるようにするには
どうすればいいのでしょうか?


詳しい方、教えてください。
ちなみに使用しているExcel2010です。

Aベストアンサー

ごめ。よく読んだら半月ずれてましたな。

=IF(DAY(A1)<15,DATE(YEAR(A1),MONTH(A1)+1,1)-1,DATE(YEAR(A1),MONTH(A1)+1,15))

MONTH(A1)+1で「13月」とか出てきちゃいそうですが、Excelはちゃんと「翌年1月」と計算しなおしてくれますから大丈夫です。

Q[excel][マクロ]フォルダ内のマクロ有効のブックを通常のブックにするコード

以前フォルダ内の通常のブック(xlsx)をマクロ有効のブック(xlsm)にするマクロを組んだのですがそれを応用して今度は逆の作業をすることになり以前教えて頂いたマクロを有効にするコードを参考に以下を作りましたが動作しませんでした

やりたい作業は
フォルダ内のマクロ化されているブックを開く
通常のブックとして保存
閉じる
次のファイルを開いて同様の動作をフォルダ内のすべてのブックに適用
です

実行したところ
Set wb = Workbooks.Open(Fn)
のところが黄色く表示されてにエラーが出てしまいました、改善点を教えてください


Sub 非マクロ化テスト2()
Dim Fs, Fl, Fn, wb
Set Fs = CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files
For Each Fl In Fs
Fn = ThisWorkbook.Path & "\" & Fl.Name
If Right(Fn, 5) = ".xlsm" Then
Set wb = Workbooks.Open(Fn)
Fn = Left(Fn, Len(Fn) - 5) & ".xlsx"
Application.DisplayAlerts = False
wb.SaveAs FileName:=Fn, FileFormat:=xlOpenXMLWorkbook
wb.Close
Application.DisplayAlerts = True
End If
Next
End Sub

以前フォルダ内の通常のブック(xlsx)をマクロ有効のブック(xlsm)にするマクロを組んだのですがそれを応用して今度は逆の作業をすることになり以前教えて頂いたマクロを有効にするコードを参考に以下を作りましたが動作しませんでした

やりたい作業は
フォルダ内のマクロ化されているブックを開く
通常のブックとして保存
閉じる
次のファイルを開いて同様の動作をフォルダ内のすべてのブックに適用
です

実行したところ
Set wb = Workbooks.Open(Fn)
のところが黄色く表示されてにエラーが出てしまい...続きを読む

Aベストアンサー

こんにちは。

私も、マクロ化のブックは作りましたが、逆は考えたことがありません。
(マクロ化は、VBEの中身を検索し、1行でも存在すれば、.xlsm にするということです。)

もしかしたら、
>CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files

Set wb = Workbooks.Open(Fn)
おそらくエラーの原因は、属性の問題あたりが原因かもしれません。それを、Normal ファイルであるか、調べる必要があるかと思います。

ちなみに、私も独自路線でかんがえてみました。
私は、以下のようにあらがじめ該当するブック名を取得し、配列変数の中に入れておくようにします。Dir は、途中で操作されるのを嫌います。

私のこだわりは、2点
変換後の同名ファイルの存在。
枝番付にします。
後は、パスワードの有無 (たぶん、バージョンによって反応の違いが出るかもしれません。こちらは、Excel 2013 です。)

'//

Sub DeMacroFileName()
 Dim myPath As String
 Dim myArray()
 Dim fName As String
 Dim i As Long
 Dim fn As Variant, nFn As String
 Dim cnt As Long
 Dim wb As Workbook
 ReDim myArray(1999)
 myPath = ThisWorkbook.Path & "\"
 On Error GoTo ErrHandler
 fName = Dir(myPath & "*.xlsm", vbNormal)
 Do While fName <> ""
  If (GetAttr(myPath & fName) And vbNormal) = vbNormal Then
   If fName <> ThisWorkbook.Name Then
    myArray(i) = fName
    i = i + 1
   End If
   DoEvents
   If i > 2000 Then Exit Do '2000ファイル以上は不可能
  End If
  fName = Dir
 Loop
 ReDim Preserve myArray(i - 1)
 
 Application.EnableEvents = False '開いた時にマクロが邪魔になる
 Application.ScreenUpdating = False
 Application.DisplayAlerts = False
 For i = 0 To UBound(myArray)
  fn = myArray(i)
  Set wb = Workbooks.Open(Filename:=myPath & fn, Password:="")
  If Not wb Is Nothing Then
   nFn = RenamingF(fn, myPath)
   wb.SaveAs nFn, xlOpenXMLWorkbook
   wb.Close False
   DoEvents
   cnt = cnt + 1
  End If
  Set wb = Nothing
nextFn:
 Next i
 Application.DisplayAlerts = True
 Application.EnableEvents = True
 Application.ScreenUpdating = True
 MsgBox cnt & "/" & UBound(myArray) + 1 & "が成功しました。", vbInformation
 Exit Sub
ErrHandler:
 MsgBox "ファイル名 : " & fn & vbCrLf & _
 Err.Number & ": " & Err.Description
 
 Debug.Print fn '失敗した時に記録を取る
 If Err.Number = 92 Then  '滅多に発生しません。
  MsgBox "中途で終了します。", vbExclamation
  Exit Sub
 Else
  Resume Next
 End If
End Sub
Private Function RenamingF(ByVal fName As String, mPath As String)
'同名ファイルの枝番付け
Dim SaveName As String
Dim j As Long
If Right(mPath, 1) <> "\" Then mPath = mPath & "\"
SaveName = mPath & Mid(fName, 1, InStrRev(fName, ".") - 1)
 Do While Dir(SaveName & ".xlsx") <> ""
  If InStrRev(SaveName, "_") > 0 Then
   SaveName = Mid$(SaveName, 1, InStrRev(SaveName, "_") - 1)
  End If
   j = j + 1
   SaveName = SaveName & "_" & CStr(j)
  Loop
RenamingF = SaveName
End Function

こんにちは。

私も、マクロ化のブックは作りましたが、逆は考えたことがありません。
(マクロ化は、VBEの中身を検索し、1行でも存在すれば、.xlsm にするということです。)

もしかしたら、
>CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path).Files

Set wb = Workbooks.Open(Fn)
おそらくエラーの原因は、属性の問題あたりが原因かもしれません。それを、Normal ファイルであるか、調べる必要があるかと思います。

ちなみに、私も独自路線でかんがえてみました。
私は、以下のように...続きを読む

QEXCELの日付データの比較

EXCELの日付データについての質問です。

たとえば、あるテキストデータでH20.7.19とあったとします。
それとEXCELの日付データにもH20.7.19があったとします。

テキストデータのH20.7.19をEXCEL側に貼り付け、EXCELの日付データH20.7.19と比較させ、答え0(誤差0)を返してもらう方法はありますでしょうか?

宜しくお願いいたします。

Aベストアンサー

こんにちは
DAYS360(開始日,終了日,方式)という関数で日数の差異を
求められます。

A1にテキストデータ H20.7.19
A2にエクセルデータ H20.7.19

があったとします。
=DAYS360(A1,A2)
で差異が0で返ってきます。 0じゃ無かったら別のものですね。

方式はヨーロッパ方式(TRUE)、アメリカNASD方式(FALSE)とか
書いてありましたが、違いはようわかりませんww
付けなくてもいいかとw

適当ですが、ご参考まで^^;

Qvbで[ctrl]+[tab]を認識させるにはどうしたらよいでしょうか?

はじめまして、どうしてもうまくいきません。教えてくださいませ。

[ctrl]+[tab]キー入力を認識させるにはどうしたら良いでしょうか?

現在、VBでMDIフォームを使用してプログラムを作っております。
[ctrl]+[tab]キー入力を行なうと、子フォーム間でフォームの移動が起こってしまいます。CommandButton押下時にのみ、フォームの移動を行なうようにしたいので、
[ctrl]+[tab]キー入力を制御して実現させようとしているのですが、うまくいきません。

MSDNライブラリには、KeyUpとKeyDownのイベントで
Tabキーの操作は発生しないと書いてありました。。。
何か方法がありましたらお教えいただけると助かります。
どうぞよろしくお願いします。

Aベストアンサー

SetWindowsHookExでキーボードフックかけなきゃだめでしょうね。
ローカルフックでOKなのかグローバルフックが必要かはわかりませんが。

Qexcel,word 印刷した日の日付

excel,word文書を印刷したとき、その印刷日の日付を印字させるためにはexcel,word各々
どのようなことをすればよかったでしょうか。

Aベストアンサー

<Excelでの編集方法>
 メニューの「ファイル」-「ページ設定」で
 「ヘッダー/フッター」タブを選択。
 上に表示したい場合は「ヘッダーの編集」ボタン。

 編集画面の上に「日付の挿入」ボタン(カレンダーみたいなボタン)があるので
 それを押せば日付入力できます

<Wordでの編集方法>
 メニューの「表示」-「ヘッダー/フッター」を選択すると
 ヘッダーとフッターが点線で囲まれます。
 お好きなほうを選択し「日付の挿入」ボタンを押せば表示されるようになりますよ。

QVB で =Right([nendo],2) & "/06" はどういう事ですか?Right([nendo],2)は?

VB で =Right([nendo],2) & "/06" はどういう事ですか?Right([nendo],2)は?

Aベストアンサー

&amp;="&"
&amp;="""
=Right([nendo],2) &amp; &quot;/06&quot  -> =Right([nendo],2) & "/06"
[nendo]はアクセスのフィールド名か(アクセスのVBA?)。[]で囲むから。
中身は、#2でご指摘の年度で2007とかは行っているのでしょう。
Right関数は文字列の右側、最後から文字数を指定して切り出す。
&は文字列を結合する演算子。
/06をこの順序で結合するもの。


人気Q&Aランキング