cellの最後の値の座標を求めたい

15 ビュー (過去 30 日間)
周平
周平 2022 年 10 月 21 日
コメント済み: 周平 2022 年 10 月 23 日
rangeでデータの範囲を指定したいのですが、データによって得たデータのサイズが異なり、cellの位置が変わるためうまくできません。解決法があるのであれば教えていただきたいです。よろしくおねがいします。 
[file,path] = uigetfile('*.csv');
% ファイル名と拡張子を分割する
[~,name,ext] = fileparts(file);
% ファイルを選択して、切り抜く場所を選んでP1とおく。
C = readcell([path,file],'Range','B42:[データの最後のcellを入れたい]');
%csvとしてフォルダに書き出す
writecell(C,[name ' ttt' ext]);
  2 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 10 月 22 日
「データの最後のcell」とは「csvファイル内の最後のデータ」という意味でしょうか?
周平
周平 2022 年 10 月 22 日
そのことです。わかりにくくてすみません。

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

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 10 月 22 日
>データのサイズが異なり、cellの位置が変わるためうまくできません。解決法があるのであれば教えていただきたいです。
読み取り終了位置がファイルの最後の場合、終了行および終了列を指定しなくても自動検出機能を使う事が出来ます。
(読み取り終了位置がファイルの最後ではない場合は、必要最小限のデータを一旦読み取って、何らかの認識方法で不要部分を削除する必要があります。)
readcell関数の「Range の指定方法」を「四角形の範囲'B42:最後のcell'」から「開始セル'B42'」に替えれば解決します。
>インポート関数は、インポートを開始セルで開始し、最後の空の行またはフッター範囲で終了することで、データの範囲を自動的に検出します。(readcellー入力引数Range — 読み取るデータの部分ー開始セルの説明より抜粋)
分かり易い様にサイズの小さいサンプルデータを準備しました。B42セルから読み取るとD44まで、即ち3行3列のデータが読み込まれるはずです
%[file,path] = uigetfile('*.csv');
path = [pwd '/'];
file = 'Book2.csv'; % 分かり易い様にサイズの小さいサンプルデータを準備
% ファイル名と拡張子を分割する
[~,name,ext] = fileparts(file);
% ファイルを選択して、切り抜く場所を選んでP1とおく。
C = readcell([path,file],'Range','B42');
size(C) % 期待通り、最後のセルを指定しなくても自動検出によって読み込めた
ans = 1×2
3 3
%csvとしてフォルダに書き出す
writecell(C, [name ' ttt' ext]);
ls -la
total 16 drwxr-xr-x 2 mluser worker 4096 Oct 22 04:18 . drwx------ 1 mluser worker 4096 Oct 22 04:18 .. -rw-r--r-- 1 mluser worker 396 Oct 22 04:18 Book2.csv -rw-r--r-- 1 mluser worker 18 Oct 22 04:18 'Book2 ttt.csv'
  1 件のコメント
周平
周平 2022 年 10 月 23 日
丁寧にありがとうございます。自動検出されることに気づきませんでした。理解できました。

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

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeデータのインポートと解析 についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!