データテーブルの行に値を含むかいなかの判定

表記の件失礼します。
条件分岐を組もうとしています。
その条件分岐を以下にしようと考えております。

データテーブルにある値を含んでいるかいなか

また、該当行に値を含む場合、該当行の次の行を
新しく作ったデータテーブルのデータ行に追加をしたいと考えています。

方法があれば教えていただきたいです。

こんにちは、Userさん、

データテーブルの各行を繰り返し処理します。
現在の行に所望の値が含まれているかどうかを確認します。
値が見つかった場合、次の行を新しいデータテーブルに追加します。
元のデータテーブルのすべての行を繰り返し処理するまで、このプロセスを続けます。

これが役立つことを願っています。解決した場合は解決済みにマークするのを忘れないでください。
ありがとうございます。

こんにちは

ある行のいずれかの列に対象の値が含んでいるかの判断でよいでしょうか?
そうであれば、後続の処理も考えて

arrDr = dt.AsEnumerable.Where(Function(r) r.ItemArray.Any(Function(o) o.ToString=keyword)).ToArray

としておいて、arrDr.Length >0 をチェックすればよいかと思います。

arrDrはDataRow配列です。

次の行からなるデータテーブルは

dtResult = arrDr.Select(Function(dr) dt.Rows(dt.Rows.IndexOf(dr)+1) ).CopyToDataTable

となります。(ただし、最終行に対象が無いことを前提としています。)

Sample
Sample20240327-2.zip (3.3 KB)

ある行に「番号」という列が存在するか動画で判定をしたいと考えております。
こちらだと、要素番号で判定しているようなのですが、特定の列名でみたいばあいはどうすればよいでしょうか

特定列でのキーワード有無であれば

arrDr = dt.AsEnumerable.Where(Function(r) r("Column1").ToString=keyword).ToArray

になりますが、意図とあっていますでしょうか?
ある行の任意の列にキーワード有無であれば、最初の投稿の式になります。

任意の列というのは、該当行の中の全ての列名から、対象の列名を探すという意味でしょうか?

arrDr = dt.AsEnumerable.Where(Function(r) r.ItemArray.Any(Function(o) o.ToString=keyword)).ToArray

上記文を分岐条件の条件文として試したところ、エラーになるのですが、Function(o)は0でしょうか?

任意の列というのは、該当行の中の全ての列名から、対象の列名を探すという意味でしょうか?

arrDr = dt.AsEnumerable.Where(Function(r) r.ItemArray.Any(Function(o) o.ToString=keyword)).ToArray

上記文を分岐条件の条件文として試したところ、エラーになるのですが、Function(o)は0でしょうか?
再度の質問申し訳ありません。

上記の式を条件分岐の評価式にするのではなく、DataRow配列である、arrDr に代入して、arrDr.Length>0を条件分岐で評価してください。
このようにしているのは後続で、これらの次の行が必要との要件があるためです。

理解できました。
申し訳ありませんが、最後に一点伺いたいです。

dtResult = arrDr.Select(Function(dr) dt.Rows(dt.Rows.IndexOf(dr)+1) ).CopyToDataTable

となります。(ただし、最終行に対象が無いことを前提としています。)

上記の最終行に対象がないことが前提とはどういうことでしょうか

仮に最終行に対象のキーワードがあった場合、その次の行は存在しませんので、上記式は例外となります。

ご回答ありがとうございます!
かいけつしました

1 Like

度々すいません。

Keyword に項目名を格納しようと考えています。
今は次の行をセレクト分で取得していますのですが、
Keyword行の次の10行を抽出する方法などあるでしょうか?

よければデータはダミーでも良いので、入力と期待する出力をスクリーンショットand/orファイルで例示できませんでしょうか?
(言葉だけではわかりにくいですので)

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.