![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
例えば、A.xlsというファイルに01.csv,02.csv,・・・,20.csvといういくつかのファイルからデータを取り出すのですが、A.xlsのシート1の1列目に01.csvの1列目を貼り付けて、01.csvの2列目はA.xlsのシート2の1列目に貼り付けるようにシートをずらして行って、02.csvの1列目はA.xlsのシート1の2列目、02.csvの2列目はA.xlsのシート2の2列目というようにしたいのですが、どのようなプログラムがよいのでしょうか?
エクセルマクロ初心者なので説明が不十分かも知れませんがよろしくお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
勘違いしてましたでごじゃりますぅorz
(こんなことで受験大丈夫か?>アタシ<問題文良く読めといういい教訓になったかも?)
csvファイル名(拡張子を除いたファイル名)の数字が各シートでの列順になって、csvファイルのフィールド順がシートの順番になればいいんですね(^^ゞ
使い方は前回と同じでcsvファイルは01.csvから始まり02.csv、03.csv・・・98.csv、99.csvと連番であることとドラッグ&ドロップで処理開始です。
処理速度はお世辞にも速くはないので、ScreenUpdatingをFalse→Trueにすれば少しは早くなるかもしれませんがパラパラ見えるのもそれはそれでなんだか面白いです(教科書の隅っこに書いたパラパラマンガみたい)。
'----Sample2.vbs----
Set objArgs = WScript.Arguments
Set objAXLS = CreateObject("Excel.Application")
objAXLS.Visible = True
Set Book = objAXLS.WorkBooks.Add
Set objFS = CreateObject("Scripting.FileSystemObject")
For i = 0 To objArgs.length - 1
m = 1
Set f = objFS.OpenTextFile(Replace(objArgs(i), objFS.GetBaseName(objArgs(i)), AddZero(i+1)), 1)
arrLine = Split(f.ReadAll, vbCrLf)
For j = 0 To UBound(arrLine)
arrCell = Split(arrLine(j), ",")
n = (UBound(arrCell)+1) - Book.Sheets.Count
If n > 0 Then
For p = 1 To n
Book.Sheets.Add
Next
End If
For k = 0 To UBound(arrCell)
With objAXLS
.Sheets("Sheet" & CStr(k+1)).Select
.Cells(m, i+1).Value = arrCell(k)
End With
Next
m = m + 1
Next
Next
Function AddZero(strNum)
If Len(strNum) = 1 Then
AddZero = "0" & strNum
Else
AddZero = strNum
End If
End Function
'----Code End----
PS:ここってタブはスペースに変換してくれないのね>ねぇどうして?>教えて!goo(爆)
No.4
- 回答日時:
[回答番号:No.1] の DOUGLAS_ です。
列ごとの読み込みでしたね。
[回答番号:No.1] は、行ごとの読み込みのヒントでした。失礼いたしました。 <(_ _)>
VBAのコード丸出しになりますが、ついでに、行ごとの読み込みの場合もお示ししておきます。
MyPath = "D:\hoge\"
のところで、CSVファイル の保存されたフォルダのフルパス(最後に「\」マーク)を指定してください。
Sub 列ごとの読み込み()
Application.ScreenUpdating = False
Dim MyPath As String
Dim MyFile As String
Dim i As Integer
Dim LastCol As Integer
Dim intCols As Integer
ActiveSheet.Name = "ファイル名"
MyPath = "D:\hoge\"
ChDir MyPath
MyFile = Dir(MyPath & "*.CSV")
Do While MyFile <> ""
Sheets("ファイル名").Select
LastCol = Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Column
Cells(1, LastCol).Value = Replace(MyFile, ".CSV", "")
Workbooks.Open MyPath & MyFile
intCols = ActiveCell.SpecialCells(xlLastCell).Column
ThisWorkbook.Activate
For i = 1 To intCols
On Error Resume Next
Sheets("" & i).Select
If Err.Number <> 0 Then
Sheets.Add after:=ActiveSheet, Type:="ワークシート"
ActiveSheet.Name = i
End If
On Error GoTo 0
Workbooks(MyFile).Sheets(Replace(MyFile, ".CSV", "")).Columns(i).Copy _
ThisWorkbook.Sheets("" & i).Columns(LastCol - 1)
Next
Workbooks(MyFile).Close
MyFile = Dir
Loop
Sheets("ファイル名").Select
Range("A1").Delete Shift:=xlToLeft
Application.ScreenUpdating = True
End Sub
Sub 行ごとの読み込み()
Application.ScreenUpdating = False
Dim MyPath As String
Dim MyFile As String
Dim EndLineRow As Integer
Dim TextLine As Variant
Dim i As Integer
ActiveSheet.Name = "ファイル名"
MyPath = "D:\hoge\"
MyFile = Dir(MyPath & "*.CSV")
Do While MyFile <> ""
Sheets("ファイル名").Select
EndLineRow = Cells(Rows.Count, 1).End(xlUp).Offset(1).Row
Cells(EndLineRow, 1).Value = Replace(MyFile, ".CSV", "")
Open MyPath & MyFile For Input As #1
Do While Not EOF(1)
Line Input #1, TextLine
On Error Resume Next
i = i + 1
Sheets("" & i).Select
If Err.Number <> 0 Then
Sheets.Add after:=ActiveSheet, Type:="ワークシート"
ActiveSheet.Name = i
End If
On Error GoTo 0
TextLine = Split(TextLine, ",")
Cells(EndLineRow - 1, 1).Resize(, UBound(TextLine) + 1).Value = TextLine
Loop
Close #1
i = 0
MyFile = Dir
Loop
Sheets("ファイル名").Select
Range("A1").Delete Shift:=xlUp
Application.ScreenUpdating = True
End Sub
No.3
- 回答日時:
純粋なExcelマクロではないですが、VBSを経由した間接的Excelマクロというのはどうでしょう?
01.csvが次のような内容だとしますね。
1,2,3,4
A-1,B-1,C-1,D-1
A-2,B-2,C-2,D-2
A-3,B-3,C-3,D-3
A-4,B-4,C-4,D-4
A-5,B-5,C-5,D-5
A-6,B-6,C-6,D-6
A-7,B-7,C-7,D-7
A-8,B-8,C-8,D-8
A-9,B-9,C-9,D-9
便宜的に02.csvと03.csvと04.csvというのもあったとして01.csvと同じ内容とします。
ここで、コードを簡略化するため、csvファイルの拡張子を除いた部分(01~04)をそのままシート名の番号部分に割り当てているのでcsvファイルの名称は必ず1から始まる連番にしてください(数値でなかったり連番でないとエラーになります)。
次の内容を例えばSample.vbsという名前で保存し01.csv~04.csvのファイルをドラッグしてこのSample.vbsにドロップすると処理が始まります。
'----Sample.vbs----
Set objArgs = WScript.Arguments
Set objAXLS = CreateObject("Excel.Application")
objAXLS.Visible = True
Set Book = objAXLS.WorkBooks.Add
n = objArgs.length - Book.Sheets.Count
If n > 0 Then
For i = 1 To n
Book.Sheets.Add
Next
End If
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
Set objFS = CreateObject("Scripting.FileSystemObject")
For i = 0 To objArgs.length - 1
sn = CInt(objFS.GetBaseName(objArgs(i)))
sname = "Sheet" & CStr(sn)
Set f = objFS.OpenTextFile(objArgs(i), 1)
arrCSV = Split(f.ReadAll, vbCrLf)
temp = ""
For j = 0 To UBound(arrCSV) - 1
arrRow = Split(arrCSV(j), ",")
temp = temp & arrRow(sn-1) & vbCrLf
Next
objIE.document.parentwindow.clipboardData.SetData "text" , temp
With objAXLS
.Sheets(sname).Select
.Cells(1,sn).Select
.ActiveSheet.Paste
End With
Next
objIE.Quit
'----Code End----
Excelの場合セル毎に操作すると時間がかかるようなのでクリップボード経由でExcelに貼り付けてみました。
なおソースネクストのウィルスセキュリティゼロがあると、csvファイルを開こうとするとなんだか警告ダイアログが表れますorz
No.2
- 回答日時:
A.xlsを開いておきます。
メニューバーの「ツール(T)」→「マクロ(M)」→「新しいマクロの記録(R)」を順に選択します。
あとは01.CSVを開いて列のコピペなど、やりたいことをやって下さい。
そして、終わったら「記録終了」(画面中央にある小窓の□)を
クリックします。今までやった操作のマクロが出来ています。
No.1
- 回答日時:
1)VBE で 標準モジュールを挿入し、コードウィンドウに
Input
と入力します。
2)そこにカーソルを合わせて [F1] キーを押下すると、[Input キーワード] のヘルプが開きます。
3)[Line Input # ステートメント] をクリックします。
4)[Line Input # ステートメント] のヘルプで [使用例] をクリックします。
5)[Line Input # ステートメントの使用例] をご参考に。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセルVBA 既存エクセルを開きその中のシートとしてCSVファイルを開く 3 2023/05/31 13:11
- Visual Basic(VBA) vbaマクロについて シート1のA列にある商品コードが シート2のB列にある商品コードに該当する場合 2 2023/05/17 13:41
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) vbaマクロについて 【シート2】をもとに【シート1】に有るものを「有り.csv」としてデスクトップ 3 2023/05/07 22:30
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルが保存されてい...
-
ITパスポートの勉強をしていま...
-
Python... 環境設定 初心者です...
-
プログラミングサイトについて。
-
vba クリップボードクリアにつ...
-
Google ColaboでGUI作成
-
入力された文字列が、LD22000を...
-
google formsを使ったタスク依...
-
このURLで広告を出しているのは...
-
40代後半でゼロからのプログラ...
-
Fortran の定数表現について
-
https://youtube.com/shorts/bT...
-
AIの登場でプログラマーたちが...
-
https://paiza.jp/challenges/5...
-
そのまま使っただけなのに・・...
-
BATファイルについて
-
符号誤り率の計算は例題でどの...
-
VBA 電話番号の正規表現について
-
三菱シーケンサーの命令でFROM ...
-
シェルのSTEP数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
ダブルコーテーション付きでCSV...
-
Excelマクロ 空白セルを無視し...
-
VBAでcsvファイルもシートもあ...
-
VBAで複数のCSVからレコードセ...
-
ファイル名を変数で書きこむfwr...
-
CSVで余計な空行が入る
-
CSVデータの文字列置換
-
EXCEL→CSV保存時のダブルクォー...
-
VB.netでShellExecuteがしたい
-
エクセルの任意のシートをcs...
-
fortranでデータの抜き出しをし...
-
VBA csvファイルのデータを...
-
pythonでリストをCSVに出力する...
-
FileListBoxで出すものを絞り込...
-
複数のファイルをまたぐエクセ...
-
バッチファイルでcsvファイルに...
-
StringGridの中身をCSV形式で保...
-
vbaマクロについて 次のような...
-
rubyを用いたCSVファイルの分割...
おすすめ情報