teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

加筆

2021/11/15 04:19

投稿

quark87139
quark87139

スコア6

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  For i = 1 To UBound(tb) '要素1-最大要素数
25
25
 
26
- x(i, 0) = WorksheetFunction.RoundDown((((24 * Day(tb(i, 5)) + Hour(tb(i, 5))) * tb(i, 4)) + (Minute(tb(i, 5)) / 60 * tb(i, 5))), 0)
26
+ x(i, 0) = WorksheetFunction.RoundDown(((24 * Day(tb(i, 5) + Hour(tb(i, 5)) * tb(i, 4)) + (Minute(tb(i, 5)) / 60 * tb(i, 5)), 0)
27
27
 
28
28
  Next i
29
29
 
@@ -56,4 +56,36 @@
56
56
 
57
57
 
58
58
  以上のことからVBA上でDAY関数使っての計算は難しいと踏まえているのですが、
59
- エクセル上に直接関数を入力する他対策はありますでしょうか。
59
+ エクセル上に直接関数を入力する他対策はありますでしょうか。
60
+
61
+
62
+ ---
63
+ 追記①
64
+ コードだけでは分かりづらいといった指摘を受けております。
65
+ そもそもVBA上の仕様が原因だと私の思い込みが原因となります。
66
+ 実際に自分で読み返したところ、抽出的な書き方で分かりづらい点があり大変申し訳ございません。
67
+
68
+ 取り急ぎ以下実際の処理結果ページと検証結果を以下にて記載します。
69
+ 「DAY関数が正しい数値を抽出できていないため正しい数値が得られません。」とありますが、
70
+
71
+ 試行時間(F列)から日と時と分の要素を取り出して、固定値と掛けて合計値を抽出するといった処理部分となるのですが、
72
+ 図にもあるように正しくない計算結果(H列)が反映されています。
73
+ ※エクセル関数の場合、VBA上と同じ処理で行われているにも関わらず正しい結果が表示
74
+
75
+ ▼正しい処理が行われていないということを踏まえ、
76
+ それぞれの要素を変数に格納して確認してみました。
77
+ 4行目 の試行時間(4:53)の場合
78
+ Day(4:53) = 30
79
+ Hour(4:53) = 4
80
+ Minute(4:53) = 53
81
+ ※分かりやすいように4:53と表記していますが、実際は配列で格納した分を入れています。
82
+
83
+ 検証結果にもあるように、Day関数のところにおいて
84
+ 本来であれば24時間以下なので0とするところ、30となっていることが
85
+ 正しい計算が行われていないことの要因と結論に至りました。
86
+
87
+ 今気づいたのですが、
88
+ 当初僕が思い込んでいたVBA上の仕様が正しいとすると、
89
+ 31となるところですが、30となっているので検討違いである可能性が高いかも知れません。
90
+
91
+ ![イメージ説明](e5365c5d98e8f05973176673ef33007c.png)