質問: Excel2016のVBAで、ある時系列のCSVファイルのデータを取得・編集し、テキストファイルに保存する方法についてなんですが、やりたいことの順序としては次の通りです。 ■1. CSVファイルの保存先が特定されていないため、ダイアログで開くファイルを指定します。ただ、開く際、1ヶ月の短い期間であってもExcelの最大行数1,048,576行を軽く超えてしまうため、テキストファイルで開きます。 ■2. 開かれたファイルのデータを取得・編集します。 テキストファイルで開いたデータは、1行目から順に次のようになっています。 1行目は文字列 2003.05.04 21:00:00.626,118.99,118.94,20.8,0.6 2003.05.04 21:00:00.989,118.969,118.949,44.4,54.3 2003.05.04 21:00:01.408,118.958,118.948,28.7,0.8 2003.05.04 21:00:01.741,118.957,118.942,0.5,15.7 2003.05.04 21:00:22.638,118.953,118.943,0.5,37.7 2003.05.04 21:00:25.348,118.96,118.94,60.5,35.7 2003.05.04 21:00:26.087,118.956,118.946,8,13.6 2003.05.04 21:00:27.984,118.956,118.952,23.9,8.4 2003.05.04 21:00:49.884,118.968,118.948,3.2,47.1 2003.05.04 21:00:55.855,118.972,118.952,52.7,39.1 2003.05.04 21:01:05.362,118.971,118.961,21.5,4 2003.05.04 21:01:21.012,118.983,118.958,0.6,38.3 2003.05.04 21:01:33.806,118.984,118.964,8.8,35.1 2003.05.04 21:01:51.362,118.986,118.966,76.1,38.1 2003.05.04 21:01:52.171,118.987,118.967,47.1,39.1 2003.05.04 21:02:05.014,118.982,118.972,0.8,8.5 2003.05.04 21:02:06.232,118.985,118.965,0.9,30.9 2003.05.04 21:02:15.026,118.983,118.963,7.6,40.5 2003.05.04 21:02:19.716,118.979,118.959,11.7,32 2003.05.04 21:02:31.766,118.971,118.961,0.6,53.5 2003.05.04 21:02:49.565,118.975,118.955,8,54.3 2003.05.04 21:03:01.095,118.973,118.953,12,74 2003.05.04 21:03:12.396,118.968,118.958,31.9,64.7 ~ 最終行は改行 1行目は単なる文字列で、不要なデータのため除きます。 必要なデータは2行目からで、必ず、次のような形式になっています。 「西暦4桁」、「.」、「月2桁」、「.」、「日にち2桁」、「半角スペース」、「時間2桁」、「:」、「分2桁」、「:」、「秒小数点3桁」、「,」、「数値」(小数点桁数変動)、「,」、「数値」(小数点桁数変動)、「,」、「数値」(小数点桁数変動)、「数値」(小数点桁数変動) ちなみに、データが飛ぶことがありますが、必ず時系列になっており、恐らく途中で空白の改行はありません。 そして、データ取得に必要なデータは、年月日と時刻、2つ目の数値です。 上記のデータの2行目の例だとすると、次のようになります。 2003.05.04 21:00:00.626(●必要),118.99(×不要),118.94(●必要),20.8(×不要),0.6(×不要) 次に編集するのは、同じ1分以内の年月日と時刻の「1分間隔の年月日と時刻」、「最初の数値」、「最大値」、「最小値」、「最後の数値」、「1分間のデータの個数」で、1分間隔にしてもらいたいのです。 同じ1分以内の年月日と時刻というのは、「**:**:00.000」から「**:**:59.999」までの間です。「21:01」であれば、「21:01:00.000」から「21:01:59.999」までということになります。 例えば、「2003.05.04 21:01」であれば、上記のデータから抜き出すと次のようになります。また、1分間のデータの個数は5となります。 2003.05.04 21:01:05.362,118.971,118.961(最初の数値),21.5,4 2003.05.04 21:01:21.012,118.983,118.958(最小値),0.6,38.3 2003.05.04 21:01:33.806,118.984,118.964,8.8,35.1 2003.05.04 21:01:51.362,118.986,118.966,76.1,38.1 2003.05.04 21:01:52.171,118.987,118.967(最大値、最後の数値),47.1,39.1 恐らく、同じ1分以内の年月日と時刻のデータが1個だけということはないと思いますがその場合、「最初の数値」、「最大値」、「最小値」、「最後の数値」は全て同じ数値となります。 そして、出力する際、次のような形式にします。 「西暦4桁」、「.」、「月2桁」、「.」、「日にち2桁」、「,」、「時間2桁」、「:」、「分2桁」、「,」、「最初の数値」、「,」、「最大値」、「,」、「最小値」、「,」、「最後の数値」、「1分間のデータの個数」 「2003.05.04 21:01」であれば、編集結果は次のようになります。 2003.05.04,21:01,118.961,118.967,118.958,118.967,5 これを1分間隔で時系列に沿って1行目から、 2003.05.04,21:01~ 2003.05.04,21:02~ 2003.05.04,21:03~ ~ のようにします。 変数を使うのであれば、各変数名を次のようにしてもらいたいです。 「最初の数値」を、Open、 「最大値」を、High、 「最小値」を、Low、 「最後の数値」を、Close、 「1分間のデータの個数」を、Volume ■3. ダイアログで開くように指定し、保存先を決め、編集したデータが入ったテキストファイルが自動的に作成され、保存できるようにします。 ファイル名は、 「元のCSVファイルの左から6文字目まで」、「_」、「最初のデータの西暦4桁」、「.」、「最初のデータの月2桁」、「.」、「最初のデータの日にち2桁」、「.」、「最初のデータの時間4桁」(「:」を除いた時間と分)、「-」、「最後のデータの西暦4桁」、「.」、「最後のデータの月2桁」、「.」、「最後のデータの日にち2桁」、「.」、「最後のデータの時間4桁」(「:」を除いた時間と分) と自動的にファイル名が付けられるようにしてもらいたいです。 例えば、次のような感じです。 ******_2003.05.04.2100-2003.05.30.1459 少し調べたのですが、CSVファイルを開くプログラムは分かったのですが、それ以降のテキストファイルで開き、データを取得などは分かりませんでした。 自分が不勉強で申し訳ないのですが、可能であればこれらのVBAによるプログラムを教えてください。 回答よろしくお願いします。
回答: もう疲れました。 1件目は無視すると書いてあったので、そのようにしたら、1件目のデータを読み込むというし、データの個数の数え方がいまだにわかりません。 無償ではこれ以上できません。 おろさせていただきます。