- ベストアンサー
VBAを使って新規CSVデータの2行目以下を追加する方法
imogasiの回答
- imogasi
- ベストアンサー率27% (4737/17068)
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の数だけ繰り返しのコードに作り替えないとならないが簡単なので略。 直前作業の「最終行の次行から」貼り付けを繰り返すというコードも常識、略。 ーー 本件、商売用の課題を、そのままあげて、回答者に作業をやらす、のはどうかな。
関連する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行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。 何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- 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を作成する方法をご教授ください。
- ベストアンサー
- Visual Basic
- 1000行程あるデータを、10行単位する方法を教えてください。
いつも御世話になっております。 最近VBAを始めました。以下の方法が分からず、煮詰まっております。 A列に1000行程データが入力されています。 これを、別シートにて10行単位に区切って、 A列 10行,B列 10行,C列 10行・・・・・・・ としたいのですが、 どうしたらよいでしょうか? 以前は、コピぺを手動で行っていたようなのですが、 このような作業が、特定の週に5回程発生するので VBAで行えたらと思っております。 ちなみに、データの件数は毎月500件~1000件の間を変動します。 よろしくお願いします。
- 締切済み
- Visual Basic
- 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
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます 「どうかな。」というのは意味するところはわかりますが、 ・AI登場でGoogleのキーワード検索がほとんど機能しない時代になった ・AIがコードやプログラム、アプリも書く時代になった ・AIでほとんどのことが一瞬または短時間に終わる ことを考えると、わたしのようなVBAを専門としない人間がここ(Okwave)で質問する意味としては、経験者にソリューションを質問して提示・提供いただき、ユーザは感謝を伝える、という使い方しかないと思っています 時代のスピードにのってOfficeなどアプリを利用するユーザーは、もうVBAプログラミングを覚える必要がない時代に突入したと思っています ともあれ、ご示唆ありがとうございます