Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2010)
複数シート統合後、一部データを取得
投稿日時: 19/02/04 11:12:28
投稿者: princess2170

■やりたい事
システムからダウンロードするデータが多いので、
マクロでひとつにまとめて、一つのシートにしたいのですが、
各シートの行は同じフォーマットですが、列が異なるので、困っています。
(同じフォーマットだと、ひとつにするマクロがWebにいくつかありました)
 
毎月システムから都度ダウンロードする集計データ(17ファイル(CSV))を
1.ひとつのエクセルブックに、17シートをまとめる。
2.1でひとつのブックにまとめた17シートを、さらにひとつのシートに縦でまとめる。
 その際に、各シート名を一覧に追加して表示
 
全てのファイルは同じフォルダにあります。
本当に恐縮なのですが、お力添えをどうぞよろしくお願いいたします。
 
****************************************************************************************
【元データ】CSVファイル(17ファイル)
 
CSVファイル1   2017年3月 2017年4月 2017年5月 ・・・・・・・・・     2019年1月
○○○○
××××
△△△△
■■■■
 
CSVファイル2   2018年1月 2018年2月 2018年3月・・・ ・・・・・・・・・・・2019年1月
○○○○
××××
△△△△
■■■■
 
CSVファイル3   2017年1月 2017年2月 2017年3月 ・・・・・ ・・      2019年1月
○○○○
××××
△△△△
■■■■
 



 
CSVファイル17   2016年12月 2017年1月 2017年2月 ・・・・・・・       2019年1月
○○○○
××××
△△△△
■■■■
 
****************************************************************************************
 
【一覧ファイル】エクセルファイル
 
各ファイルの行は全て同じフォーマットですが、
各ファイルの列は、年月の開始が異なるので、年月を縦に合わせて最新月が一番右で揃うようにしたいです
 
 
CSVファイル1          2017年3月 2017年4月 2017年5月 ・・・・・    2019年1月
○○○○
××××
△△△△
■■■■
 
CSVファイル2                2018年1月 2018年2月 2018年3月・・・・2019年1月
○○○○
××××
△△△△
■■■■
 
CSVファイル3  2017年1月 2017年2月 2017年3月 ・・・・・・・・・・・・・・・・・2019年1月
○○○○
××××
△△△△
■■■■
 




CSVファイル17   ・・・・・・・                         2019年1月
○○○○
××××
△△△△
■■■■
 
****************************************************************************************
 

回答
投稿日時: 19/02/04 14:07:40
投稿者: WinArrow
投稿者のウェブサイトに移動

コードの作成依頼は、禁止されていますので、
考え方だけ、書いておきます。
 
CSVファイルは、Excelファイルではないのでシートというのは、適切な表現ではありません。
 
でも、Excelで開くとシートに展開されてしまうので、
単純にテキストファイルとして開き、データの持ち方を変換して、Excelシートに取り込みます。
 
イメージとしては
CSVの1行目には、項目名があると思いますが、
1列目 2列目 3列目
○○○ 2017年3月 n1
○○○ 2017年4月 n2
のような形にします。
 
このような形式で全部のデータを1つにすれば、ピボットテーブルを使って、
マトリクスに変換できまsす。
 
CSVファイルの取り込み部分のヒントコードでけ書いておきます。
 
 
Sub ヒント()
 
Dim BUF As String
Dim BUF1
Dim BUF2
Dim FNO As Integer
Dim sht As Worksheet, RX As Long, Cx As Long
 
    Set sht = Sheets(1)
    RX = 1
    FNO = FreeFile
    Open "D:\TEST\TEST001.CSV" For Input As #FNO
    Line Input #FNO, BUF
    BUF1 = Split(BUF, ",")
    sht.Cells(RX, "A").Value = BUF1(0)
    sht.Cells(RX, "B").Value = "年月"
    sht.Cells(RX, "C").Value = "数量"
    Do Until EOF(FNO)
        Line Input #FNO, BUF
        BUF2 = Split(BUF, ",")
        For Cx = LBound(BUF2) + 1 To UBound(BUF2)
            RX = RX + 1
            sht.Cells(RX, "A").Value = BUF2(0)
            sht.Cells(RX, "B").Value = BUF1(Cx)
            sht.Cells(RX, "C").Value = BUF2(Cx)
        Next
    Loop
    Close (FNO)
End Sub
 
 
 
 
 
 
 
 
 

回答
投稿日時: 19/02/04 18:05:02
投稿者: WinArrow
投稿者のウェブサイトに移動

↑のヒントのコードは、
 
CSVファイル:1 シート;1
の形になっていますが、
 
少しアレンジすることで
CSVファイル:17を1つのシートに取り込むことができますが、
同一コードで、同一年月の数値(?)をベタで並べるのか?加算するのか?
そのあたりがカギとなるかもしれません。

投稿日時: 19/02/04 22:49:08
投稿者: princess2170

お気遣い、ありがとうございました。
 
シート自体は1つにできたのですが、
縦列を揃えるのが、難しい状況です。
 
もっと良く調べてみます。
 
元々のコードが、他の方が作ったもので、、
こちらに書き込みして良いか判断つかず、
ご無礼をしてしまいました。
 
いつも本当にありがとうございます。
またよろしくお願い申し上げます。