いつもお世話になっております。
以下画像のようなデータテーブルがある場合、条件として以下の内容を実装したいと考えております。
「「No」が重複していて「状況」が空欄、または【待ち】が記載されていて締切日が空欄の場合、「結果」に【未定】を入力する」
このように複数条件がある場合のフィルター等の処理について実装方法がわからないので教えていただきたいです。
宜しくお願い致します。
test.xlsx (10.1 KB)
いつもお世話になっております。
以下画像のようなデータテーブルがある場合、条件として以下の内容を実装したいと考えております。
「「No」が重複していて「状況」が空欄、または【待ち】が記載されていて締切日が空欄の場合、「結果」に【未定】を入力する」
このように複数条件がある場合のフィルター等の処理について実装方法がわからないので教えていただきたいです。
宜しくお願い致します。
Try this linq query in invoke code and send dt as in/out argument and send the same dt as dt1 as only in argument
dt.AsEnumerable.ToList.ForEach(sub(r) r("Result") = If((dt1.AsEnumerable.Where(function(x) x("No").Tostring.Equals(r("No").ToString).Count>1 And String.IsNullOrEmpty(r("Status").ToString)) OrElse (r("Status").ToString.Equals("Waiting") And String.IsNullOrEmpty(r("Deadline").ToString)),"Undefined",""))
Cheers
Hi @vgmadtg
Can you try the below
Code:
For Each row As DataRow In dtInput.Rows
Dim noValue As String = row("No").ToString()
Dim statusValue As String = row("Status").ToString()
Dim deadlineValue As String = row("Deadline").ToString()
If (dtInput.Select("No = '" & noValue & "'").Length > 1 AndAlso String.IsNullOrEmpty(statusValue)) OrElse (statusValue = "Waiting" AndAlso String.IsNullOrEmpty(deadlineValue)) Then
row("Result") = "Undecided"
End If
Next
Output:
Regards,
こんにちは
これはNoが重複していなければ、何も記入しないという理解であっていますでしょうか?
この場合重複のカウントをするためにグルーピング等が必要になりますので少々複雑になります。
例えば以下のようになります
dt.AsEnumerable.GroupBy(Function(r) r("No").ToString).Where(Function(g) g.Count>1).SelectMany(Function(g) g).Where(Function(r) r("状況") IsNot Nothing AndAlso (String.IsNullOrEmpty(r("状況").ToString) OrElse r("状況").ToString="待ち")).ToList.ForEach(Sub(r)
r("結果")="未定"
End Sub
)
Sample20240610-1.zip (17.5 KB)
ご返信ありがとうございます。
いつもお世話になってあります。
はい。誤認識の通り、Noの重複がない場合は何も記入はしないようにしたいです。
教えていただきありがとうございます。
早速試してみます。
@Yoichi さん
すみません、理解不足で申し訳ないのですがコードを見ると「締切日が空欄の場合」に関する記載がないのですが記載されていなくても考慮されている、ということでしょうか?
すみません。抜けていますね。
以下は元のデータにいくつかケースを追加しましたが、期待する結果は下記であっていますでしょうか?
そうであれば以下お試しください
dt.AsEnumerable.GroupBy(Function(r) r("No").ToString).Where(Function(g) g.Count>1).SelectMany(Function(g) g).Where(Function(r) r("状況") IsNot Nothing AndAlso (String.IsNullOrEmpty(r("状況").ToString) OrElse r("状況").ToString="待ち") AndAlso (r("締切日") Is Nothing OrElse String.IsNullOrEmpty(r("締切日").ToString))).ToList.ForEach(Sub(r)
r("結果")="未定"
End Sub
)
Sample20240610-1 (2).zip (17.7 KB)
@Yoichi さん
教えていただきありがとうございます。
実行後に気付いたのですが自分の希望していた処理ではないものを依頼しておりました…大変申し訳ございません…
実際に処理したい希望内容は
①データテーブル内に「「No」が重複していて、「状況」が空欄、または【待ち】が記載されていて締切日が空欄、のデータを上から検索する」
②この条件に合致した「No」でフィルターをかけて、その行に対して「結果」に【未定】を入力する。
という処理を実装したいと考えています。さらに複雑にさせてしまい、大変申し訳ございません。
②に関しましては条件等は関係なく、①で取得した「No」に対して「結果」を更新する、というものになります。
もしよろしければこちらの処理方法も教えていただきたいです。
宜しくお願い致します。
「未定」と記入する条件が少々わかりにくいですが、
「No」でグルーピングした複数行に対して、
1行でも(「状態」が”待ち”または空欄)かつ「締切日」が空欄
の行があれば、グルーピングした行のすべての「結果」欄を「未定」にする
であっていますでしょうか?
@Yoichi さん
ご返信ありがとうございます。
はい。ご認識の通りでございます!
以下いかがでしょうか?
dt.AsEnumerable.GroupBy(Function(r) r("No").ToString).Where(Function(g) g.Count>1 AndAlso g.Where(Function(r) r("状況") IsNot Nothing AndAlso (String.IsNullOrEmpty(r("状況").ToString) OrElse r("状況").ToString="待ち") AndAlso (r("締切日") Is Nothing OrElse String.IsNullOrEmpty(r("締切日").ToString))).Count>0 ).SelectMany(Function(g) g).ToList.ForEach(Sub(r)
r("結果")="未定"
End Sub
)
Sample
Sample20240610-1 (3).zip (17.7 KB)
@Yoichi さん
教えていただきありがとうございます!
無事出力されるのが確認できました!
本当にありがとうございます…
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.