アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAの質問です。

CSVカンマ区切りで取り込んだいくつかのファイルを一つのエクセルファイルにまとめたいと思っています。
例えば、A,B,C,D,Eという名前(毎回取り込むファイル名は異なります)のものをCSVカンマ区切りで読み込むと、エクセルファイルがそれぞれ作られます。これをB-Eのデータ(タイトル行を除いて)をAのファイルに貼り付けたいと考えています。

A-Eに入っているデータの列数は共通していますが、行数が異なるので、Aファイルのこの行にBのデータを入れるなどの指定ができません。

上記をVBSで作る場合の具体的なソースを教えて頂ければと思います。

どなたかご教示よろしくお願い致します。

質問者からの補足コメント

  • >Aファイルを示す定義とは?

    説明が不十分でした。
    A-Eファイルには番号とある一定のアルファベットがついています。例えば、0123456.AB, 0123457.AB。
    この番号の1番小さいものと定義することはできますでしょうか?

    A-Eを新規ファイルにまとめるという形でも構いません。新規ファイルの場合、A-Eのファイルの何かのタイトル行だけコピーし、残りのファイルはタイトル行を除くといったことも可能になりますでしょうか?
    参照したサイトでは全てタイトル行までコピーするものしか見つけられませんでした。

    https://www.ex-it-blog.com/Book-Excel-Macro


    >VBAなのかVBSなのか不明ですが、VBSなら知恵袋にベテランさんがいましたね。

    勉強不足でこちらの区別がついておりませんでした。

      補足日時:2021/06/22 18:42

A 回答 (3件)

copyコマンドで連結してから読み込ませれば良いだけでは

    • good
    • 0

こんにちは


CSVデータ、文字コードなどわかりませんが、
前に作ってデータ加工用にたまに使うプロシージャがあるので参考に掲示しますね
>A-Eに入っているデータの列数は共通していますが、行数が異なるので、A>ファイルのこの行にBのデータを入れるなどの指定ができません。
差し込みたいと言う事でしょうか?
不明ですが、全部抽出して加工(ソート)する方法はどうでしょう。

各CSVファイルを同じフォルダに入れておく
VBAからダイアログでフォルダを選択
中にあるすべてのCSVファイルをシートインデックス1のシートに書き出します。
ごめんなさい、タイトル行は含んでいます。
見出しが特定文字なら、分岐してください。例えば
カラム1に № や ID のような一意の各ファイル共通文字があれば良いのですが、、、無理かな、、
下記の書き方だと少し工夫しなくてはなりませんが、1行目を飛ばすとかも、

おまけで
すべてを抽出したあとC列をキーにソート(コメントアウト)
ソート後 C列E列をキーに重複データ行を削除します。(コメントアウト)

テストする場合は、インデックス1のシートにしているので新規ブックで試される方が良いと思います。

最終的な結果やCSVが分からないのと、ご質問の回答用に書いていないので手直しが必要と思いますし、違う書き方の方だ合理的かも知れませんが、
参考程度でどうぞ

Sub Sample()
Dim folPath As String, filePath As String
Dim fNumber As Integer, i As Long
Dim buf As String, lineAry As Variant
fNumber = FreeFile
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = CreateObject("WScript.Shell").SpecialFolders("desktop")
If .Show = True Then folPath = .SelectedItems(1)
End With
If folPath = "" Then
Exit Sub
Else
folPath = folPath & "\"
End If
filePath = Dir(folPath & "*.csv")
i = Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
Do While filePath <> ""
Open folPath & filePath For Input As #fNumber
With Worksheets(1)
Do Until EOF(1)
Line Input #fNumber, buf
If buf <> "" Then
lineAry = Split(buf, ",")
' If lineAry(0) <> "№" Then
Worksheets(1).Cells(i, "A").Resize(1, UBound(lineAry) + 1) = lineAry
i = i + 1
' End If
End If
Loop
Close #fNumber
End With
filePath = Dir()
Loop

' 'データソート C列キー
' With ActiveWorkbook.ActiveSheet.Sort.SortFields
' .Clear
' .Add Key:=Range("C1"), DataOption:=xlSortTextAsNumbers
' End With
' With ActiveWorkbook.ActiveSheet.Sort
' .SetRange Range("A1").CurrentRegion
' .Header = xlNo
' .MatchCase = False
' .Orientation = xlTopToBottom
' .SortMethod = xlPinYin
' .Apply
' End With
''重複データ行削除 C列 E列キー
' ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(3, 5)
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
試してみます。

お礼日時:2021/06/23 19:15

>例えば、A,B,C,D,Eという名前(毎回取り込むファイル名は異なります)~Aのファイルに貼り付けたいと考えています。



毎回取り込むファイル名が違うのにどうしてAに集約と決まるのでしょうか?
Aファイルを示す定義とは?

VBAなのかVBSなのか不明ですが、VBSなら知恵袋にベテランさんがいましたね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!