HANAKO
(HANAKO)
1
いつも大変お世話になっております。
■実現したいこと2つ
・データ①のDeliveryDateがデータ②の祝日と同じ値がないか条件分岐をしたいです。同じだった場合+1dayをして値が平日(月~金)になるまで繰り返す
例 データ①のBB-101のDeliveryDateがデータ②のF4になるので+1dayをする
・土曜日か日曜日の場合は+2dayもしくは+1dayをして平日に移動したい。
例 データ①のAA-101の曜日が日曜日になるので+1dayをしたい。
■背景
もともとエクセルのWorkday関数でしていた処理を実現したいです。
■途中までできたこと
1.データ②をデータテーブルにdtHolidayList作成
2.代入
左辺 dict
右辺 dtHolidayList.AsEnumerable.ToDictionary(Function(r) r(“日付”).ToString,Function(r) r(“曜日”).ToString)
3.繰り返し(各行) dtデータ①
4.代入
左辺 row(“DeliveryDate”) =
右辺 DateTime.Parse(row(“DeliveryDate”).ToString).CompareTo(Int32.Parse(dict(row(“日付”).ToString))).ToString(“yyyy/MM/dd”)
★下記エラーが出てつんでいます。。。
4. エラー 代入: 列 ‘日付’ はテーブル DataTable に属していません。
こちらでご相談させていただき、解決したのですが
同じようにやってみたら
同じようにできない状況です。。。
今回は加算ではなく比較なのでCompareToを使っています。
===
できそうでできなくて、、、
アドバイスいただけますでしょうか。
もっと簡単な方法もあれば、ぜひ教えていただきたく。。。m(_ _)m
Yoichi
(Yoichi)
2
こんにちは
対象となるDataTableに“日付”という名前の列がないからです。”祝日”ではないでしょうか?
1 Like
HANAKO
(HANAKO)
3
Yoichiさん
おはようございます!昨日から続きありがとうございます。
こちらサンプルが祝日と記載していますが、
本番では日付としていて、項目名も間違っていないです。
記載したエラーがここでは下記のように書くべきでした。
「エラー 代入: 列 ‘祝日’ はテーブル DataTable に属していません。」
失礼しました。
Yoichi
(Yoichi)
4
こんにちは
上記勘案しますと、エラーの直接の原因は、データ1の方に祝日という名前の列がないからかと思います。
今回実装したい内容ですが、ループと何らかの条件分岐が必要になるかと思います。
データ2の方ですが、土日もリストされる形になりますでしょうか?あるいはそれ以外の祝日等
だけになりますでしょうか?
いずれにしても、仮に評価する日が祝日に該当した場合、翌日が候補になりますが、
その日も祝日や土日の可能性もありますので、平日にたどり着くまで1日加算する
繰り返しが必要になります。
1 Like
HANAKO
(HANAKO)
5
Yoichiさん
ご返信ありがとうございます。
確認してみました。
データ②をデータテーブルでdtHolidayListを作成しているのでExcelに書き出してみました。写真の通りで、取得はできているのかなと思いますが、ほかに考えられる原因はありますでしょうか。
データ②は土日のリストは作成しないです。
それ以外の祝日だけで構成を考えています。
そこに関してはデータ②で振り替え日として登録していますので、対応可能かなと思います。上記写真のC6のように登録しています。
Yoichi
(Yoichi)
6
こんにちは
基本的に曜日は日付で一意に決定されるので、日付だけのハンドリングにして、
必要時に曜日を算定する方がシンプルかと思います。
そのためデータ2に関してはDictionaryにするのではなく、対象日付を
リストあるいは配列すれば十分かと思います。
データ1の各行の日付を評価して、「土曜日」または「日曜日」または「上記リスト中に日付がある」の
いずれかに該当すれば、1日加算して、再度評価します。
上記に該当しない日が平日ですので、それを書き戻します。
これらをまとめると、例えば以下の様に実装できると思います。
2 Likes
HANAKO
(HANAKO)
7
Yoichiさん
ご返信ありがとうございます。
うん、確かに!お話している中で私もそう感じました。
deliveryDate.DayOfWeek = DayOfWeek.Saturday OrElse deliveryDate.DayOfWeek = DayOfWeek.Sunday OrElse listHolidays.Contains(deliveryDate)
ここのDayOfWeekが曜日ということですね。なるほどこういう書き方するんですね、勉強になります。
やってみて一発で理想の形になりました。本当に助かりました。
ありがとうございます!
あと、もし可能であれば教えていただきたいのですが、今回のような書き方.NETの書き方をどこで調べたらわかるのでしょうか。MSのドキュメントは見てるのですが、素人にはよくわからなくて。
Yoichiさんのように書けるようになりたいのですが、経験も浅いので参考にされてるサイト、書籍などあれば教えていただきたいです。
よろしくお願いいたします。
Yoichi
(Yoichi)
8
こんにちは
個々のクラスやメソッド(関数)の使い方はMicrosoftのサイト、あるいは
検索エンジンで言語名+クラスまたはメソッド名あるいはキーワードで検索すると、
たくさん出てくると思うので、そちらを参照すれば良いかと思います。
例えば「vb.net 曜日」で検索すると DayOfWeek に容易にたどり着けると思います。
ただアルゴリズムの組み方となると、インターネット上にピンポイントで同様の
実装がある場合は少ないので、「場数を踏む」「他の方の実装を見る」「書いた
コードをレビューしてもらう」等で経験値を上げながら、検索のキーワードの質や
応用できる力を上げていく必要があるかと思います。
あまり回答になっていませんが、一個人の意見として上記になります。
1 Like
HANAKO
(HANAKO)
9
Yoichiさん
ありがとうございます!
少し苦手意識がありましたが、今回のような実装がすごく容易にできることを体感したので、次回から積極的に調べてみます。
なるほど、そういった意味ではこのUiPathのフォーラムはありがたい場ですね。
私もほかの方の実装や質問を積極的に見ていこうと思います。(回答はできないですが)
本当何から何までご相談いただき、ありがとうございました!
またよろしくお願いしますm(_ _)m
shinji
(みやぎ)
10
さすがYoichiさんですね。
ある意味「翌営業日の計算」の話だと思うのですが(今回のケースは「昨日から見た翌営業日の算出」)、過去にこんなのを作成していました。
⇒ 「他の方の実装を見る」の一例になれば幸いです。
1 Like
HANAKO
(HANAKO)
11
みやぎさん
ありがとうございます!
マーケットプレイスで作成されていたんですね。
サンプルがあると自分で試せるのでとてもありがたいです。
ダウンロードしてみましたので、触ってみます!
system
(system)
Closed
12
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.