質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

2回答

6088閲覧

csvを列方向で1つにまとめたいです

jack_frost115_2

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

1クリップ

投稿2019/02/22 03:58

編集2019/02/22 03:59

大量にあるcsvファイルを1つのcsvて列方向にまとめたいです。

現在使用しているコードは下記であり、行方向に結合することはできました。
これを行方向ではなく、列方向にまとめる方法はございますでしょうか。
ご回答の程、よろしくお願いいたします。

-----ソースコード-----
Option Explicit
Dim a, c, cr, cv, f, gf, i, j, n(), so, x
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
c = - 1
For Each f In gf.Files
If LCase(so.GetExtensionName(f.Name)) = "csv" Then
c = c + 1
ReDim Preserve n(c)
n(c) = f.Name
End If
Next
For i = 0 to c - 1
For j = i + 1 to c
If n(i) > n(j) Then
x = n(i)
n(i) = n(j)
n(j) = x
End If
Next
Next
Set cr = so.OpenTextFile(gf & "\Merge.csv",2 ,True)
For i = 0 to c
Set cv = so.OpenTextFile(gf & "" & n(i), 1)
a = cv.ReadAll
cv.Close
Set cv = Nothing
If i > 0 Then
a = Mid(a, InStr(a, vbCrLf) + 2)
End If
cr.Write a
Next
cr.Close
Set cr = Nothing
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/02/22 04:30

列方向って、行列の入れ替えって事ですか? それとも、ファイルを列方向に並べるように追加するって事?
jack_frost115_2

2019/02/22 04:42

ファイルを列方向に並べるように追加したいです。
ttyp03

2019/02/22 05:53

1列1ファイルってことですか?
jack_frost115_2

2019/02/22 06:08

いえ、1ファイルにつき数列使う予定です。
ttyp03

2019/02/22 06:13

イメージがわかないので、なんかサンプルか何かあると助かります。
sazi

2019/02/22 06:18

> ttyp03さん ファイルのマージというと、行を追加のイメージですけど、それを列として追加したいという事だと思います。 エクセルに例えるなら、複数のシートを横に張り付けていくイメージ(行は揃わない)
jack_frost115_2

2019/02/22 06:36

saziさん、その通りです。 雑な説明になって申し訳ありませんが、1シート内に ファイル1 ファイル2 ファイル3 ・ ・ ・ となっているものを ファイル1ファイル2ファイル3... としたいです。 1つのファイルにつき1〜8列のデータが入っています。
mather

2019/02/22 07:49

-> file1 a,b,c d,e,f -> file2 1,2,3 4,5,6 7,8,9 のとき、 a,b,c,1,2,3 d,e,f,4,5,6 ,,,7,8,9 みたいになるということかな?
ttyp03

2019/02/22 08:03

全然想像と違ってましたわ。 各ファイルで行数が一致しているなら割と簡単そうですが、一致していないときは面倒ですね。 これ → ,,,7,8,9
guest

回答2

0

似たようなことを考えてる人は世の中に結構いるものです

とりあえず見つけたのはこちら

現在、複数のCSVファイルがあり、そのデータを下方向(行方向)ではなく、右方向(列方向)に一つのシートへまとめていきたいのです

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1440723774

ベストアンサーの方のコードは、複数ファイル指定したものをすべて列方向に結合して新しいCSVファイルとして出力する動きをします

1)1つ目のファイルを開く
2)UsedRangeを使って埋まっているセル範囲を特定し、コピーして結合用シートの1列目に貼り付ける
3)貼付け後の最後の列番号を保持する
4)2つ目のファイルを開く
5)UsedRangeを使って埋まっているセル範囲を特定し、コピーし結合用シートに3)で保持した列から後ろに貼り付ける
・・・
といったことを全ファイル繰り返したら、結合用シートをCSV形式で保存する

参考にされてみてはいかがでしょうか

投稿2019/02/22 07:11

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jack_frost115_2

2019/02/22 23:48

リンク先のマクロを試してみましたが、1回目は上手く出力できたのですが、2回目以降エラーが出るようになってしまいました。
guest

0

CSV出力しながらだと最大行数のものを求めるために一旦すべてのファイルを読み込んでからなど制御が複雑そうです。

CSVを一旦シートに貼り付けてそのシートを統合してからCSVとして出力するように考えられては如何でしょうか。

投稿2019/02/22 05:02

sazi

総合スコア25188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問