データテーブル内の項目比較し、列追加の上、結果を書き込む

みなさんお疲れさまです
データテーブルにおいて、2項目の数値を比較した結果を、別項目(1列追加)に書き込みたいです。
どのような実装が考えられますでしょうか?

まず、どう考えましたか?

そうですね。。。
データテーブルから1行づつ読み込み、項目を比較、結果を格納
まあこれならばいけそうですけれど、もう少し別の効率的な方法が無いかなと。

私もそのロジックでした(^・^)

他の方から、もっとCoolな方法が回答されるかもしれませんね。

以下のような処理を実装しましたが、時間がかかりすぎます。。。
1秒弱で1レコード。。。3000レコードだと50分近くかかってしまいます。
よりスピードが出る方法ありますでしょうか?


こんにちは。

3000レコードだと50分近くかかってしまいます

処理速度を早くしたいなら、データテーブルに3000件比較した結果を格納して
全件(3000件なら3000件)終了後にExcelに書きこむと早くなると思います。

「セルに書き込み」の部分を row(6) = “Yes” にするのでダメですか?
同じシート操作しているように見えるので……。

ytakayamaさんがおっしゃる通り、ほかにExcelファイルを操作されていないのでしたら自動保存をオフにしてループ終了後保存してやるとだいぶ高速になると存じます。

@_Chuki
セルに書き込みの箇所を row(6) = “Yes” というのが、よくわかっておりません
“G” + wkcellとなっている箇所をrow(6)としましたが、エラーとなってしまいました

お疲れ様です
直接データテーブルに書きこもうと、アサインアクティビティで、row(6)と指定しましたが、row(6)が見つかりませんとなりました。
そのため、データテーブル構築で6項目定義し、再度試しましたが、エラーとなります。

row(6)は0から数えて7番目の列です。
最初が何列あったデータなのかわからないのですが、もともとF列までしかなかったデータテーブルなのでしたら、「データ列を追加」アクティビティでG列をDataTableに追加してください。

こんにちは。

@_Chuki さんもおっしゃっている通り、おそらく元々のデータテーブルに存在しないためエラーとなっていると思われます。比較した結果(Yes)を入れれる列を追加しましょう。

可能であれば、エラーが出た際はどんなエラーがでたかスクリーンショット等で示して頂けると、対応策を出しやすいと思います。

1 Like

お疲れ様です。
傍から見ていてここでつまづいているのかな?と思う点がありましたので補足してみます。
111161さんがやりたいことは
X列あるデータテーブルの中の2項目を比較しX+1列目に結果を記入したい
と読み取っていますが、その場合、結果を記入するための列を、結果を書き込む前にあらかじめDTに用意してやる必要があります。
(方法はEXCEL読み込み時に1列多く読み込む、データ列を追加アクティビティetc色々あります)
列を用意しておけば先にあったアドバイス通りrow(X+1)に結果を書き込むことが可能だと思います。

1 Like

こんにちは、

for each rowの内で数値を比較しずに一回条件としてフィルターすればスピードがアップすると思います。
dtResult = (From p in dtYourData.Select() where(p.Item("Number1").Equals(p.Item("Number2"))) Select p).ToArray.CopyToDataTable()
dtResult で別列に書き込みの時間が掛からないと思います。

1 Like

1列多く読み込む!は今度やってみたいと思います
ありがとうございます

自動保存オフで、かなり早くなりました。
さらなる高速化は、今後検討したいと思います。

1 Like

ありがとうございます
1列追加する方法が、まだ成功していませんが、エクセルを1列多く読み込み、計算結果をここに格納、最後にエクセルに出力で、いつかやってみようと思います。

1 Like