データテーブルの列同士の演算について

お世話になります。何とか見よう見まねで勉強中の身であります。表題の件でご教示ください。
No,商品コード,発注日,付箋コメント,予約日
8,4987562418800,2020-12-26,2,

この様なデータがある場合にに「予約日の列」に「発注日」と「付箋コメント」のデータを加算して値を格納したいと考えています。
この場合、期待する値は2020-12-28です。つまり2020-12-26の2日後のデータを求めたいです。

「予約日」はデータ列の追加により作成したカラムです。
このカラムのプロパティ規定値に式を設定するのでしょうか?

エクセルを使用せずに実装したいと考えていますが、スキル等を考慮してアドバイスや何か考え方のヒント等ありましたら何卒ご教示ください。

繰り返し(各行)で、データテーブル中の全行を対象とします。

代入アクティビティ
左辺:Row.Item(“予約日”)
右辺:DateTime.Parse(Row.Item(“発注日”).ToString).AddDays(CInt(Row.Item(“付箋コメント”).ToString)).ToString(“yyyy-MM-dd”)

説明しますと、DateTime.Parseで発注日をDateTime型に変換します(変換結果はコンピュータのメモリに作られます)。そのDateTime型に、付箋コメントをCINTにて数値に変換した値を、DateTime型のメソッドのAddDaysで日の加算をしてやります。その結果を、ToStringで、yyyy-MM-ddの文字列にしたものを、左辺に代入してあげます

早々のご教示ありがとうございます。
現在出先ですので、帰宅後にお教えいただいたことを実践してみます。
重ね重ねありがとうございます。

たびたびお世話になります。

メッセージ: Conversion from string “” to type ‘Integer’ is not valid.
が発生します。
先ほど提示したデータ例ですが「付箋コメント」には空白データが含まれるために発生するエラーと推察しますが合っていますでしょうか?

後だしの様で申し訳ありませんが、もう暫くお付き合いいただけませんでしょうか?

1 Like

ですね。

それでしたら、
AddDays(CInt(Row.Item(“付箋コメント”).ToString))
ではなく、
AddDays(CInt(“0” & Row.Item(“付箋コメント”).ToString))
として、ゼロを前置してあげてはいかがでしょう?

動作確認し、望みの結果を得ることができました。

ありがとうございました。

たびたび申し訳ありません。
自己学習によりRow.Item(“付箋コメント”)がnull や数値以外で判断するにはどうしたら良いか躓いています。
例えば数値チェックの場合はIsNumericを使用すると想定します。イメージ的には↓

if isnumeric(Row.Item(“付箋コメント”).ToString)) = true then

DateTime.Parse(Row.Item(“発注日”).ToString).AddDays(CInt(“0” & Row.Item(“付箋コメント”).ToString)).ToString(“yyyy-MM-dd”)
'↑教示頂いた式
End If

のようなイメージなのですが
End If" の処理中にコンパイル エラーが発生しました。
‘(’ が必要です。

とエラーが発生します。
そもそも「右辺」では無くどこか別の場所に書く必要があるのでしょうか?

条件分岐アクティビティをお使いですか?

と、numericを判定しているのでしたら、"0"を連結しなくても大丈夫ですね

条件分岐アクティビティで実装できました。
ありがとうございました。

1 Like

おぉ!よかったです!

よろしければ解決策にチェックをお願いします。

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