ヘッダーが同じだが順序が違う複数の Mac Excel ファイルを結合する方法

ヘッダーが同じだが順序が違う複数の Mac Excel ファイルを結合する方法

私は Mac を使用しています。私の Excel ファイルのヘッダーは一致していますが、順序が間違っています。すべて「query」という名前のヘッダーで始まり、その後は混ざり合っています。

以下にヘッダーの例をいくつか示します。

  • クエリ|メール|FacebookUrl|TwitterUrl|電話番号|タイムスタンプ|InstagramUrl|エラー|LinkedInUrl|YouTubeUrl
  • クエリ|facebookUrl|linkedinUrl|電話番号|タイムスタンプ|youtubeUrl|メール|エラー|instagramUrl|twitterUrl
  • クエリ|メール|facebookUrl|instagramUrl|タイムスタンプ|linkedinUrl|youtubeUrl|電話番号|twitterUrl|エラー

ターミナルを使用して、すべての csv ファイルを結合できますcat *.csv >combined.csv。ただし、すべてのヘッダーが順序どおりに並んでいないため、うまく機能しません。

私に何ができるのか何かアイデアはありますか?

答え1

CSV対応ツールを使用する必要があります。優れたツールとしてはミラー

例えば、次の3つのCSVファイルがある場合

#input_01.csv
a,b,c
0,2,5

#input_02.csv
b,a,c
0,2,5

#input_03.csv
b,a
0,2

走ってmlr --csv unsparsify ./input_0*.csv >./output.csv手に入れることができる

+---+---+---+
| a | b | c |
+---+---+---+
| 0 | 2 | 5 |
| 2 | 0 | 5 |
| 2 | 0 | - |
+---+---+---+

答え2

ファイルのサイズが膨大である場合は、Power Query を検討してください。現在、列を特定の順序で並べ替えるスキルは個人的にはありませんが、アルファベット順に並べ替えることはできると思います。そのため、少なくとも今日は、ここではそれを実現する方法については説明しません。

これは驚くべきことができます (Excel の制限に慣れていて、VBA の経験があまりないため、少し複雑なことしかできない人にとっては驚くべきことです)。これは間違いなく目的を達成できますが、すぐには完成しないと思います。

しかし、ファイルのサイズが大きすぎてとてもシンプルな数式アプローチで、コンピューター、または少なくとも Excel を停止させることなく作業を実行できる場合は、次のアプローチは非常にシンプルです。

使用するファイルが、今のまま存在し続けなければならないのか、それとも変更できるのかわかりませんでした。そのままにしておく必要がある場合は、サブディレクトリを作成し、そこにすべてのファイルをコピーします。変更しても問題ない場合は、ファイルのコピーがないので少しだけ簡単ですが、ファイルが引き続き使用され、列の順序を変更するだけで問題がない場合は、将来変更する必要がないように変更する方がはるかに便利です。よく言われるように、「一度変更したら完了」です。

ほとんど手間をかけずに列を並べ替えるには、次の数式を使用するだけです。

=INDEX($I$1:$O$4,SEQUENCE(ROWS($I$1:$O$4)),MATCH($A$1:$G$1,$I$1:$O$1,0))

(式では、A:G に 6 列 x 4 行の表を配置し、次に I:O に同じ見出しを持つ別の表を配置しますが、A:G 表に対する順序は混在しています。)

INDEX()並べ替えたいテーブルが与えられます。この場合は I1:O4 です。すべての行を使用するように指示するには、SEQUENCE()1 つのパラメータを使用します (「行」または出力が最初のパラメータなので、これ以上は必要ありません)。そのパラメータは、並べ替える必要があるテーブル内の行の数です。シーケンスを使用すると、私が行ったように範囲アドレス、名前付き範囲 (実際に使用する理由)、またはまたは行数だけです。結局のところ、ほとんどのテーブルでは、範囲の右側がわかればそれで済みますよね? または、その上の行の値を減算するだけかもしれません。名前付き範囲の場合のみ、「うーん... I1:O4... は 4 行あるはずなので、4 と入力します...」などと言う以外に、実際に何かを行う必要があります。

最後の部分は、列の順序付けという良い部分です。INDEX()列を並べ替えたり、列を複数回表示したりできます。すべてのファイルに必要な順序がわかっている場合は、次のよう{4,2,19,7,...}に入力するだけで指示できますが、わかりません。順序は任意で、それぞれ異なる可能性があります。

しかし、 を使用するとMATCH()、Excel にさまざまな順序の作業を行わせることができます。MATCH()1 つのファイルの見出しを使用するように指示すると、どのファイルでもかまいませんが、開いて並べ替えるすべてのファイルに対してそのファイルの見出し順序が使用されます。 したがって、match は現在のファイルの見出しで各見出しを検索し、見つかった順序を にフィードし、INDEX()順序のソースとして選択したファイルと同じ見出し順序でデータを再構成します。

さらに優れているのは、数式によって 2D SPILL 配列が生成されるため、数式を 1 つのセルにコピーすると、出力テーブル全体が生成されることです。

作業が完了したら保存できるファイルで作業するため (コピーされたセットまたは元のセット、いずれにしても変更および保存できるファイルで作業することになります)、次に出力全体を選択し、コピーして、Paste|Special|Values数式出力ではなくデータのみを取得します。次に、元の資料を削除して、出力テーブルのみを残します。保存します。次の作業に進みます。

オリジナルに対してこれを行う予定があり、さらに使用する場合は、オリジナルのテーブルを選択してコピーし、Paste|Special|Formats出力テーブルでテーブルの書式設定を維持するのがよいでしょう。同じ外観と操作感を維持するためにも、これを行いますPaste|Special|Column widths

考えてみれば、CSV ファイルを結合する予定のようですから、列幅は必要ないと思います... 書式設定はほとんど問題になりません。それでも、ライブ ファイルを使用していて、将来使用する予定がある場合は、元のテーブルを削除する前に書式設定の手順を実行してください。Excel ファイルとして保存してから、CSV コピーとして保存します。おそらくそれらはすでに CSV ファイルなので、心配する必要はありませんが、このアプローチの他の用途については覚えておいてください。

とにかく、リストの最初のファイルを開き、この数式をコピーして必要に応じてアドレスを調整し、数式セルをコピーして、リストの 2 番目のファイルを開いて貼り付けます。上記の操作を実行してデータに変更し、古いものを削除してから、同じ CSV 形式で保存し直します。すべてのファイルが修正されるまで、この操作を繰り返します。その後、ファイルを結合します。

さらに良いのは、VBA に詳しい場合は、新しいファイルを開いて名前を付けて保存し (マクロ ファイルとして、つまり .xlsm として)、ディレクトリ内のファイルをチャンク処理するマクロを記述して、各ファイルに数式を追加し、出力をデータのみに変更し、その左側にあるものをすべて削除して出力の最初のセルが A1 になるようにし、各ファイルを CSV として保存します。この新しいファイルを再度保存します。次に、展開して実行します。

関連情報