Excel2016のVBAでCSVデータを取得・編集しTXTに保存する方法

このQ&Aのポイント
  • Excel2016のVBAを使用して、特定のCSVファイルのデータを取得・編集し、テキストファイルに保存する方法について説明します。
  • CSVファイルをダイアログで開き、Excelの最大行数を超えないようにテキストファイルで開きます。その後、データを取得・編集します。
  • 取得したデータは、年月日と時刻、最初の数値、最大値、最小値、最後の数値、1分間のデータの個数に編集されます。最後にテキストファイルとして保存します。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.7

 なるほど、入力ファイルが2つあるということですか。  これで、「1件目のデータを読み込む」の意味も、2015.12.31 21:18が0 になる理由もわかりました。  しかし、そうなるとマッチング処理が必要で、プログラムが複雑になります。やはり無償で引き受けることはできません。他にもそんな人はいないと思います。有償でも構わないのであれば、私がこのまま引き受けてもかまわないし、プログラム開発を請け負うサイトがあるので、そこに相談するのもいいと思います。  お金が出せないのであれば、自分で開発するしかありません。

miya_HN
質問者

お礼

お礼が大変遅くなり申し訳ありません。 回答ありがとうございます。 ご理解いただけて感謝いたします。 前回、回答者様のプログラムを基に自分でプログラムを作ってみたと言いましたが、若干データが合わない箇所があったため修正してみたところ全て一致させることができました。 かなりの件数があったため、確認するのに時間がかかりましたが成功しました。 このプログラムは、回答者様の回答がなければできませんでした。 これは全て回答者様のおかげです。 ありがとうございました。

その他の回答 (6)

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.6

もう疲れました。 1件目は無視すると書いてあったので、そのようにしたら、1件目のデータを読み込むというし、データの個数の数え方がいまだにわかりません。 無償ではこれ以上できません。 おろさせていただきます。

miya_HN
質問者

お礼

回答ありがとうございます。 データの個数に関しては、大変申し訳ありません。質問する前にはっきり決めるべきでした。 他に聞きたいことがあったのですが非常に残念ですが、ありがとうございました。 ただ、一つだけ。 自分は、説明下手で注意されてもなかなか直りません。 そして、回答者様に「1件目は無視すると書いてあったので、そのようにしたら、1件目のデータを読み込むというし~」という誤解を与えてしまいました。 2つ目の質問で、自分は「1分単位とミリ秒単位のデータの2つのデータをプログラムで処理すればできるのではないかと思いました。」と書き、作成手順の「■1」と「■2」も書きました。 これらから、2つのファイルのデータが必要であることを理解していただけたのではないかと思い、「1件目は無視する」ということではないのですが・・・。 どの部分の記述で、そのような誤解を与えてしまったのでしょうか? ここで終わってしまうのは残念ですが、回答者様の回答のおかげで処理速度も含めVBAで、データの個数や日本時間に直すなど最終的なデータの作成のほとんどのことが可能であるということが証明できました。 本当に感謝しております。 ありがとうございました。

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.5

(1)スペースができるのを消したい。 CSV なのでスペースがあっても問題はないと思っていました。 (2) 2015.12.31 21:17:00,120.184,120.184,120.18,120.18,6.99 2015.12.31 21:18:00,120.18,120.18,120.18,120.18,0 2015.12.31 21:19:00,120.181,120.182,120.18,120.18,11.5 これでどうして、 2015.12.31 21:18,0 になるのですか?データはあるので1 ではないのですか? データの無い場合0 データを作ると、膨大な量になると思うのですが。 (3)「ダイアログで開くように指定し、保存先を決め」私はこれを見落としていました。 「最後のデータの日にち・最後のデータの時間」はファイルの最後を読まないと決定しません。 ファイルの最後を先に読むという、トリッキーなことをしなければなりません。 ' Option Explicit ' Sub Macro1() '   Dim InpFile As String   Dim OutFile As String   Dim Idx As Long   Dim FileData As String   Dim NowDate As String * 10   Dim NowTime As String * 5   Dim NowDateTime As Long   Dim OldDateTime As Long   Dim Volume As Integer '  入力ファイル指定   InpFile = Application.GetOpenFilename("CSV ファイル,*.csv")   If InpFile = "False" Then     End   End If   Open InpFile For Input As #1 '   Idx = InStrRev(InpFile, "\")   ChDir Left(InpFile, Idx - 1) '  2件目のデータを読む   Line Input #1, FileData   Line Input #1, FileData   InpFile = Mid(InpFile, Idx + 1, 6) & "_" & Left(FileData, 10) & "." & Mid(FileData, 12, 2) & Mid(FileData, 15, 2) '  最終データを読む、下の数字は最後のレコードの長さより大きくする。大きければ確実だか、出力ファイルの指定が遅くなる。   Idx = LOF(1) - 100   Seek #1, 1 - Idx * (Idx > 0)   Do Until EOF(1) Or FileData = ""     Line Input #1, FileData '     If FileData = "" Then       Exit Do     End If     NowDate = FileData     NowTime = Mid(FileData, 12)   Loop '  出力ファイル指定   OutFile = InpFile & "-" & NowDate & "." & Mid(NowTime, 1, 2) & Mid(NowTime, 4, 2) & ".txt"   OutFile = Application.GetSaveAsFilename(OutFile, "TXT ファイル,*.txt")   If OutFile = "False" Then     Close     End   End If   Seek #1, 1 '   Open OutFile For Output As #2   Line Input #1, FileData '   Do Until EOF(1)     Line Input #1, FileData '     If FileData = "" Then       Exit Do     End If     NowDate = Replace(FileData, ".", "/")     NowTime = Mid(FileData, 12)     NowDateTime = DateValue(NowDate) * 1440 + TimeValue(NowTime) * 1440 '     If OldDateTime > 0 Then       FWrite OldDateTime, NowDateTime, Volume     End If     Volume = Volume + 1     OldDateTime = NowDateTime   Loop   FWrite NowDateTime, NowDateTime + 1, Volume   Close End Sub ' Sub FWrite(OldDateTime As Long, NowDateTime As Long, Volume As Integer) '   Dim Wrk As Long '   For Wrk = OldDateTime To NowDateTime - 1     Print #2, Format(Wrk / 1440, "YY.MM.DD hh:mm") & "," & Volume     Volume = 0   Next Wrk End Sub

miya_HN
質問者

お礼

回答ありがとうございます。 データの個数で0か1にするかは正直迷っています。 1分単位のデータにはデータはあるが、ミリ秒単位のデータにはデータがない、矛盾したものだからです。 回答者様のおっしゃる通り、1にした方がよいかもしれません。 それと、回答者様のプログラムで2件目のデータを読み込む(ミリ秒単位のCSVファイルのデータ)はあるのですが、1件目のデータを読み込む(1分単位のCSVファイルのデータ)プログラムがないため、思うような結果が得られないため、それを教えてください。 また、その他にも聞きたいことがあるのですが、それは後にします。 また、この質問と直接関係ないのですが、1分単位のデータ(「1分間のデータの個数」含む)を日本時間に直し、VBAで作成する、というのを回答者様の最初のプログラムを基に、途中まで作ってみたのですが結構満足いく処理時間で処理できました(データが全て合っているかまでは分からないのですが・・・) 最終的にはExcelの関数で処理しなければいけないかもしれませんが、処理時間も満足に足りるため、ほとんどVBAで作れそうです。 お手数をお掛けしますが、再度回答よろしくお願いします。

  • SI299792
  • ベストアンサー率48% (712/1469)
回答No.4

新しく質問されたことに気が付きませんでした。せっかく作ったので載せておきます。 ワークシートを一切使っていないので、VBA にするのも無駄ですが、他に環境がないもので。 ' Option Explicit ' Sub Macro1() '   Dim FileName As String   Dim IdX As Integer   Dim FileData As String   Dim NowDateTime As String * 16   Dim OldDateTime As String   Dim ASplit As Variant   Dim First As Double   Dim Low As Double   Dim High As Double   Dim Last As Double   Dim Volume As Integer '   FileName = Application.GetOpenFilename("CSV ファイル,*.csv") '   If FileName = "False" Then     End   End If   IdX = InStrRev(FileName, "\")   Open FileName For Input As #1   ChDir Left(FileName, IdX - 1)   FileName = Mid(FileName, IdX + 1, 6)   Open "Output.csv" For Output As #2   Line Input #1, FileData '   Do Until EOF(1)     Line Input #1, FileData '     If FileData = "" Then       Exit Do     End If     NowDateTime = FileData '     If Len(FileName) < 7 Then       FileName = FileName & "_" & Left(FileData, 10) & "." & Mid(FileData, 12, 2) & Mid(FileData, 15, 2)     End If     ASplit = Split(FileData, ",") '     If NowDateTime <> OldDateTime Then '      Stop '       If OldDateTime > "" Then         Print #2, OldDateTime; ","; First; ","; High; ","; Low; ","; Last; ","; Volume       End If       OldDateTime = NowDateTime       First = ASplit(2)       High = 0       Low = 1E+308       Volume = 0     End If '     Last = ASplit(2)     High = WorksheetFunction.Max(High, Last)     Low = WorksheetFunction.Min(Low, Last)     Volume = Volume + 1   Loop   Print #2, OldDateTime; ","; First; ","; High; ","; Low; ","; Last; ","; Volume   FileName = FileName & "-" & Left(OldDateTime, 10) & "." & Mid(OldDateTime, 12, 2) & Mid(OldDateTime, 15, 2) & ".csv"   Close   On Error Resume Next   Kill FileName   On Error GoTo 0   Name "Output.csv" As FileName End Sub ’ 新しい質問の方は「日本時間に直して」、とありますが、どこの時間を日本時間に直すのかわかりません。 また、曜日の計算など難しいことが絡むので無料ではちょっと、という感じです。 もし、良かったら1度試してください。実行速度がどれくらいかかるかわかりませんが、もし、満足できる速度ならやってみてください。実行結果はレコード数が減るので、うまくゆけばExcel で取り込めるかもしれません。そうすれば抽出で不要なレコードを取り除けるかもしれません。

miya_HN
質問者

お礼

お礼が遅くなり、大変申し訳ありません。 回答ありがとうございます。 新しい質問も見てくれたんですね。 回答者様のプログラムを走らせたところ、1年分という長期間にも関わらず非常に満足できる処理速度でファイルが作成できました。 実は、データ取得のソフトはミリ秒単位だけではなく、1分単位で取得できるようになっています。 そこで、回答者様のプログラムのFirst(最初の数値)、High(最大値)、Low(最小値)、Last(最後の数値)の計算を省かせていただきました。 1分単位でデータを取得した場合、「日時」、「最初の数値」、「最大値」、「最小値」、「最後の数値」を取得できるようになっています。 そして、「1分間のデータの個数」はミリ秒単位でしか取得できません。 本来の目的は、1分単位の「日時」、「最初の数値」、「最大値」、「最小値」、「最後の数値」、「1分間のデータの個数」をある法則の形式にして日本時間とし1行にまとめ、時系列にすることです。 この重要なことを記載せず申し訳ありません。 それで、「日時」、「最初の数値」、「最大値」、「最小値」、「最後の数値」、「1分間のデータの個数」を組み合わせるには、1分単位とミリ秒単位のデータの2つのデータをプログラムで処理すればできるのではないかと思いました。 ■1. ダイアログを表示し、1分単位のCSVファイルのデータを取得する。 1分単位のCSVファイルのデータをテキストファイルで開くと次のようになっています。 1行目(文字) 2015.12.31 15:00:00,120.288,120.296,120.287,120.296,59.82 2015.12.31 15:01:00,120.295,120.298,120.295,120.297,94.74 2015.12.31 15:02:00,120.297,120.297,120.289,120.296,95.27 ~ 最終行は改行 2行目で言うと、 2015.12.31 15:00:00(日時),120.288(最初の値),120.296(最大値),120.287(最小値),120.296(最後の値),59.82(その他の数値) ・1行目は単なる文字でデータではないため、2行目から日時のデータを取得します。 ・保存するときのファイル名のため、CSVファイルの左から6文字までと、日時の最初と最後を取得します。 ■2. ダイアログを表示し、ミリ秒単位のCSVファイルのデータを取得・編集する。 ミリ秒単位のCSVファイルのデータをテキストファイルで開くと最初の質問と同じで、次の通りです。 1行目(文字) 2015.12.31 15:00:00.078,120.293,120.288,1.87,1 2015.12.31 15:00:00.619,120.293,120.289,1.12,1 2015.12.31 15:00:01.160,120.293,120.288,1,1 ~ 最終行は改行 プログラムは「日時」と「1分間のデータの個数」の取得のみで構いません。 ■3. 1分単位で取得した日時と、ミリ秒単位で取得した日時が一致したとき、その日時の行に「1分間のデータの個数」を入れます。 例えば、1分単位で取得した日時が「2015.12.31 15:00:00」で「2」の工程でミリ秒単位の日時と一致したとき、 2015.12.31 15:00,34 のようにします(「34」が「1分間のデータの個数」です。)。 回答者様のプログラムで気になったのは空白のスペースができたことです。 次の□(四角)の部分がその空白のスペースです。 2015.12.31 15:00,□34□ このスペースをなくしたいのですが。 もちろんExcelで簡単になくすことはできるのですが、できる限り数式を減らしたいんです。 詳細は下記の「補足」を参照してください。 また、気を付けていただきたいのは例えば次のデータは1分単位で取得したデータです。 2015.12.31 21:17:00,120.184,120.184,120.18,120.18,6.99 2015.12.31 21:18:00,120.18,120.18,120.18,120.18,0 2015.12.31 21:19:00,120.181,120.182,120.18,120.18,11.5 そして次に、回答者様のプログラムで作成したデータです。 2015.12.31 21:17, 6 2015.12.31 21:19, 10 2015.12.31 21:20, 14 「2015.12.31 21:18:00」のデータがないため、このようにデータが飛ぶのですが、この場合その日時の「1分間のデータの個数」を「0」としていただきたいのです。 データの基準を、1分単位の日時としてほしいのです。 ■4. ダイアログを表示し、自動的にファイル名が表示され、ファイルの保存先を指定し、テキストファイルとして保存する。 ファイル名とは質問に記載した、 ******_2003.05.04.2100-2003.05.30.1459 のことです。 保存先を指定するために「Application.GetSaveAsFilename」の「InitialFileName」を試すなどしてみたのですがうまくいきませんでした。 これらのプログラムを考えていただきたいのですがいかがでしょうか? ■補足 補足として、以前使用していたソフトでは1分単位として「日時」、「最初の数値」、「最大値」、「最小値」、「最後の数値」、「1分間のデータの個数」のデータを取得できていました。 以前のソフト用に日本時間に変更するなど数式が分からなかったため、いろいろなことを想定し質問で数式を教えていただき、Excelファイルを作成することができました。 しかし、現在ではそのソフトではデータが取得不可能になってしまいました。 そこで新しいソフトを発見し、それが現在のソフトで、取得したデータが上記のものになります。 ただ、1分単位のデータ取得では「1分間のデータの個数」のデータがありません。 そこで、ミリ秒単位から「1分間のデータの個数」を取り出したかったんです。 そして、以前のソフト用に使用していたExcelファイルの数式を現在のソフト用に変え、結構コンパクトになったのですがそれでもファイルを開くのに数分かかったり、メモリが結構消費します。 「3」の工程で、できる限り数式を減らしたいと言ったのはそのためです。 また、新しい質問の中で、「日本時間に直す」などと言いましたがちょっと調べてみました。 2006年までや2007年からの一定期間内での月曜日から土曜日までの時刻を調べると、データを取得した段階で取り除くデータがなく、計算する必要がないことが分かりました。 これも重要な情報なんですが、記載せず申し訳ありません。 日本時間に直すには、「2015.12.31 21:18:00」などの日時に+9時間にするだけで日本時間となります。 最終的に日本時間に直し、 「年4桁」「.」「月2桁」「.」「日にち2桁」「,」「時間2桁」「:」「分2桁」「,」「最初の数値」「,」「最大値」「,」「最小値」「,」「最後の数値」「,」「1分間のデータの個数」をスペースがない状態にし、これを1行とし時系列にすることです。 これが法則の形式です。 例: 2016.01.04,07:00,120.188,120.204,120.183,120.204,11 こんな感じになります。 できるならVBAで全てやりたいのですが、プログラムが分かりませんし処理時間もどの程度かかるか分かりません。 また、自分が考えた方法より、より効率的な方法があれば教えてください。 大変申し訳ありませんが、再度回答よろしくお願いします。

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.3

http://www.microsoft.com/ja-JP/download/details.aspx?id=52679 https://creativeweb.jp/fc/ テーブルにCSVをインポート。制限は1ファイル5ギガまで。これを超えるなら複数のテーブルを作成。一つのテーブルでやりたいなら有料版。あるいはMySQLなどフリーを使う。 SQLの実行  select convert(時間,120) As 時間分単位、MIN(3桁目) AS 最小,MAX(3桁目) AS 最大, Count(*) AS 分個数 from ImportTB  group by convert(時間,120) order by convert(時間,120)  これだけでは? Accessでもできるけど構文は多少違うので調べる。

miya_HN
質問者

お礼

回答ありがとうございます。 本当はもう少し聞きたいことがあるんですが、当初のVBAの質問と離れてしまったため、新規に質問しようと思います。 大変参考になりました。 ありがとうございました。

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.2

なぜExcelでやりたいのか?Excelにこだわる理由があるなら仕方ないですが、VBAでやるには一行ずつ読んで一行ずつ比較して大きいか小さいかを判断し変数に保管し、一分の切れる箇所で吐き出すって書き方をします。ここでは書ききれないので書きません。 読み込むときには一気に読み込むのではなくファイルを一行ずつメモリに読み込みます。 こうすることでメモリ不足をなくします。ただし遅いはずです。出来ますがすごく遅いと思ったほうが良いでしょう。なにしろExcelですから。 こういうものはPowerShellなどのスクリプトで書くべきでは?当然VBとかC#ならなおいです。Linqも使えますし。 で、根本的なこと言いますとAccessとかSQLサーバーの無料版に取り込んで、SQLで処理した方が全然早いし簡単なんですが? 時間は分以下を切り捨てればグループ化出来ますし、その中でMAXとMINで一気に最大値と最小値が取れますよね。おそらくやりたいことは一行のSQL文で終わります。

miya_HN
質問者

お礼

回答ありがとうございます。 ExcelのVBAではメモリを食ったり、遅くなってしまうんですね。 それでは、無料(無期限)を前提として、そのようなソフトというようなもので、仕様制限などいろいろとありそうなので質問では記載されていない必要な情報があれば提示してください。 その後、具体的なプログラムを教えてください。 大変お手数をお掛けしますが、再度回答よろしくお願いします。

  • msMike
  • ベストアンサー率20% (363/1772)
回答No.1

》 Excelの最大行数1,048,576行を軽く超えてしまうため、 》 テキストファイルで開きます そういうことなら、此処 Excel の部屋で質問された理由は何ですか?

miya_HN
質問者

お礼

回答ありがとうございます。 >そういうことなら、此処 Excel の部屋で質問された理由は何ですか? 自分の考えでは、他に方法が見当たらないからです。 また、そのような大量なデータを扱うソフトの購入は金銭的に余裕がありませんし。 可能ならば教えてください。 大変お手数をお掛けしますが、再度回答よろしくお願いします。

関連するQ&A

  • 大量データ(csv)ファイルのインサート

    1分に1回レコードが出力されたログファイルがあります。 これはCSV形式のファイルです。ファイルは15ファイルあります。 各ファイルの列数は違っていて60~260まであります。 必要なデータが記録されている列もファイルによって違いますが 各ファイルともいらない列が半分くらいありデータは無いか"-"になっています。 データは大体整数4桁小数2桁の数値です。 毎月一回集計しないといけないので各ファイルに対応したテーブルを作り データを読み込みたいと思います。 過去分を持つとレコード数が増えるので毎回読み込みからにしたいと思います。 データをテーブルに取り込むやり方を考えています。 VBでシステムを作っているのでファイルを1行ずつ読み 必要なデータをインサートするのがいいのか SQLServerの機能を使って全部読み込むのがいいのか 何を調べて判断すればいいのかアドバイスをお願いします。 VBは2008でSQLServerも2008でやろうかと考えています。

  • PHPで現在時刻を取得して、csvと照らし合わせる方法

    こんにちは。いつも参考にさせてもらっています。 さて、本題なのですが、PHPでdate関数を使い現在時刻を3もしくは4桁で取得し、 それと次のようなcsvを照らし合わせて駅の発車案内みたいなものを、 作成しています。 ■csvの内容(発車時刻,種別,両数,始発,行先,発車番線 の順。あくまでも一例です。) 947,快速,8両,始発,東京,4 955,各駅停車,11両,,新宿,3 1001,快速,10両,始発,池袋,5 1011,各駅停車,8両,,大崎,6 1018,特別快速,15両,始発,品川,7 (csv終わり) もし時刻が9時45分だった場合、947の行から1001の行まで3行分、 もし時刻が9時59分だった場合、1001の行から1018の行まで3行分をデータとして扱いたいのです。 この場合はどうすればいいのでしょうか? 回答をお待ちしております。

    • 締切済み
    • PHP
  • ACCESSの小数点以下の入力について

    こんにちは。よろしくお願い致します。 ACCESSのフォームで"1.0000"と入力した場合は、テーブルには、"1"としか残りません。表示桁数は4桁にしてあるのですが、小数点以下の最後の数値が"0"、すなわち"1.0000""2.1580"などでも最後の数値までデータとしてテーブルに残す為には、どのようにしたらよいのでしょうか? よろしくお願い致します。

  • オラクルのnumber

    オラクルデータのNumber型の(14,2)という場合、 最大桁数が14桁で小数点が2桁ということでしょうか? 小数点が2桁ある場合は、整数部分は12桁までしか入らないのでしょうか

  • AccessでCSVの数値データをインポート

    AccessでTransferTextを用いてCSVファイルのデータをインポートする際、CSVの最初の数行で勝手にデータの型を解釈されてしまい、小数点以下が省略されてしまうようです。毎回CSVファイルに数行付け足してから手動でインポートすればインポート出来るのかもしれませんが、業務量を考えると不可能です。TransferTextで小数を含むダミーのCSVをインポートしてから続けて欲しいデータをインポートして、その後ダミーのデータを削除するという方法も考えたのですが上手くいきませんでした。何か良い方法はございませんでしょうか。

  • エクセルで整数表示と少数表示を混在させたい

    お世話になります。 集計用のファイルを作っています。 整数と、小数点以下1桁、2桁の数値が出てきます。 書式設定で小数点以下2桁まで表示するようにしたら、整数や小数点以下1桁の数値まで120.00とか25.50と表示されてしまい、見にくくなってしまいました。 小数点以下に0がつく場合は無視して、それぞれ120、25.5、3.25のように必要な桁数だけ表示させたいのですが、どうしたらよいでしょうか。

  • excelデータの加工をマクロ等で処理する方法を教えて頂けないでしょう

    excelデータの加工をマクロ等で処理する方法を教えて頂けないでしょうか。 複数のエクセルデータのファイルがあります。 回数・距離・深さのデータが入っています。(回数は1回~10回位まであります) そのデータを加工するのですが、マクロ等で迅速に処理できる方法がないものでしょうか? マクロは実行する程度で作成した事はありません。。 加工作業は、 (1)「距離」と「深さ」の間に『間隔』という項目行を増やす。 (2)『間隔』の計算をする。(距離2回-1回・3回-2回・・のように計算します)間隔行の最終の回には“-”とおく。 (3)「回数」行の右端に『最小値』・『最大値』・『平均値』という項目列を増やす。 (4)『間隔』「深さ」の最小値・最大値・平均値を求める。(「距離」は求めないので“-”をおきます。 (5)「距離」と『間隔』行は小数点以下3桁にする。 (6)「深さ」行は小数点以下1桁にする。 (7) 罫線を引く という流れなのですが、何かいい方法がありましたら教えて頂けないでしょうか? 宜しくお願い致します。

  • Excelで数字データ以外を取り除く方法

    Excelを使って、何千件もある数値コードのデータの修正をする必要があります。 ただ、このデータは、7桁の数値コードのはずなのに、実際には、5桁から8桁まで桁数が異なるデータもあれば、数字以外の文字や記号も入っています。 そのため、まずは、数値コードに混じる数値以外の文字や記号を取り除こうとしています。0-9の数字以外の文字が記号を削除したいのですが、なんだかうまくいきません。データを数値と認識させると、一桁目の0(ゼロ)が消えてしまったりして。。 Excelに詳しい方、どういう方法があるか教えていただけませんか。 よろしくお願いします。

  • 有効桁数について

    たとえば整数の3桁割る4桁の場合の数値についてです。 レポートの表に数値を記入するとき,たとえば0.921,0.866,0.995,1.331と計算結果が続くとき 小数点以下の桁数を同じにしてはダメですか? やはり1.331は1.33と記入しないとダメなのでしょうか?私は小数点以下の桁数をそろえて記入したところその理由を問われたのですが,答えられませんでした.小数点以下の桁数をそをえてもいい時のわけを教えてください.   大変困ってます!!!

  • 合致する番号のデータを抽出する方法を教えてください

    合致する番号のデータを抽出する方法をおしえてください perlの勉強を始めたばかりの初心者です。 下の画像のようにタブで区切られたデータです。一行で一人分のデータです。 先頭の4桁の数値がユニークで、この数値をつかって抜き出します。 0125 0251 2650 : : : 上記のように与えられた別ファイルの数値と合致する行だけを抜き出し別ファイルにはきだす方法を教えていただきたいです。 シンプルでわかりやすいもの、メモリに負担のすくないものなど複数の方法を教えていただきたいです。 説明もいただけるとありがたいです。よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう