2011-12-18 15 views
1

私はグーグルではありますが、これまでのところ、結果は私の必要性に完全に一致しませんでした。誰かが同じ質問の回答を投稿した場合、誰かが私に知らせることができますか?どうもありがとうございました。MatlabまたはExcelを使用して2つのテーブルの行の交差を取得する方法は?

2つのExcelファイルから2つのテーブルがあり、1つは数値のみを含み、もう1つはtxtと数値の両方を含んでいます。例えばfile1.xlsxは、

1 
3  
5  
11  
20 ....  

をのような整数の数ですstudentidの唯一の列ベクトルを持ち、file2.xlsxはとしてワークシートが含まれています

studentID Name  score email   
1   Cassie 60  [email protected]  
2   John  100  [email protected]  
3   Marry 80  ...  
4   Bob  70  ...  
5   Kevin 99  ....  

私はの行を見つけたいですそのstudentID file1.xlsxにあり、最終的には結果ように、テーブルのように見えたしなければならない学生は:

studentID Name score email  
1   Cassie 60  [email protected]  
3   Marry 80  [email protected]  
5   Kevin 99  [email protected]  
...  

私は、SQLやPerlなどのスクリプト言語を持っていません。私はmatlabで知っている、インターセット関数が、しかし、それは数値行列でのみ動作します。私のfile2.xlsxには、数値とtxtの両方の値が入っています。私はそれらを分けたくありません。そして、テーブルには数値とtxtの両方の部分があるので、Excelのファイルをセル配列に読み込む方法はわかりません。 Matlabを使ってこの問題を解決する方法を知っている人がいれば、Excelはうまくいきます。最終結果のテーブルを取得するだけです。

は、あなたが優れてVLOOKUP(英語)/ SVERWEIS(ドイツ)機能を試すことができますので、非常に多くの

答えて

2

あなたは式でfile2.xlsxで新しい列を作成します。

=MATCH(A2,[\path\file1.xlsx]Sheet1!$A$2:$A$20,0) 

$ A $ 2 :$ A $ 20はfile1.xlsxの学生IDを持つ範囲です。最後の0は完全一致を意味します。この数式をすべての行に分配します。この関数は、IDがfile1にない場合は、行数でN/Aを返します。この列を使用して、これらの行をフィルタリングすることができます。欠落しているIDに

=NOT(ISERROR(MATCH(A2,[\path\file1.xlsx]Sheet1!$A$2:$A$20,0))) 

は、その後TRUEは、既存のIDに対応させていただきます、とFALSE:

簡単にフィルタリングのためには、ISERROR関数を追加することができます。

あなたはfile1.xlsxで追加の列を持っているとfile2のデータとそれを組み合わせるしたい場合は、INDEX関数を使用することができます:MATCH/INDEXの組み合わせがに検索列のデータを必要としないこと

=INDEX([\path\file1.xlsx]Sheet1!B$2:B$20,MATCH($A2,[\path\file1.xlsx]Sheet1!$A$2:$A$20,0),1) 

注意をVLOOKUPの場合のようにソートされます。


ISMEMBER関数を使用することができます。

MATLABに両方のファイルをインポートし、セル配列file1とfile2を持っているとします。次に、あなたが行うことができます。

[~,~,file1] = xlsread('file1.xlsx'); 
[~,~,file2] = xlsread('file2.xlsx'); 
[idx2, idx1] = ismember(file2(:,1), file1(:,1)); 
filtered2 = file2(idx2,:); 

をfile2.xlsxに存在file1.xlsx内の行を見つけると同じ順序でそれらをソートするに:

idx1(idx1==0) = []; 
filtered1 = file1(idx1,:); 

あなたが行の順序を保持する場合file1.xlsxは、ismemberステートメントのfile2とfile1を切り替えるだけです。

+0

こんにちは、大変ありがとうございました。私は最初にmatlabメソッドを試しました。しかし、file2.xlsxには空のセルがあるので、それらのコマンドを入力すると、xlsreadメソッドは固定長ではなく不平を言います。提案はありますか?また、空のセルを手動で入力するよりも何かを試していきます。ありがとう – Cassie

+0

申し訳ありませんが、私は何とかあなたのコメントを逃した。私はあなたがまだMATLABでファイルを読むことができると信じていますが、ファイルを見ずに正確な答えを出すのは難しいです。あなたの質問がまだあなたのために実際であれば、あなたのサンプルファイルをどこかにアップロードしてここにリンクを投稿できますか? – yuk

1

、ありがとうございました。 1.xlsxする式以下の2.xlsxアサインからの学生の詳細を1.xlsx移入し

1.xlsx 
| A| B| C| D| 
1| 1| | | | 
2| 3| | | | 
3| 5| | | | 
4| 11| | | | 
5| 20| | | | 


2.xlsx 
| A| B| C|  D| 
1| 1| C| 60| [email protected]| 
2| 2| J| 100| [email protected]| 
3| 3| M| 80| [email protected]| 
4| 4| B| 70|  | 
5| 5| K| 99|  | 

: は、あなたのExcel文書の以下のレイアウトを考慮し

VLOOKUPはの出現を検索
B1: =VLOOKUP($A1;[<PATH_TO_2.xlsx>]<NAME_OF_SHEET_IN_2.xlsx>!$A$1:$D$5;2;TRUE) 
B2: =VLOOKUP($A2;[<PATH_TO_2.xlsx>]<NAME_OF_SHEET_IN_2.xlsx>!$A$1:$D$5;2;TRUE) 
... 
C1: =VLOOKUP($A1;[<PATH_TO_2.xlsx>]<NAME_OF_SHEET_IN_2.xlsx>!$A$1:$D$5;3;TRUE) 
C2: =VLOOKUP($A2;[<PATH_TO_2.xlsx>]<NAME_OF_SHEET_IN_2.xlsx>!$A$1:$D$5;3;TRUE) 
... 
D1: =VLOOKUP($A1;[<PATH_TO_2.xlsx>]<NAME_OF_SHEET_IN_2.xlsx>!$A$1:$D$5;4;TRUE) 
D2: =VLOOKUP($A2;[<PATH_TO_2.xlsx>]<NAME_OF_SHEET_IN_2.xlsx>!$A$1:$D$5;4;TRUE) 
... 

2番目のパラメータで指定されたシートの最初のパラメータ($ A1、..)と2番目のパラメータで指定された行列のn番目の値(3番目のパラメータ)をコピーします。第4ブール値paramは、完全一致が必要かどうかを指定します。

「< PATH_TO_2.xlsx」と「< NAME_OF_SHEET_IN_2.xlsx」を正しい値「[]」「!」で置き換える必要があります。さらに説明の場所で

滞在する必要があります。Excelでhttp://www.techonthenet.com/excel/formulas/vlookup.php

幸運:)

関連する問題