フィルターのクリア

特定の数字列を取り出す方法

12 ビュー (過去 30 日間)
健気 大川
健気 大川 2021 年 9 月 16 日
コメント済み: 健気 大川 2021 年 9 月 17 日
イメージデータを画像で添付させて頂きました。
B列には0と1からなるマーク数列、c列には1から23までの数字があります。これをB列の1となっているところだけ、右のよう(E列以降)に取り出したいです。お時間がある方、助言を教えて頂きたいです。(ただし、実際のデータは1の文字列が何個あるのか分からないものとなっております。また、0と1の並び方は不規則です。)

採用された回答

Hernia Baby
Hernia Baby 2021 年 9 月 16 日
まずは読み込みます
clear,clc;
A = readmatrix('Sample.xlsx');
■ここがミソ
unique 関数で一位の値をだし、それに該当する2列目の数字を取り出します
idx = unique(A(:,1))
idx = 2×1
0 1
B = A(A(:,1) == idx(2),2)
B = 13×1
3 4 5 7 8 9 13 14 16 17
E2以降に書き込みます
writematrix(B,'Sample.xlsx','Range','E2')
  5 件のコメント
Hernia Baby
Hernia Baby 2021 年 9 月 16 日
1が単体で存在すると非常に難しいです
ここからここまでを抜き出すといった物はできるんですが、1が連続しないとなるとそれが通用しません
一応コードを書きましたので以下に示します
■読み込み
clear,clc;
file = 'Sample.xlsx';
A = readmatrix(file,"OutputType","double"');
■1のインデックスを抜き出す
[row,~,~] = find(A(:,1));
■1の開始と終了を抜き出す
idxs = [0; diff(row)] ~= 1;
idxs(end) = 1;
idxe = [diff(row); 0] ~=1;
idxe(end) = 0;
idx = logical(idxs + idxe);
■開始&終了をセットにする
row1 = reshape(row(idx),2,[])
row1 = 2×4
3 7 13 16 5 9 14 20
■1つずつ追加していく
 この時AZを超えるとエラーを吐き出す
for i = 1:length(row1(1,:))
chart = char('E' + 3*i);
if chart > 'Z'
chart = ['A', char('A' + chart - 'Z')];
end
if chart > 'AZ'
disp('分割数がAZより大きいです')
break
end
disp([chart,'2'])
writematrix(A(row1(1,i):row1(2,i),:),file,'Range',[chart,'2']);
end
H2 K2 N2 Q2
今回はQ2のセルにまで書くようになっています
もう一度言いますが、row1のセットができないので、
このコードでは1が単体で存在する場合はエラーを起こします
健気 大川
健気 大川 2021 年 9 月 17 日
ありがとうございます。1が単体で存在することなないので解決いたしました。
お忙しい中ありがとうございました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeコンピューター ビジョンと Simulink についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!