Excel VBAで時系列順にデータをコピペする方法

このQ&Aのポイント
  • ExcelのVBAを使用して、CSV形式のデータを時系列順にコピペする方法を説明します。
  • CSVファイルをテキストファイルとして開き、一番下に次のデータを時系列順にコピペします。
  • ファイル名の順序が日付順になっていない場合でも対応できます。
回答を見る
  • ベストアンサー

VBAによる時系列順のコピぺ

複数のデータがあり、元データはCSV形式なんですが、今までメモ帳として開き時系列順にコピペしていました。 1ファイルにつき1日分で10年分以上あるファイルもあります。 例えば「20090102(.csv)」、「20090104(.csv)」・・・、というようにファイル名が続きます。 「20090102(.csv)」の「2009」は年、「01」は月、「02」は日を表します。 これをExcelのVBAで時系列順にコピペしたいのですが、VBA初心者のため全く分からないのですが可能でしょうか? 条件、あるいは、規則としましては、 ・CSVファイルとして開いてしまうとデータの内容が変わってしまうため、テキストファイル(.txt)として開き、一番下(画像の下のテキストファイルの赤い四角枠部分)に次のデータを時系列順にコピペする。 ・元のデータのファイル名は上記のように「20090102(.csv)」であれば、「2009」(年)、「01」(月:2桁表示)、「02」(日:2桁表示)の表示順なのですが、必ずしも2009年から始まっているわけではなく、2001年の場合もあれば、2005年など異なる。 ・元のデータである各ファイルは「20090102(.csv)」、「20090104(.csv)」のように時系列順なのですが、日付が飛ぶことがある(1月2日、1月4のように)。 ・元のデータが格納されているフォルダを自由に変えられる。 画像の上が元のデータで、下がテキストファイルとして開いたときの内容です。 可能ならば、そのプログラムを教えてください。 Excel2010です。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.4

>「フォルダを指定する場合」と「ファイルを指定する場合」とでは >ダイアログの表示が異なるのですが、これは仕様でしょうか? >「ファイルを指定する場合」での表示方法の方がやりやすかったです。 FileDialogオブジェクトを使用したフォルダ選択ダイアログに変更しました。 No3のコードと最下のVBAコードを差し換えてください。  ※実行時に「FileDialog(msoFileDialogFolderPicker)」でエラーが出る場合、   VBEのツール→参照設定より以下のライブラリを追加してください。       Microsoft Office xx.x Object Library              (xx.xは数値) また、フォルダ選択ダイアログには以下のようなものもありますので参照願います。 参考:http://officetanaka.net/excel/vba/tips/tips39.htm ■VBAコード Sub Sample()   '準備   Dim Fbuf As Variant, buf As Variant, filnames() As Variant, filname As String   Dim Fso As Object, dirpath As String, fcnt As Long, cnt As Long   Set Fso = CreateObject("Scripting.FileSystemObject")   'フォルダ/ファイル選択ダイアログ切替用(mode=1:ファイル選択 / mode=0:フォルダ選択)   Const mode As Integer = 0 '★      '選択ダイアログの判定   If mode = 1 Then     'ファイル開くダイアログ表示:入力元のCSVファイル指定(複数可)     buf = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", MultiSelect:=True)   Else     'フォルダ選択ダイアログ表示:全てのCSVファイルを対象     With Application.FileDialog(msoFileDialogFolderPicker)       If .Show = -1 Then 'OKボタンが押された場合の処理         dirpath = .SelectedItems(1) & "\" 'フォルダパス格納         buf = Dir(dirpath & "*.csv") 'CSVファイルの格納       End If     End With   End If   'ファイルパスの配列格納処理   If dirpath <> "" Then     'CSVファイルを取得     Do While buf <> ""       ReDim Preserve filnames(cnt + 1)       filnames(cnt) = dirpath & buf       cnt = cnt + 1       buf = Dir()     Loop     'CSVファイルが無い場合の処理     If cnt = 0 Then       MsgBox dirpath & " にCSVファイルがありません" & vbCrLf & "終了します"       Exit Sub '終了     Else       cnt = 0     End If   Else     'ファイルパスの格納     If IsArray(buf) = False Then       ReDim filnames(0)     Else       ReDim filnames(UBound(buf))       filnames = buf     End If   End If   'キャンセルで終了   If UBound(filnames) = 0 Then MsgBox "キャンセルされました": Exit Sub   fcnt = UBound(filnames)   'ファイル保存ダイアログ表示:出力先のテキストファイル指定   filname = Application.GetSaveAsFilename(InitialFileName:=ThisWorkbook.Name _        , FileFilter:="テキストファイル(*.txt),*.txt" _        , FilterIndex:=1, Title:="保存先の指定")   'キャンセルで終了   If filname = "False" Then MsgBox "キャンセルされました": Exit Sub   '出力用ファイルの用意   Open filname For Output As #2     'ファイル数の数だけ繰り返し     For Each Fbuf In filnames       If Fbuf <> "" Then         'CSVファイルをテキストデータとして開く         Open Fbuf For Input As #1           'ファイルの最終行まで繰り返し           Do Until EOF(1)             'ファイルの各行を読込み             Line Input #1, buf             '各行を出力用ファイルへ書き出し             Print #2, buf           Loop         'CSVファイルを閉じる         Close #1       End If       Application.StatusBar = Round(cnt * 100 / fcnt, 0) & " %"       cnt = cnt + 1       DoEvents     Next Fbuf   '出力用ファイルを閉じる   Close #2   MsgBox CStr(fcnt) & " ファイル終了しました"   Application.StatusBar = False End Sub

miya_HN
質問者

お礼

再び回答を頂きましてありがとうございます。 なるほど、ダイアログにも種類があるんですね。 「ファイルを指定する場合」で表示されていたダイアログは「FileDialogオブジェクトを使う方法」だったんですね。 URLは大変参考になりました。 またコードを記述していただきありがとうございます。 本当にありがとうございました。

その他の回答 (3)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

No2の修正・変更及び補足です。 >ただ、その後何も起こりませんでした。 失礼しました。コードの返り値判定部分で強制的に終了するようになっておりました。 修正しました。 >ファイルサイズが多すぎて時間がかかっているのかと思い、合計で2.4MB程度で試しましたが、やはり保存されませんでした。 今回のコードは1ファイル8行で1000ファイル3.9MBでテスト動作することを確認しました。 >「特定のフォルダ内の全てのファイルを1つに統合」する場合、 >「特定のフォルダ内のファイルを指定して1つに統合」する場合、 >の二通りのコードを教えて頂けませんか? 処理部は同じため、ファイルパスの格納部を分けた形でコードを変更しました。 変数(mode)の値により、ファイル選択またはフォルダ選択を切り替えれるようにしています。 コード内の末尾に「★」を記述している行にて、modeの値を「0」または「1」で設定してください。  フォルダを指定する場合 ⇒ Const mode As Integer = 0 '★  ファイルを指定する場合 ⇒ Const mode As Integer = 1 '★ >「開発」→「挿入」→ボタン(フォームコントロール)でボタンを作成し >「Sub 任意の文字_Click()」に変更すれば可能でしょうか?  「Sub 任意の文字_Click()」の様式で記述する場合はフォームコントロールではなく、ActiveXコントロールのボタンかと思います。この場合はシートModuleにコードを記載し、プロシージャ名は「Sub 任意の文字_Click()」となります。(下記(3)を参照願います)  フォームコントロールのボタン又はオートシェイプをボタンとして使用する場合は標準モジュールにコードを記載し、プロシージャ名は「「Sub 任意の文字()」」となります。(下記(1)又は(2)を参照願います) (1)開発タブから、フォームコントロールでボタンを追加した場合は、先に標準モジュールを作成し、コードを貼り付けたのちにフォームコントロールのボタン追加時にダイアログが表示されますので、実行するマクロのプロシージャ名「Sample」を指定してください。 (「Sample」を変更する場合はコード貼付け時に変更願います) (2)挿入タブから、オートシェイプを追加しボタンとして使う場合は、標準モジュールにコードを貼付け、挿入からオートシェイプを貼付け、右クリック→マクロの登録→「Sample」を指定してください。 (「Sample」を変更する場合はコード貼付け時に変更願います) (3)開発タブから、ActiveXコントロールのボタンを追加した場合は、追加したボタンを(デザインモードで)右クリック→プロパティ→オブジェクト名を「任意の名前」とし、ボタンを貼り付けたシートのタブ(Sheet1やSheet2等)を右クリック→コードの表示→コードを貼り付けた後にコード冒頭の「Sample」の箇所を「任意の名前」に変更してください。 参照(1)(2):http://www4.synapse.ne.jp/yone/excel2010/excel2010_macro_form.html 参照(3):http://www4.synapse.ne.jp/yone/excel2010/excel2010_macro_command.html >それでやってみたのですが、ボタンをクリックすると「※1」まで行えたため合っていると思うのですが。 ダイアログの表示はコード内での動作になりますので、ダイアログが表示されればコードが実行されていますので問題ありません。 ■VBAコード Sub Sample()   '準備   Dim Fbuf As Variant, buf As Variant, filnames() As Variant, filname As String   Dim Shell As Object, Fso As Object, dirpath As Variant, fcnt As Long, cnt As Long   Set Shell = CreateObject("Shell.Application")   Set Fso = CreateObject("Scripting.FileSystemObject")   Set dirpath = Nothing      'フォルダ/ファイル選択ダイアログ切替用(mode=1:ファイル選択 / mode=0:フォルダ選択)   Const mode As Integer = 0 '★      '選択ダイアログの判定   If mode = 1 Then     'ファイル開くダイアログ表示:入力元のCSVファイル指定(複数可)     buf = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", MultiSelect:=True)   Else     'フォルダ選択ダイアログ表示:全てのCSVファイルを対象     Set dirpath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\")   End If   'ファイルパスの配列格納処理   If Not dirpath Is Nothing Then     'CSVファイルを取得     ReDim filnames(Fso.GetFolder(dirpath.Items.Item.Path).Files.Count)     For Each buf In Fso.GetFolder(dirpath.Items.Item.Path).Files       If buf Like "*.csv" Or buf Like "*.CSV" Then         filnames(cnt) = buf         cnt = cnt + 1       End If     Next buf     ReDim Preserve filnames(cnt)     cnt = 0     'CSVファイルが無い場合の処理     If UBound(filnames) = 0 Then       MsgBox dirpath.Items.Item.Path & " にCSVファイルがありません" & vbCrLf & "終了します"       Exit Sub '終了     End If   Else     'ファイルパスの格納     If IsArray(buf) = False Then       ReDim filnames(0)     Else       ReDim filnames(UBound(buf))       filnames = buf     End If   End If   'キャンセルで終了   If UBound(filnames) = 0 Then MsgBox "キャンセルされました": Exit Sub   fcnt = UBound(filnames)   'ファイル保存ダイアログ表示:出力先のテキストファイル指定   filname = Application.GetSaveAsFilename(InitialFileName:=ThisWorkbook.Name _        , FileFilter:="テキストファイル(*.txt),*.txt" _        , FilterIndex:=1, Title:="保存先の指定")   'キャンセルで終了   If filname = "False" Then MsgBox "キャンセルされました": Exit Sub   '出力用ファイルの用意   Open filname For Output As #2     'ファイル数の数だけ繰り返し     For Each Fbuf In filnames       Debug.Print cnt & "[" & Fbuf & "]"       If Fbuf <> "" Then         'CSVファイルをテキストデータとして開く         Open Fbuf For Input As #1           'ファイルの最終行まで繰り返し           Do Until EOF(1)             'ファイルの各行を読込み             Line Input #1, buf             '各行を出力用ファイルへ書き出し             Print #2, buf           Loop         'CSVファイルを閉じる         Close #1       End If       Application.StatusBar = Round(cnt * 100 / fcnt, 0) & " %"       cnt = cnt + 1       DoEvents     Next Fbuf   '出力用ファイルを閉じる   Close #2   MsgBox CStr(fcnt) & " ファイル終了しました"   Application.StatusBar = False End Sub

miya_HN
質問者

お礼

回答ありがとうございます。 回答者様の新たな回答が来るまで自分なりに調べテキストファイルの統合に成功したのですが、保存先の指定でキャンセルをしたとき「False」というファイルが作成されてしまうためどうしたもんかと思っていました。 今回のコードでテキストファイルの統合に成功しました。 さらに、メッセージ付きのコードまで記載していただき大変感謝しております。 ボタンからでもできました。 「フォルダを指定する場合」と「ファイルを指定する場合」とではダイアログの表示が異なるのですが、これは仕様でしょうか? 「ファイルを指定する場合」での表示方法の方がやりやすかったです。 申し訳ありませんが、再び回答をいただけないでしょうか? 回答よろしくお願いします。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

>VBA初心者のため全く分からない 各コードの頭に処理内容のコメントを追加しています。参考にしてください。 >出力は、テキストファイル(.txt)で任意にファイル名を付け、 >保存したい場所に自由に保存できるという形にしたいです。 テキストファイルの保存先を指定するダイアログを表示するようにしました。 >入力側ですがプログラムを実行したとき、任意のフォルダを参照して >(C、D、・・・ドライブと決めるのではなく)その中のファイルを >1つのファイルに統合したいです。 特定フォルダ内の(全てのデータでなく)複数のCSVファイルを元データとして指定し、 1つのファイルに結合すると解釈します。 上記の意味合いであれば「ドライブレター:C:\ D:\」に関する文面をあえて 出されている事が気になっております。 解釈が異なっていれば補足願います。 ■VBAコード Sub Sample()   '準備   Dim Fbuf As Variant, buf As String, filnames As Variant, filname As String   'ファイル開くダイアログ表示:入力元のCSVファイル指定(複数可)   filnames = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", MultiSelect:=True)   'キャンセルで終了   If IsArray(filnames) = False Then Exit Sub   'ファイル保存ダイアログ表示:出力先のテキストファイル指定   filname = Application.GetSaveAsFilename(InitialFileName:=ThisWorkbook.Name _        , FileFilter:="テキストファイル(*.txt),*.txt" _        , FilterIndex:=1, Title:="保存先の指定")   'キャンセルで終了   If IsArray(filname) = False Then Exit Sub   '出力用ファイルの用意   Open filname For Output As #2     'ファイル数の数だけ繰り返し     For Each Fbuf In filnames       'CSVファイルをテキストデータとして開く       Open Fbuf For Input As #1         'ファイルの最終行まで繰り返し         Do Until EOF(1)           'ファイルの各行を読込み           Line Input #1, buf           '各行を出力用ファイルへ書き出し           Print #2, buf         Loop       'CSVファイルを閉じる       Close #1     Next Fbuf   '出力用ファイルを閉じる   Close #2 End Sub

miya_HN
質問者

お礼

回答ありがとうございます。 回答者様のコードで「ファイルを開く」ダイアログが表示され、目的のファイルを指定し、「開く」を押すと「保存先の指定」ダイアログが表示され、任意にファイル名を付け、保存先まで自由に選択できました。 そして「保存」を押しました。 ここまでは成功しました。(※1) ただ、その後何も起こりませんでした。 ファイルサイズが多すぎて時間がかかっているのかと思い、合計で2.4MB程度で試しましたが、やはり保存されませんでした。 >特定フォルダ内の(全てのデータでなく)複数のCSVファイルを元データとして指定し、 1つのファイルに結合すると解釈します。 そうですね。 合っていますが一応、 「特定のフォルダ内の全てのファイルを1つに統合」する場合、 「特定のフォルダ内のファイルを指定して1つに統合」する場合、 の二通りのコードを教えて頂けませんか? ちなみに、ボタンから実行する場合、「開発」→「挿入」→ボタン(フォームコントロール)でボタンを作成し、「開発」→「Visual Basic」で、標準モジュールを作成し、回答者様のコードをコピペし「Sub Sample()」の部分を「Sub 任意の文字_Click()」に変更すれば可能でしょうか? それでやってみたのですが、ボタンをクリックすると「※1」まで行えたため合っていると思うのですが。 お手数ですが、もう一度回答よろしくお願いします。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

どの様に出力したいのでしょうか? 1つのCSVファイルに複数行のデータが有り、1つのフォルダ内にあるCSVファイルを結合したい。その際ににデータの第1カンマまでの時系列にてソートした順としたいのであれば、以下のようなコードで可能ですが。 「"C:\ディレクトリパス\"」にて対象フォルダを指定してください(フォルダパスの最後には「\」を付けてください)。現在アクティブなシートのセルA1から下にCSVのデータが書出されます。 フォルダ内のCSVファイルの中身を順にA列へ書出します。開くファイルの順番はファイル名順になるため、おのずと時系列となるかと思います。 また再帰処理ではありませんので、サブフォルダ内のCSVは対象となりません。 カンマで区切りセルに分配するわけでないので、データの内容は変わらないかと思いますので、テキストファイルとして保存しないのであれば出力後のデータにてA列を選択してからテキストファイルへ張り付け保存してください。 ■VBAコード Sub Sample()   Dim Fbuf As String, buf As String, cnt As Long   Const Path As String = "C:\ディレクトリパス\"   Fbuf = Dir(Path & "*.csv")   Do While Fbuf <> ""     Open Path & Fbuf For Input As #1       Do Until EOF(1)         Line Input #1, buf         cnt = cnt + 1         Cells(cnt, 1).Value = buf       Loop     Close #1     Fbuf = Dir()   Loop End Sub

miya_HN
質問者

お礼

回答ありがとうございます。 重要なことを記載し忘れていました。 出力は、テキストファイル(.txt)で任意にファイル名を付け、保存したい場所に自由に保存できるという形にしたいです。 もう一つあるのですが、入力側ですがプログラムを実行したとき、よく分かりませんが「ダイアログボックス」というのでしょうか?そのような表示が出て任意のフォルダを参照して(C、D、・・・ドライブと決めるのではなく)その中のファイルを1つのファイルに統合したいです。 入力側も出力側も自由に決められる形にしたいのですが。 お手数ですが、もう一度回答よろしくお願いします。

関連するQ&A

  • 16ケタの数値の下一桁が”0”になってしまう。

    CSVファイルに出力されたテキストファイルをエクセルで読み込みました。その時に”1000058216333401”と秀丸などのテキストエディタでは表示されるテキストが、エクセルだと”1000058216333400”と下一桁が必ず”0”となっています。ほかにも1000件程度のデータで16桁のデータの必ず下一桁が”0”となってしまいます。 ”1000058216333401” このようにCSVファイルに書かれている通りのデータにする日はどうしたらよいでしょうか? どうぞ、ご教授の程よろしくお願い致します。

  • エクセルでの時系列表示

    エクセルの時系列データがあるのですが、その表示方法についてお尋ねします。 以下がそのデータをcsv形式に変換した一部です。 2019/07/31 24:00,237.81, , , , 2019/08/01 01:00, , , , 年・月・日・時間・分が1つかたまりで、その次にカンマで区切られたデータが来ています。このようなものが1万個ぐらいあります。1時間ごと(その意味では分は不要)のデータで年月日時間順に並んでいます。自動計測の気象データのようなものです。このようなデータがあったとき、それを時系列に表示する方法が難しいと思っています。また作図したときの図のメモリ数字の表示方法も問題です。系統的に間引く必要があります。元旦からの時間数で通しで表示すればよい(メモリ数字は10日=240時間ごととか)ように思いますが、季節の感じが欠落します(元旦からの時間数にはあまり意味がない)。月がわかるように表示するのがいいのかもしれません。時系列を作成して横軸の時間に1月、2月...と区切りをつける方法があるでしょうか。自分で考えてレジェンドを入れていくのも方法ですが、オートマチックにやりたいのですが。作図なので編集する必要があり、そのたびに細かいレジェンド設定は効率が悪いのです。よろしくお願いします。

  • CSVデータを取得・編集しTXTに保存する方法

    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によるプログラムを教えてください。 回答よろしくお願いします。

  • EXCEL VBAにおけるサンプルコードをお教えく

    EXCEL-VBAにて、データ変換プログラムを作成するにあたっての質問です。 元CSVファイルから、特定の項目でグルーピングし、グルーピングした単位で、CSVファイルを作成する仕組みを考えております。 そこで質問です。 1テキストファイルから複数ファイルを作成するロジックサンプルを提供しているHPなどご存知でしたらお教えください。尚、作成するファイル数は固定ではなく、変動致します。(元データのグルーピング結果次第)

  • Excel VBAが徐々に遅くなる

    エクセルのVBAであるテキストファイルを読み込み、計算してCSVで吐き出すというプログラムを組んでいます。 質問はその計算スピードが徐々に遅くなってしまうということです。 計算し始めは大体1テキストファイルを読み込んでCSVに吐き出すのに1分くらいで済むのですが、3,4時間回してると1テキストファイル⇒CSVに2,30分かかってしまいます。 シートが増えていたりグラフを追加したりはしていません。 また、VBAの変数もできるだけ初期化するようにしてます。 読み込んでいくテキストファイルのサイズもそんなに変わらないです。 何か考えられる原因はないでしょうか? ご教授宜しくお願いします。

  • NASDAQ、NYSEの時系列株価データの販売

    過去10年分くらいのデータがまとまっている NASDAQ、NYSEの時系列株価データ(ファイルタイプはcsvなど) を販売しているサイトを探しています。 あまりに高額だと手が出せませんが、 一応上限は20万円とします。 ご存知の方が、もしいらっしゃいましたら よろしければお教え下さい。

  • ACCESS2003 VBAテキスト編集

    テキストファイルに必要な部分だけ、別テキストに吐き出したいのですが、 元テキストの例 00,05,"0002027600002010102703154301253645 0001" 01,00,"STATUS-C " 02,00,"* あああああ 15時44分 *" 02,00,"* ABCDE 15時44分 *" 02,00,"* 123687あああ 15時51分 *" 上記のような、テキストファイルより、" "の間の内容を別テキストに 吐き出したいのですが、VBAでどのように記述したら良いですか? 開始の"は7桁目と決まっていますが、終わりの"は文字の最後に付くので 桁数は決まっていません。 別テキストに吐き出すときは、" "も取り除いて落としたいです。 簡単な説明で申し訳ありませんが、ACCESS2003 VBAのコーディングを 教えてください。

  • FXの日足時系列データをダウンロードできるサイトはありませんか?

    ドル円などの日足の長期間(過去6年くらい)の時系列データを ダウンロード出来るところを探しています。 データをエクセルファイルで保存しようと思っています。 日本のヤフーファイナンスや、インフォシークファイナンス、 ドリームバイザー.comのサイトで時系列データが見れますが、 長期のデータをボタンひとつでダウンロードすることができません。 やはり1ページ1ページ手作業でエクセルにコピペして行くしかないのでしょうか。 例えばNYダウの日足時系列データを10年分ダウンロードしようと思ったら、 アメリカのヤフーファイナンスのサイトから1発ダウンロードできます。 このような感じでデータ取得できるところはないのでしょうか? よろしくお願いいたします。

  • コピペで1つにまとめた散布図の系列の指定方法を教えてください。(Excel2003)

    コピペで1つにまとめた散布図の系列の指定方法を教えてください。(Excel2003) 気温を横軸、降水量を縦軸とし、1月と2月の散布図を作りました。 A列 1月気温(31データ) B列 1月降水量(31データ) C列 2月気温(28データ) D列 2月降水量(28データ) 2月のグラフ(C,D列)をコピーして1月(A,B列)のグラフに貼りつけ、1枚のグラフに2系列のデータがある状況です。 ここで、2月の降水量の系列を指定する方法を教えてください。 2月のデータの書式を変更したいのですが、 ActiveChart.SeriesCollection(2).Select としても、なぜか1月の系列が選択されてしまい、うまくいきません。 よろしくお願いします。

  • 生年月日が「20080625」の様に表示されている複数のセルを年齢順ではなく、月日順に並べる方法

    こんにちわ。 CSVファイルを元に、エクセルで誕生日を管理する表を作っているのですが、 大本のCSVファイルの生年月日の欄が、西暦で「20080625」「19990301」となっており/が入力されていないのです。 他の列のセルには名前や住所が入力されています。 例「名前」「住所」「〒」「生年月日」 年齢に関わらず、月順に生まれの早い日から行を順に並べた表が欲しいのですが、今のままだと年齢順にしか並べられません。 このようなセル群を年の部分は関係なく、月日順に並べる方法はありますでしょうか? あと簡単な作業で複数セルに一度に「20080625」→「2008/06/25」と/等を挿入する方法はありますでしょうか? どうぞよろしくお願い致します。

専門家に質問してみよう