データインポート
今回頂いたExcelデータの読み込みについては readtable を使うことで Excelシート内の変数名をテーブル変数名としたtable型としてインポートすることができます。ファイルが現在のフォルダーに無い場合は絶対パスで指定してください。
data = readtable('input.xlsx');
Zp1 = data.Zp1;
Zr1 = data.Zr1;
Zp2 = data.Zp2;
Zr2 = data.Zr2;
インポート ツールを使用したスプレッドシート データの読み取り にありますようにデータをインポートするまでの流れをGUI操作で行いつつ、その結果をコードとして自動生成することもできます。
条件を満たす列の抽出・出力
条件式の内容はこちらではわからないのですが。
各行ごとに繰り返し処理をして continue の書かれている isempty(A_P1)==1 || isempty(A_P2)==1 と isempty(AA_P)==1 の2つの条件が成立した場合を除外して抽出したいという感じでしょうか。
抽出についても列ではなく行ですかね。
clear
n=3;
% Excelファイルを読み込み
data = readtable('input.xlsx');
Zp1 = data.Zp1;
Zr1 = data.Zr1;
Zp2 = data.Zp2;
Zr2 = data.Zr2;
% 条件式を満たしているかの確認
TF = false(height(data),1);
for m=1:height(data)
P1 = rem(Zr1(m),n)/n;
P2 = rem(Zr2(m),n)/n;
np = n*gcd(Zp1(m),Zp2(m));
P11 = zeros(np-1,1);
P22 = zeros(np-1,1);
for i0=0:(np-1)
P11(i0+1) = (rem(i0*Zp1(m),np))/np;
P22(i0+1) = (rem(i0*Zp2(m),np))/np;
end
P_1 = P1==P11;
P_2 = P2==P22;
A_P1 = find(P_1);
A_P2 = find(P_2);
% 条件1
if isempty(A_P1) || isempty(A_P2)
continue
end
A_P = zeros(length(A_P1),length(A_P2));
for i=1:length(A_P1)
for ii=1:length(A_P2)
A_P(i,ii) = A_P1(i)==A_P2(ii);
end
end
AA_P = find(A_P);
% 条件2
if isempty(AA_P)
continue
end
% 条件1,2 不成立の場合に抽出
TF(m) = true;
end
最終的に抽出は以下のように参照します。
% データの抽出
data(TF,:)