###前提・実現したいこと
艦これの支援ソフト「航海日誌拡張版」から出力される資源ログのデータをもとに、指定日を初日として、このまま遠征等を続けたらいかほど資源が獲得できるかを将来予測する表を作りたい。
###考えたこと
もっと簡単な方法があるならばぜひ教えていただきたいが私は以下のように考えて作ろうと思った
表のデータをもとに予測となるとFORECAST関数を使おうと思ったが、このFORECAST関数、データ間隔が一定でないと使えないようなのだ。
「航海日誌拡張版」から出力される資源ログのデータは、データ感覚が残念ながら一定でない(諸行動ごとに記録するからね)ため、
日ごとに平均などをとってデータ間隔を一定にし、FORECAST関数を使えるデータにしたいのだ。
例
|日付|燃料| |日付|燃料
|:--|:--:|:--:|--:|
|2015/11/5 22:09|14044||
|2015/11/5 22:12|14050|
|2015/11/5 22:22|14059|→|2015/11/5|14049
|2015/11/5 22:23|14043|
|・・・|
こんな感じに
だが、いかにして指定日を初日として各日の範囲を設定するかがわからないのだ。
AVERAGEIF関数を使おうと思っているが、範囲が指定できねば使いようがない…
例ならば、「2017/11/5以上,2017/11/6未満」といった範囲はどのように指定すればよいのか。
なお、指定日は適当なセルに入力される変数とする。
###余談
航海日誌拡張版のプラグインとして実装できれば なお いいのだが如何せん知識がない。
###17/10/22追記
実行時エラー'1004':RangeクラスのSelectメソッドが失敗しました
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
艦これやFORECAST関数でやりたいことについてはよくわかりませんが、
「一定ではない日付時間で記録された数値の、日ごとの平均」が取りたいのであれば、
日付時間を時間を省いた日付だけにしてしまえば、日付でグループ化が可能ですので
小計(集計)機能を使って日付ごとに平均してしまえばよいのではないでしょうか。
日付 | 燃料 | 日付 | 燃料 | |
---|---|---|---|---|
2015/11/5 22:09 | 14044 | → | 2015/11/5 | 14044 |
2015/11/5 22:12 | 14050 | → | 2015/11/5 | 14050 |
2015/11/5 22:22 | 14059 | → | 2015/11/5 | 14059 |
2015/11/5 22:23 | 14043 | → | 2015/11/5 | 14043 |
追記:(小計できる時間付き元データからforecastが動作可能になる手前のデータにするまでのVBA)
VBA
1 Dim rowEnd As Integer 2 With ThisWorkbook.Sheets("Sheet1") 3 '元データ作成 4 rowEnd = .Range("A1").End(xlDown).Row 'データの最終行取得 5 .Range("C1") = "日" 6 .Range("D1") = "値" 7 .Range("C2") = "=TEXT(A2,""yyyy/mm/dd"")" '日付時刻→日付フォーマット変換(時刻を省く) 8 .Range("D2") = "=B2" 9 'オートフィルで全行に適用 10 .Range("C2:D2").Select 11 Selection.AutoFill Destination:=Range("C2:D" & rowEnd), Type:=xlFillDefault 12 .Range("A:B").EntireColumn.Hidden = True '元のデータは非表示にしておく 13 'データ範囲選択 14 .Range("C1:D" & rowEnd).Select 15 '平均値算出 16 Selection.Subtotal GroupBy:=1, Function:=xlAverage, TotalList:=Array(2), _ 17 Replace:=True, PageBreaks:=False, SummaryBelowData:=True 18 '集計行のみ表示 19 .Outline.ShowLevels RowLevels:=2 20 'コピー&ペースト(Sheet1→Sheet3) 21 .Range("C1").CurrentRegion.SpecialCells(xlCellTypeVisible).Select '可視セルのみ選択 22 Selection.Copy Sheets("Sheet3").Range("A1") 23 End With 24 With ThisWorkbook.Sheets("Sheet3") 25 .Select 26 'データ作成 27 rowEnd = .Range("A1").End(xlDown).Row - 1 'データの最終行取得(最後の"全体の平均"の行は除く) 28 .Range("C1") = "日" 29 .Range("D1") = "値" 30 .Range("C2") = "=DATEVALUE((LEFT(A2,FIND("" "",A2))))" '"の平均"を省いて日付データにする 31 .Range("C2").NumberFormatLocal = "yyyy/mm/dd" '日付形式 32 .Range("D2") = "=B2" 33 'オートフィルで全行に適用 34 .Range("C2:D2").Select 35 Selection.AutoFill Destination:=Range("C2:D" & rowEnd), Type:=xlFillDefault 36 .Range("A:B").EntireColumn.Hidden = True '元のデータは非表示にしておく 37 End With
ついでに、VBA実行後に手動でforecast入れてみました。
黄色いところがVBAで作成したところ(Sheet3)で、それ以降がforecastで計算してみた値です。(右側が中身に記述した式です)サンプル少ないのと11/6を適当に作ったので値が微妙ですが、手順の参考にはなるかと。
投稿2017/09/18 00:54
編集2017/09/18 13:57総合スコア219
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/18 00:56
2017/09/18 01:00
2017/09/18 01:08
2017/09/18 01:22
2017/09/18 02:36
2017/09/18 02:39
2017/09/18 02:53
2017/09/18 04:09
2017/09/18 06:57
2017/09/18 10:32
2017/09/18 10:36
2017/09/18 12:35
2017/09/18 12:41
0
すみません、回答を修正したのですが、長すぎたのか、回答が表示されなくなったっぽいので、別回答で追記分を。
追記2
わかりにくかったようなのでもう少し詳しく説明します。
まず、Sheet1に元になるデータを入れておきます。(時間が含まれた日付をA列、燃料の値をB列に入れます。)
次にマクロの実行でVBAを実行します。
すると、Sheet3に日ごとの平均が出来上がります。
Sheet2は使っていません。(作っている途中に仮データを置く場所として使っていましたので結果をSheet3に作るようにしてしまいました)
そしてSheet3に出来上がったデータは、日ごとのデータになっているのでforecastが使えます。
使い方は最初の回答の最後部分を参考にしてください。
というかVBAではまずかったですかね?質問には特にVBA不可とかは無かったと思いますが・・・
やっていることは、手動でも(とりあえずは)可能です。
(VBAでやっていることは、小計機能を使って日ごとの平均を出しているだけですから)
投稿2017/09/18 14:06
総合スコア219
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/21 12:08
2017/09/21 12:19
2017/09/21 22:39
2017/10/01 15:48
2017/10/01 22:41
2017/10/22 07:35
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
Excelで分単位でバラバラに記録されたデータから将来予測