A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#2の回答者です。
>うまくいきません。ちなみにオフィースバージョンは2003です、標準モジュールにコピーして使用しましたが動きません。
うまくいかなかったというのは、全然、処理しなかったのか、それとも、エラーが発生したのか、どちらでしょうか。
>ファンクションもそのまま貼り付けたのが良くなかったのでしょうか?生年月日はF3:F187ではなくE3:E187にして使用しました。よろしくお願いします。
別に、2003でも、問題ない初歩的レベルの内容ですし、そのまま二つセットで、標準モジュールに貼り付けして構いません。データがあったら、その3列右に出力しますから、E列対象なら、H列に「☆」が返ることを意味しています。しかし、#2の中でも、誤動作について、ちょっと触れましたが、問題になるのは、その生年月日自体の中身がシリアル値でなければ、話が全然変わってきます。その場合は、一旦、シリアル値に戻さなくてはなりません。
こちらからでは、見えない部分の注意点を事細かには申すこともできませんので、それだけは、確認してください。また、主要な点に、デバッグのタブの中などの、「ブレークポイント」を設けて、ローカル・ウィンドウで、きちんと値が返っているか、見てもよいかと思います。
なお、#3さんのコードは、数式自体を、どこか空いている計算列に、「☆」を出して、それを、ループで、然るべき所に「☆」を置いても構わないはずです。こちらで試してみましたが、私のコードとの違いはありませんでした。この辺りは、必ず、その場所に式を置かなければならないわけではありませんので、臨機応変に考えてください。私は、基本的にはコードが完成品でしたら、誰のでも構いません。
No.3
- 回答日時:
こんにちは!
No.1さんの
>ワークシートには既に物の関数を埋め込んでいますので使用不可です
がよく理解できないのですが、
I3:I187セルには関数は当然入っていないですよね?
No.2さんの回答にもあるのですが、DATEDIF関数の不具合は色々指摘されていますが、
そのDATEDIF関数で
I3セルに
=IF(DATEDIF(F3,TODAY(),"y")+DATEDIF(F3,TODAY(),"ym")/12=85.5,"☆","")
という数式を入れフィルハンドルでI87セルまでコピーしておいてはダメなのでしょうか?
どうしてもVBAというコトであれば
手っ取り早く上記数式を使う方法です。
Sub Sample1()
With Range("I3:I187")
.Formula = "=IF(DATEDIF(F3,TODAY(),""y"")+DATEDIF(F3,TODAY(),""ym"")/12=85.5,""☆"","""")"
.Value = .Value
End With
End Sub
※ VBAだと日付が変わるたびにマクロを実行する必要がありますので、
関数の方が向いていると思うのですが・・・m(_ _)m
この回答への補足
ありがとうございます、
=IF(DATEDIF(F3,TODAY(),"y")+DATEDIF(F3,TODAY(),"ym")/12=85.5,"☆","")
この数式で計算できましたがVBAでは反応がありませんでした、これをもとに考えましてNew Data Rowで入力ごとに蓄積されたセルに数式が埋め込まれた状態で使用できますのでこれで行こうかなとも思っていますが、もう少し考えてみます。
No.2
- 回答日時:
こんにちは。
エクセルVBAの構文を教えて下さい、というわけですが、これは、簡単にみえて、久々の難問でした。理由は、ワークシート関数も、VBA関数も、この計算には、まったく信用がおけないということです。
今回は、#1の方の数式も試してみました。10進で返ってしまうので、85.6 でなくて、85.5 が、6ヶ月のはずです。数式では、DateDif を使えばよいのかもしれませんが、これまた、バグが存在するという話もあります。
しかし、それでも、まだ、例えば、本日 2015/1/25 としますと、85歳6ヶ月の該当者は、1929/6/26~1929/7/25 までの人が該当するはずですね。ここらが、誕生日計算のややこしいところです。
それはともかくとして、誕生日の計算というのは、独特ですね。
以下を参考にしました。
http://www.relief.jp/itnote/archives/excel-calcu …
誕生日の考え方は
「日本の法律では、誕生日の前日が終了する瞬間(すなわち誕生日をむかえる午前0時00分の直前)に1歳を加える。」
「うるう年など、年によって期間を定めた場合において最後の月に応当する日がないときは、その月の末日をもってその年齢が満了する。」
ただし、一応、今回、うるう年の計算処理も含めましたが、その部分は、あまり自信がありません。たぶん、大丈夫だと思いますが。
雑なコードですみません。
最後に、どうしても、誤動作が発生するので調べたら、どうやら、こちらのデータは、ドラッグ・コピーで作成したので、浮動小数点誤差が発生してしまったようです。
'//
Sub Sample2()
Dim rng As Range
Dim toDate As Date
Dim mDate As Date
Dim c, y, m
Const sSRCH As String = "85/6" '85歳と6ヶ月
y = Left(sSRCH, InStr(sSRCH, "/") - 1)
m = Replace(sSRCH, y & "/", "")
Set rng = Range("F3:F187") '検索範囲
toDate = Date
For Each c In rng
If DatemDiff(c.Value, Date) = y * 12 + m Then
c.Offset(, 3).Value = "☆"
End If
Next c
End Sub
Function DatemDiff(a, b)
Dim t, i, j, x, z, m, d, y1, y2, y
If a = "" Or b = "" Then Exit Function
If a > b Then
t = b
b = a
a = t
End If
'うるう年の計算処理
If (Month(a + 1) = 3 Or Month(b + 1) = 3) And (Day(a) = 29 Or Day(b) = 29) Then
If Day(a) = 29 Then a = a - 1
If Day(b) = 29 Then b = b - 1
End If
y1 = Year(a): y2 = Year(b)
i = Month(a): j = Month(b)
x = Day(a): z = Day(b)
y = (y2 - y1)
m = j - i: d = z - x
If m < 0 Then
y = y - 1
m = j + 12 - i
End If
If d < 0 Then m = m - 1 '誕生日計算
DatemDiff = y * 12 + m
'DatemDiff = y & "." & Format(m, "00") '文字列出力
End Function
なお、単独でユーザー定義関数は使えますが、数が多くなると、呼び出しが増えますので、ワークシートが重くなりますので、お勧めしません。
この回答への補足
有難うございます、うまくいきません。ちなみにオフィースバージョンは2003です、標準モジュールにコピーして使用しましたが動きません。ファンクションもそのまま貼り付けたのが良くなかったのでしょうか?生年月日はF3:F187ではなくE3:E187にして使用しました。よろしくお願いします。
補足日時:2015/01/25 18:39お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAのコードについて 2 2022/08/10 21:49
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) 再質問です。エクセルでシートが1から31まであり、日付けが入力されているセルがあります。シート1から 4 2022/08/02 23:08
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Excel(エクセル) エクセルの値を元に図形の色を変えたい 2 2022/05/11 01:37
- Visual Basic(VBA) VBA Twitter 高度な検索 日付 単語 リンクをOutlook で送信 2 2022/06/18 18:36
- Excel(エクセル) Excel2019のデータ入力に便利な関数について 4 2023/07/06 05:42
- Visual Basic(VBA) 翌日にお休み予定の従業員がいる場合にアラートを出したい 1 2023/07/11 11:18
- Excel(エクセル) Excel 売上管理シートに入力した売上データを、日報に自動反映させたいと考えています。 売上管理シ 3 2023/04/29 18:08
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vb6.0で三角関数が使えない
-
変化させるセルが変化しない
-
やってみてもわからないので教...
-
C# 計算処理中に実行中ウィン...
-
MATLABの積分について
-
C言語で、漸化式を使ってパスカ...
-
スライムがつぶれていく様子を...
-
絶対ち
-
VBAの再計算が反映されない件に...
-
JavaScriptでSQLiteの値を使いたい
-
Excel VBAの残業時間の合計計算...
-
VBでReplace
-
Java 電卓の連続計算
-
あのコンピュータアーキテクチ...
-
60進数の四則計算
-
バッチファイルでウインドウを...
-
スパイダソリティアの問題
-
MathematicaのNDSolveで連立常...
-
65536は2の何乗なのでしょうか?
-
素数を自動的に作る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
C言語の課題で、1年の秒数を計...
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
変化させるセルが変化しない
-
CとFORTRANの計算速度はどちら...
-
なぜオーバーフローになるので...
-
数値計算の高速化 (cos, sin, exp)
-
モジュラス103の計算とは何でし...
-
C# 計算処理中に実行中ウィン...
-
モジュロ
-
引き放し法による除算アルゴリ...
-
60進数の四則計算
-
C言語についてです。 再帰を使...
-
Perlで時間の計算
-
CRC8を教えてください
-
傾いた四角形内の範囲の条件式
おすすめ情報