Excel (VBA)

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

 
(Windows 10全般 : Microsoft 365)
パワークエリでフォルダ内の複数のCSVファイルを横に結合したい
投稿日時: 24/07/12 10:07:20
投稿者: まるえん

教えて下さい。    
                            
例 D:\日報 にある                                
                                
A1_20240712.csv                                
    A    B    C    D                
1    項目    あ    い    う                
2    TAG    a    b    c                
3    1:00    1    2    3                
4    2:00    4    5    6                
                                
A2_20240712.csv                                
    A    B    C    D                
1    項目    え    お    か                
2    TAG    d    e    f                
3    1:00    11    12    13                
4    2:00    14    15    16                
                                
を単純に横に結合して下記の様にしたいです。                                
    A    B    C    D    E    F    G    H
1    項目    あ    い    う    項目    え    お    か
2    TAG    a    b    c    TAG    d    e    f
3    1:00    1    2    3    1:00    11    12    13
4    2:00    4    5    6    2:00    14    15    16
                                
※実際にはファイル数は100近くあります。                                
※ファイル名を指定せずにフォルダ内のCSVファイルを全て横に結合したいです。                                

回答
投稿日時: 24/07/12 12:08:37
投稿者: sk

引用:
項目 あ い う 項目 え お か

Power Query のテーブルに同じ名前の列を 2 つ以上設けることは出来ませんが、
どうしてもそのレイアウトでなければならないのでしょうか。
 
引用:
※実際にはファイル数は100近くあります。
※ファイル名を指定せずにフォルダ内のCSVファイルを全て横に結合したいです。

[項目]以外の列の名前が、複数のファイル間で競合することはないのでしょうか。
もし列名が競合する場合、具体的にどのような形で出力できればよいのでしょうか。
 
また各ファイルの[項目]について、例えばその値が "1:00" であるレコードを
含むファイルと含まないファイルが存在した場合、それらをどのような形で
結合できればよいのでしょうか。

回答
投稿日時: 24/07/12 12:23:27
投稿者: Suzu

各ファイルは
 ・項目名を含め 必ず 4行 x 4列 なのでしょうか?
 
 ・また、時刻は横並びになる必要があるのでしょうか?
   Ex)
     File1    File2
     項目     項目
     TAG      TAG
     1:00     2:00
     2:00      3:00
    の場合、
 
     項目 項目
     TAG  TAG
     1;00  2:00
     2:00  3:00  で良いのか
 
     項目 項目
     TAG  TAG
     1;00
     2:00  2:00
         3:00  となって欲しいのか

投稿日時: 24/07/12 14:00:40
投稿者: まるえん

skさん返信ありがとうございます。

引用:

項目 あ い う 項目 え お か
 
Power Query のテーブルに同じ名前の列を 2 つ以上設けることは出来ませんが、
どうしてもそのレイアウトでなければならないのでしょうか。

 
実際にやりたいのは、
@各CSVファイルのA列には時刻データがあり、それを一つのシートにまとめる。※単純に横に結合
➁単純に結合すると時刻データの列が複数出来るのでA列以外の時刻データの列を削除。
B各項目のその日の平均値、最大値、最小値を出し別のexcelに転記。
 
のまず@をやりたかったのですが、同じ名前は無理という事でしょうか?
 
引用:

[項目]以外の列の名前が、複数のファイル間で競合することはないのでしょうか。
もし列名が競合する場合、具体的にどのような形で出力できればよいのでしょうか。
 

TAGのNoが別になっているので、競合することはありません。
 
引用:

また各ファイルの[項目]について、例えばその値が "1:00" であるレコードを
含むファイルと含まないファイルが存在した場合、それらをどのような形で
結合できればよいのでしょうか。

各CSVのA列は時刻のデータなので、全て同じです。
 

投稿日時: 24/07/12 14:08:34
投稿者: まるえん

Suzuさん返信ありがとうございます。
 
 

引用:

各ファイルは
 ・項目名を含め 必ず 4行 x 4列 なのでしょうか?

各CSVのA列は時刻データ(10秒毎)になるので、8640行+コメント2行で全部で8642行になります。
又列は各CSVで項目の数が違うので固定ではありません。
 
 
 
引用:

・また、時刻は横並びになる必要があるのでしょうか?
   Ex)
     File1    File2
     項目     項目
     TAG      TAG
     1:00     2:00
     2:00      3:00
    の場合、

各CSVのA列は全く同じで、時刻が抜けていたり、途中から始まる事はありません。
 
 

回答
投稿日時: 24/07/12 14:39:01
投稿者: sk

引用:
各CSVファイルのA列には時刻データがあり

引用:
各項目のその日の平均値、最大値、最小値を出し別のexcelに転記。

日付はどこに記録されているのでしょうか。
 
それとも、[項目]列( A 列)の実際のデータ型は time (時刻型)ではなく
datetime (日付/時刻型)なのでしょうか。
 
引用:
TAGのNoが別になっているので、競合することはありません。

また、ファイルの 1 行目のレコードが列見出し行であるとして、
2 行目のレコードは何に関する情報を表しているのでしょうか。
 
引用:
TAG a b c

少なくとも、2 行目の[項目]列の値 "TAG"は time にも datetime にも
型変換することができませんし、また[項目]以外の列の値についても
数値データに変換することはできません。
 
引用:
列は各CSVで項目の数が違うので固定ではありません。

今のところ申し上げられるのは、いきなり元のレイアウトのまま
各ファイル(テーブル)を横方向に結合させるのではなく、
[列のピボット解除]機能によって全てのファイルのレコードを
共通の正規形レイアウトに変換した上、縦方向に結合させた方が
集計しやすいのではないか、ということぐらいです。

投稿日時: 24/07/16 09:00:23
投稿者: まるえん

skさん返信ありがとうございます。
 

引用:

今のところ申し上げられるのは、いきなり元のレイアウトのまま
各ファイル(テーブル)を横方向に結合させるのではなく、
[列のピボット解除]機能によって全てのファイルのレコードを
共通の正規形レイアウトに変換した上、縦方向に結合させた方が
集計しやすいのではないか、ということぐらいです

 
そうなんですね。
通常の結合だと縦に結合されるので、単純に横に結合に結合する方法
もあるのかと思い投稿致しました。
[列のピボット解除]機能を確認してみます。
ありがとうございました。