• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:新規CSVデータの2行目以下を追加するVBA)

VBAを使って新規CSVデータの2行目以下を追加する方法

このQ&Aのポイント
  • 店舗で導入した新しい電子決済端末のデータをローカルのExcelで分析する必要があります。そのため、新規取得のCSVデータの2行目以下のデータを、既存のBookファイルに追加したいと思っています。
  • csvファイルは、月6回(5日ごと)のファイルとなっており、列は最長AZ列までカバーしています。データの行数は売上数が毎日変動するため、毎回異なります。
  • 以前Excel VBAを使っていた経験があるので、コードさえあれば実装できます。ネットで探したコードでは実現できなかったため、質問させていただきました。

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

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

てっきり上に挿入するのだと思いました。上画像を新規データと思ってしまいました。 下追加なら、 Option Explicit ' Sub Macro2()   Dim FileName As String   Dim Cell As Range '   FileName = Application.GetOpenFilename("CSVファイル,*.csv") '   If FileName = "False" Then     End   End If   Set Cell = Cells(Rows.Count, "A").End(xlUp).Offset(1) '   With ActiveSheet.QueryTables.Add("TEXT;" & FileName, Cell)     .AdjustColumnWidth = False     .TextFileStartRow = 2     .TextFileCommaDelimiter = True     .Refresh   End With   Cell.QueryTable.Delete End Sub

ketae
質問者

お礼

わざわざありがとうございます 個人的にはWindowsそのものにAIが搭載されるというニュースを聞いて、Excel上でもやりたい作業を聞けばVBA書いてくれるようになるかなと思っていますが、いまのところ貴君のようなプロフェッショナルな方に相談したほうが、悩む時間が少なくて助かります、 心より、御礼を申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBAはゆっくり勉強してもらうとして、(昔VBAをやったからと言って拘らない方がよい) 本件ではないが、最近はエクセルもPower何とかいうのがはやりのようだが。 WEB照会もしていないようだ。やれば、ほぼ課題に近いVBAコードは見つかる。 ーーー お勧めは、 メモ帳(やテキストエディタ―)に、CSVデータを手動で、コピペして統合データを作ってはどうか。 張り付けは挿入貼り付け(行割り込み)になるし。削除、修正も簡単できる。 其の後(完成後)はExcelのシートに読み込ませるのは簡単。 今ではCSVデータは、エクセルファイル扱いのように見える。 ーー VBAは下記のようなのを確認した。参考まで。 Sub test01() Dim tmp As Variant file_name = "C:\Users\XXXX\Documents\CSV例.csv" 'ファイル指定 フルパスで 要修正 j = 10 'データを書き出すシートのスタート行番号 要修正 Open file_name For Input As #1 Do Until EOF(1) Line Input #1, buf '1行分読み込み tmp = Split(buf, ",") 'カンマ区切り単位で各セルデータ化=分割 Range(Cells(j, 1), Cells(j, 4)) = tmp 'A列より以右列に張り付け '元データが4列分の場合の例 要修正 j = j + 1 '次レコード設定のため、次行を指す Loop Close #1 End Sub 売りはRange(Cells(j, 1), Cells(j, 4)) = tmpの部分です。各セルに繰り返し処理に見えないだろう。 質問用には、勿論CSVの数だけ繰り返しのコードに作り替えないとならないが簡単なので略。 直前作業の「最終行の次行から」貼り付けを繰り返すというコードも常識、略。 ーー 本件、商売用の課題を、そのままあげて、回答者に作業をやらす、のはどうかな。

ketae
質問者

お礼

ありがとうございます 「どうかな。」というのは意味するところはわかりますが、 ・AI登場でGoogleのキーワード検索がほとんど機能しない時代になった ・AIがコードやプログラム、アプリも書く時代になった ・AIでほとんどのことが一瞬または短時間に終わる ことを考えると、わたしのようなVBAを専門としない人間がここ(Okwave)で質問する意味としては、経験者にソリューションを質問して提示・提供いただき、ユーザは感謝を伝える、という使い方しかないと思っています 時代のスピードにのってOfficeなどアプリを利用するユーザーは、もうVBAプログラミングを覚える必要がない時代に突入したと思っています ともあれ、ご示唆ありがとうございます

全文を見る
すると、全ての回答が全文表示されます。
  • SI299792
  • ベストアンサー率48% (720/1491)
回答No.2

旧データを下に下げて 新規取得の CSVデータを 2行目以下に追加すればいいのですね。 ファイル名をどうするかわからないので、ダイアログボックス選択にしました。 Option Explicit ' Sub Macro1()   Dim FileName As String   Dim I As Worksheet   Dim REnd As Long '   FileName = Application.GetOpenFilename("CSVファイル,*.csv") '   If FileName = "False" Then     End   End If   Set I = ActiveSheet   Workbooks.Open FileName, False   REnd = ActiveSheet.UsedRange.Rows.Count   I.Rows("2:" & REnd).Insert   Rows("2:" & REnd).Copy I.[A2]   ActiveWorkbook.Close End Sub

ketae
質問者

お礼

ありがとうございます 追加した新しいレコードが既存のsheetのレコードの上に挿入されてしまいましたが、フィルターで日付でソートすればいいので、助かりました 動きもとても早く軽くて助かりました

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

私はコードを0から書けないので、毎回、マクロ記録した1つの操作を関数に加工、その関数をストック & 再利用することで全部やってきたので、今回もそれと同じ方法で行けるはずですよ。 変更箇所はファイル名くらいでしょう。

ketae
質問者

お礼

ありがとうございます マクロ操作だと修正が必要な箇所が多くでたので、専門の方に聞く方が早く、正確かなと思いました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

  • VBA でCSV集計

    VBAをはじめて1ヶ月のものです。 VBAの集計ツールを作成していますが 思うようにいかず、お知恵をお借りしたいと考えています。     abcというフォルダ配下に以下のように4桁の日付を示す フォルダが日付毎にあります。(いくつあるかはわかりません。) さらにその配下にいくつかのcsvファイルがおいてありますが aaa.csvというcsvのみ抽出し 最終的には合体.csvのような集計CSVを作成したいと考えています。 以上よろしくお願いいたします。 (1) abc → 0812フォルダ <aaa.csv>     A列     B列    C列 1行 100     200    8月12日                       2行 100     100 3行 200     200 4行 300     100 5行 100     100 6行 200     200 7行 400     100 8行 100     100 (2)abc → 0813フォルダ <aaa.csv>      A列     B列     C列 1行   0      300    8月13日              2行 100      100 3行 100      200 4行 100      200 5行 100      200 6行 300      200 7行 300      400 8行 200      100 ↓ (3)<合体.csv>     A列     B列      C列     D列     E列     F列     G列    (日付)  (A1~A4計)(A5~A8計)(合体B+C)(B1~B4計)(B5~B8計)(合体E+F) 1行 8月12日   700      800     1500     600     500     1100 2行 8月13日   300      900     1200     800     900     1700

  • VBA csvを100万行ずつ各シートに読み込み

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 64bit SP1、 エクセル2010 でございます。  「1000万行×3列」のCSVファイルデータを、100万行ずつ シート1~10に振り分けたく悩んでおります。 ・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 ・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、 何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。  何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • VBAでの100万行以上のデータの取り込み

    どなたかご教示お願いいたします。 VBAで100万行以上のCSVデータの取り込みは可能でしょうか? 初心者なのでファイルを開いてセルに入れてから範囲を指定し配列に 取り込み処理しておりましたが100万行以上だとデータがシートから出てしまいます。 なのでエクセルに展開せずに配列に取り込むなどということはできるのでしょうか? もし可能であればあつかましいのですが、A列の120万行データを配列に取り込むサンプルをご教示いただけるとありがたいのですが・・・ よろしくお願いいたします。

  • csvのデーターファイルから任意の行をエクセルファイルへ入力するエクセ

    csvのデーターファイルから任意の行をエクセルファイルへ入力するエクセルVBA が上手くできません。 6列2000行のcsvデーターのテキストファイルの作成は、色々な参考書があり成功しました。次に このcsvのデーターファイルから任意の複数行をシート4などの任意のワークシートの任意の場所に60行程度をインポートして、この60行の数値データーを加工しようとしていますが、入力が上手くできません。数値データーの加工のプログラムは一応できているため、その様式にあわせて、所定の場所にデーターを入れる必要が有ります。 1列目には日付(シリアルの数値にしています)、その他はすべて数値(LONG型)です。エクセルは2003を使用しています。 VBAの初心者です。宜しくお願いいたします。

  • VBAよりCSVファイルの任意の行を取得

    お世話になります。 Access2010 VBAよりCSVファイルの2行目の文字列を取得したいのですが、とりあえず下記で取得することができました。 path = CurrentProject.path cnt = 1 Open path & "\test.csv" For Input As #1 Do Until cnt > 2   Line Input #1, buf   If cnt = 2 Then     MsgBox buf   End If   cnt = cnt + 1 Loop Close #1 例えば、 1行目 xxxxx 2行目 フィールド1,フィールド2,フィールド3,・・・ 3行目 データ1,データ2,データ3・・・ という内容のCSVがあり、上記のVBAを実行すると、2行目の『フィールド1,フィールド2,フィールド3,・・・』を表示できます。 で、実際のCSVファイルは数十万行あるのですが、そのファイルを指定し上記VBAを実行すると、Line Input #1, bufの箇所で「実行時エラー14 文字列領域が不足しています。」と表示されてしまいます。 何かよい方法はございますでしょうか。 なお、当該Accessはユーザーへ配布するものであり、Runtime環境で実行します。 よって、CreateObjectは使えない状況です。 勉強不足で申し訳ございませんが、ご教授の程よろしくお願い致します。

  • 複数のcsvファイルを1つのEXCELファイルにマージするVBAを教えてください

    csvファイル数は700~1000個程度でひとつのフォルダに格納されています。 このファイルをEXCEL形式で開くと、1行目にフィールド名(A~Z列で固定)、2行目以降にデータが入っています。行数はファイルにより1~100行程度で変動します。 このファイルを1つのエクセルファイルの同一シートに結合(マージ)するVBAがほしいです。 ここで、(できればですが)EXCELにマージするにあたり、1行目のみフィールドの値、2行目以降にそれぞれのcsvの2行目以降データの値を入れていくようにしたいです。つまり、フィールド名の行が何行も出てくるのを避けたいです。 申し訳ございませんが、ご指導いただけたら幸いです。よろしくお願いします。

  • 5行目からのCSVデータを作りたい

    いつもお世話になります。 とあるシステムにデータを入力して、CSVファイルを作成して別システムにインポートしているのですが、そのファイルフォーマットがデータが5行目から始まる形のものなのです。とある事情からそれをエクセルで作成しなければならず、CSVで保存したものを開くと空白行を無視して1行目から始まってしまいます。 1から4行目までを空白にしてCSVを作成する方法をご教授ください。

  • 1000行程あるデータを、10行単位する方法を教えてください。

    いつも御世話になっております。 最近VBAを始めました。以下の方法が分からず、煮詰まっております。 A列に1000行程データが入力されています。 これを、別シートにて10行単位に区切って、 A列 10行,B列 10行,C列 10行・・・・・・・ としたいのですが、 どうしたらよいでしょうか? 以前は、コピぺを手動で行っていたようなのですが、 このような作業が、特定の週に5回程発生するので VBAで行えたらと思っております。 ちなみに、データの件数は毎月500件~1000件の間を変動します。 よろしくお願いします。

  • VBAでCSVの1行目だけを書き換える方法

    VBAでCSVの1行目だけを書き換える方法について質問させて頂きます。 例として、以下のようなCSVファイルが存在したとします。 1行目がデータラベルで、2行目から数値がデータとして記録されています。 A,B,C,D 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 1,2,3,4 一方、マクロを含んだエクセルのセル(例えばA1, B1,C1,D1)に Anew, Bnew, Cnew, Dnew というように新しいデータラベルが入力されています。 今回実現したい動作は、CSVファイルのデータラベルA,B,C,Dを 新しいデータラベルAnew, Bnew, Cnew, Dnewに置き換えることです。 VBAのappend機能を用いて実現しようと思いましたが、最終行に追加することはできても1行目を書き換えることができません。 ポイントとして、データは下に約50万行ほど続いているので、ワークブックとして開いたりすると最悪の場合メモリ不足で 止まってしまいます。1行目の操作だけで作業を完結させたいところです。 良い方法をご存知の方がいらっしゃればご教授いただきたく思います。 よろしくお願いします。 (以下に、最終行に追加するのに用いたコードを参考として記載します) sub macro() dim ch as integer ch=freefile open "C:\***\data.csv" for append as #ch j=1 do while cells(1,j)<>"" 'cells(1,1)からcells(1,4)にAnew, Bnew, Cnew, Dnewが記録されています。 print #ch, cells(1,j) & ","; '改行させないため ; を付ける j=j+1 loop close #ch end sub