
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
例示にミスあり!
X=Y+Format(CDATE("2004/04/29") - 1, "mm/dd") > Format("2007/02/28", "mm/dd")
のミス!
No.5
- 回答日時:
およそ、全てのIF 文は論理式に置き換えて書くことが可能です。
[イミディエイト]
? Format(CDATE("2004/04/29") - 1, "mm/dd") > Format("2007/02/28", "mm/dd")
True
? CINT(TRUE)
-1
? Not (Format(CDATE("2004/04/29") - 1, "mm/dd") > Format("2007/02/28", "mm/dd"))
False
? CINT(False)
0
このように論理式の値は、真(True)と偽(False)です。
そして、その真と偽の数値表現は、-1と0です。
ですから、
IF Format(CDATE("2004/04/29") - 1, "mm/dd") > Format("2007/02/28", "mm/dd") THEN
X=Y-1
ELSE
X=Y-0
END
あるいは、
IIF(Format(CDATE("2004/04/29") - 1, "mm/dd") > Format("2007/02/28", "mm/dd") ,X=Y-1,X=Y)
と書かなくても、
X+Format(CDATE("2004/04/29") - 1, "mm/dd") > Format("2007/02/28", "mm/dd")
と書けば、IF THEN ELSE文、IIF関数を書いたことになります。
なお、 上記のIF THEN ELSE文、IIF関数とでは、コンパイル後の実行コードはIF THEN ELSE文が小さいです。
ゆえに、最も、実行コードが肥大化し実行速度が遅くなるのが IIF関数です。
ですから、体裁は悪いですが、ネストが多くない場合は 関数に限ってはIF THEN ELSE文 がお勧めです。
No.4
- 回答日時:
? GetAge("2004/2/29", "2007/2/28")
3
? GetAge("1935/2/1", "2006/1/1")
70
Public Function GetAge(ByVal Birthday As Date, ByVal Hiduke As Date) As Integer
GetAge = DateDiff("yyyy", Birthday, Hiduke) + (Format(Birthday - 1, "mm/dd") > Format(Hiduke, "mm/dd"))
End Function
私が用いている関数です。
問題は、2004/2/29生まれの方の閏年でない場合の考え方ではと思います。
回答有難うございます。
まだ未熟でコードを読みきれていませんが、これはIIf関数のような処理を用いているものでしょうか?またお聞きして申し訳ないです。大変勉強になり助かります。有難うございます。
No.3
- 回答日時:
以下で計算できます。
誕生日当日に年齢加算する
IIf(Format(誕生日, "mm/dd") > Format(日付, "mm/dd") _
, DateDiff("yyyy", 誕生日, 日付) - 1 _
, DateDiff("yyyy", 誕生日, 日付))
誕生日前日に年齢加算する
IIf(Format(誕生日- 1, "mm/dd") > Format(日付, "mm/dd") _
, DateDiff("yyyy", 誕生日- 1, 日付) - 1 _
, DateDiff("yyyy", 誕生日- 1, 日付))
回答有難うございます。
コードをみたときなるほど、と声を出してしまいました。IIf関数はまだふれる機会がなかったので大変勉強になりました。有難うございました。
No.2
- 回答日時:
Sub test01()
MsgBox DateDiff("yyyy", Range("B2"), Range("A2"))
End Sub
を実行すると、71ですね。
http://msdn2.microsoft.com/ja-jp/library/b5xbyt6 …
特に
http://www.kanaya440.com/contents/script/vbs/fun …
で
DateDiff("yyyy", "2005/12/31", "2006/01/01") 1(1日後であっても、年が変われば"1"を返す) とあります。
1936.1.1で1
2006.1.1で71
で言ってることと矛盾しませんね。
だからDateDiffは年齢計算には簡単ではないということですね。
Sub test02()
Cells(1, 1).Formula = "=datedif(B2,A2, ""Y"")"
End Sub
で逃げますか。
http://www.relief.jp/itnote/archives/000423.php
回答有難うございます。
大変勉強になります。セルに直接式を入れる方法ですね。やってみました。これだと処理する値が(B2,A2, ""Y"")"だけならいいんですが、do loopなどで次回は(B3,A3, ""Y"")"と繰り返す場合が考えられませんでした。
No.1
- 回答日時:
DateDiffでやるなら Interval引数をmにして 月数を求めて 12で除算
Intで整数部のみを取得といった具合でしょう
Int( DateDiff("m", Cells(2,2), Cells(2,1) ) / 12 )
といった具合で
DateDiffの仕様ではIntervalに"yyyy"を指定した場合
たとえ1日でも翌年との比較では 1を返すとなっています
DateDiffのヘルプの下の方に書いてありますよ
回答有難うございます。
非常に勉強になりました。小数以下を切り捨てることは考えていたんですが、誕生日の一日前の値を処理する場合、多少の誤差がでてしまっていたので、それをどうすればいいか考えていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- Excel(エクセル) エクセル VBAでのワークシート関数の記載について 3 2023/05/16 22:27
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Visual Basic(VBA) Excel vba で1と10を正確に判断させる方法を教えてください。 TからU列に1と入力があれば 3 2022/12/26 16:54
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Excel(エクセル) エクセルのVBAで上の表の最下行を求める 4 2022/09/14 15:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
function内での定義
-
VB.netでタイマーがスタートし...
-
C# showdialogの戻り値について
-
ワークブックを開くマクロが動...
-
VBA 実行時エラー1004 rangeメ...
-
system関数を使用時にDos窓を最...
-
eval()の危険性の具体例を教え...
-
VBA ステータスバー DoEvents
-
リクエスト結果が一瞬しか表示...
-
エクセル VBA タイマー動作 の...
-
if(1){...}とはどういうことで...
-
以下のコードを実行しても、オ...
-
GoTo文とかSelect文の処理の仕...
-
VBA 図形を塗りつぶし無しにす...
-
JavaScriptで、実行するたび値...
-
jQuery ui Datepicker 明日以降...
-
javascript 演算子の「!」_2
-
ランキングサイトのランキング...
-
ブラウザが判別出来ない。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
JavaScriptでショートカットキ...
-
以下のコードを実行しても、オ...
-
デザイン時のVisible=Falseは実...
-
C#でボタン名を変更しても動く
-
〔Excel:VBA〕マクロの実行が異...
-
VBA ステータスバー DoEvents
-
リクエスト結果が一瞬しか表示...
-
ラベルの色がかわってくれない
-
1つのVBAコードをすべてのコア...
-
VBA SORT Applyでエラー
-
初心者です。gulpでコンパイル...
-
eval()の危険性の具体例を教え...
-
列を非表示にするマクロが実行...
-
PowerPointで時計表示
-
innerHTMLなどの反映タイミング
-
JavaScriptで、実行するたび値...
-
VB.netでタイマーがスタートし...
-
alert()が実行できない
おすすめ情報