次のようなテキスト、CSV、またはExcelファイルがあります
||--ID-----||--Name--||--Date of birth--||
1 Jo 1/1/11
32 Mo 2/2/12
3382 Ro 3/3/10
21,252 Do 4/4/09
実際のセットには、合計 1,000,000 行のうち 280,000 行が含まれています。不足している ID 番号 (すべて連続 +1 反復) をすべて何らかの方法で追加し、名前と生年月日のフィールドのみを空にする必要があります。その結果は次のようになります。
||--ID-----||--Name--||--Date of birth--||
1, "Jo", "1/1/11"
2, "", ""
3, "", ""
4, "", ""
32 まで進み、すべての整数が揃うまで繰り返します。これを行う簡単な方法はありますか? ループでコード ブロックを記述せずに? Excel、何らかのアプリ、または Windows テキスト エディターのトリックから何かあれば、ありがたいです。
編集: カンマや引用符などは無視してください。欠落している ID 番号だけが重要です。
答え1
一つのアプローチは次のようになります。
- CSV をシート 1 として Excel にインポートします。
- シート 2 で、a2: =a1+1 などの数式を使用して ID 番号の完全なリストを作成し、それを下方向にコピーします。
- 他の 2 つの列で vlookup 数式を使用して、シート 1 のテーブルを参照します。たとえば、b2:
=VLOOKUP(A2,Sheet1!A2:C13,2,false)
および c2:などです。=VLOOKUP(A2,Sheet1!A2:C13,3,false)
または、要求に正確に一致するように、これを IFNA ステートメントにラップして、値がない場合に "" を返します。b2:=IFNA(VLOOKUP(A2,Sheet1!A2:C13,2,FALSE),"")
および c2:=IFNA(VLOOKUP(A2,Sheet1!A2:C13,3,FALSE),"")
(これらの数式は、列にコピーできるようになりました。) - 入力したら、シート 2 を CSV として保存します。
注: これが正しく機能するには、シート 1 のテーブルを列 1 で並べ替える必要があります。提供されている情報からはそのように見えますが、そうでない場合は最初の列で情報を並べ替えます。
100 万行あると、多くのコンピューターでは非常に遅くなりますが、数式を書く前にそのことに気付きませんでした。大規模なデータ セットで同様の操作を 1 回行ったことがあります。自動再計算をオフにしてすべての数式を配置し、その後手動で再計算しました。数時間はかかりましたが、正しく完了しました。
答え2
Power Query アドインを使用してこれを解決します。
表示またはダウンロードできるプロトタイプを作成しました。One Drive の「Power Query デモ - 欠落している ID 番号をシリーズに追加.xlsx」です。
https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398
そこに到達するには、いくつかの手順と、Power Query 言語 (M) で List.Numbers 関数を呼び出すためのコーディングが少し必要です (Power Query UI では公開されていません)。それでも、これは 1 行のシンプルなコードにすぎません。残りの部分は、Power Query 内でクリックして構築できます。
基本的に私の手法は、List.Numbers を使用して ID 番号のテーブルを生成し、次に Merge を追加して入力データ (ID 番号が存在する場所) から列を取得するというものでした。
List.Numbers のドキュメントはここにあります:
http://office.microsoft.com/en-au/excel-help/list-numbers-HA104111648.aspx?CTT=5&origin=HA104122363
「設定」テクニックを教えてくれた Matt Masson に心から感謝します。
http://www.mattmasson.com/2014/04/defining-configurable-settings-for-your-queries/
注: Power Query は CSV ファイルから直接読み取ることができます。これは、「入力データ」クエリのソースとして使用されます。おそらく最も簡単な方法は、そのクエリを削除し、CSV ファイルから新しいクエリを作成して「入力データ」という名前を付けることです。リソースを節約するには、[ワークシートに読み込む] オプションをオフにします。