【UiPath】カレンダーの操作テクニック

# はじめに

- 本記事では、よくあるWEBのカレンダーの操作テクニックを紹介します。
- 操作説明は UiPath (produced with UiPath Friends) Advent Calendar 2023 をもちいておこないます。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 23.4 バージョンのもので構成しています。

# カレンダーの日付クリックで困ったことありませんか？

***日付固定（セレクター固定）なら自動化できるが、任意日付のクリックだと月や曜日でクリックするマスが変わるから自動化が難しい。。。***
といったお悩みをお持ちの方は是非最後までお読みください！👓

よくみかけるWEBのカレンダーの多くは次の様なセレクターになっています。

![カレンダーの任意セルクリック.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/d697dbd9-fdb9-7c92-e0c7-274813cc390b.jpeg)

::: note
webctrl の属性情報に ***『列番号』*** と ***『行番号』*** を指定する
（参考画像のケースは日付欄と内容欄が分かれているようで、内容欄の idx タグは値が2になります。）
:::

セレクターの属性値を変数にしておけば任意日付のクリックができます↓↓

![カレンダーの任意セルクリック4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/99220395-a100-f32a-befa-0a8d59b19f55.jpeg)

ここで問題になるのが ***『列番号』*** と ***『行番号』*** の求め方です。
日付毎の 『列番号』と『行番号』の組み合わせを設定ファイルなどに持つことでも実現できますが、それだと面倒ですよね...
本記事では、『列番号』と『行番号』をVBコードで計算する、シンプルなワークフローの実装方法をご紹介します。

## 『列番号』と『行番号』の計算方法

「コードを呼び出し」アクティビティを配置し、引数を定義します。
入力引数：指定日　（日付型）
出力引数：指定月の第何週目か　（整数型）

![カレンダーの任意セルクリック6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/ba52cfe5-1236-d32d-3fe3-9e5ed1af5193.jpeg)
![カレンダーの任意セルクリック7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/f5b1173a-4440-aafd-85e3-69023e5c0c77.jpeg)

次のコードを登録しましょう
```
' カレンダーオブジェクトを作成
Dim カレンダー = New System.Globalization.GregorianCalendar()
' 指定した日付がその年の第何週目かを計算
Dim 指定日が第何週目か = カレンダー.GetWeekOfYear(指定日, Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday)
' 指定した月の1日を設定
Dim 指定月の1日 = New DateTime(指定日.Year, 指定日.Month, 1)
' 指定した月の1日がその年の第何週目かを計算
Dim 指定月の1日が第何週目か = カレンダー.GetWeekOfYear(指定月の1日, Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday)
' 指定した日付がその月の第何週目かを計算
指定月の第何週目か =  指定日が第何週目か - 指定月の1日が第何週目か + 1	
```
![カレンダーの任意セルクリック8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/7bd6bf42-da80-7615-94ef-718469c34338.jpeg)

列番号はDayOfWeek関数の戻り値（0～6）に1をプラス（Qiita の Advent Calendar は月曜日が1で日曜日が7のため）
```
DateTime.Parse(指定日).DayOfWeek + 1
```
行番号は曜日行が1の様なので、計算結果（指定月の第何週目か）に1をプラス

## クリック操作を安定化させるためのプロパティチューニング

### 厳密セレクターを利用する

WEBの自動化においては、既定では「あいまいセレクター」と「画像」がターゲットメソッドに指定されますが、今回は属性情報に列と行番号の情報を持つ「厳密セレクター」を指定します。

![カレンダーの任意セルクリック3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/2d074d6b-728b-1cb2-1156-9044b1da2168.jpeg)

### セレクターを修正する

Qiita の Advent Calendar は内容欄が必ず idx の値が2のため修正不要ですが、一般的には idx タグの値はアスタリスクに変更しておく方が無難です。
なお、Qiita の Advent Calendar はアスタリスクに変更することで ***日付欄＋内容欄*** がクリック可能でした。

![セル説明.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/5ebe1d22-b4ec-6f86-79a8-968cc577e348.jpeg)

### クリック位置はオフセットを調整

![カレンダーの任意セルクリック5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/3a61d02f-f98f-6af0-080b-fe4127f0ed5e.jpeg)

カレンダーのマスをクリックできるつくりであればよいのですが、マス内の文字をクリックしないと詳細を開けない場合、クリック位置のチューニングが必要です。

::: note
クリック位置のオフセットは、プロパティでの pixel 指定が可能です。
画面上でターゲットを指定する際には、ターゲットのセレクタの中央ら辺にある丸ポチを動かすことでも指定できます。
![カレンダーの任意セルクリック9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/e813be68-180a-738a-8cb5-6a92977d2797.jpeg)
:::

# さいごに

[UiPath (produced with UiPath Friends) Advent Calendar 2023 ](https://qiita.com/advent-calendar/2023/uipath)
毎日 UiPath Friends のメンバーの誰かが記事を投稿しています！！
気になるトピックをみた際は是非是非読んでみてくださいヾ(＠⌒ー⌒＠)ノ

[@saosao885UiPath StudioでZoomの会議を予約してみた](qiita.com/saosao885/items/9f7f469445165e3553a1)
[@ki0307結局UiPath多めの2023年振り返りと最近よく思うこと](note.com/ki0307/n/ned690b41786e)
[@thxUVER2012対応方法がわからなくて、UiPath社に問い合わせをした件](qiita.com/thxUVER2012)
[@thxUVER2012Excelに書き込まなくなったときの対応方法](qiita.com/thxUVER2012)
[@thxUVER2012予期しない終了コードでジョブが停止されました: 0xE0434352の対応方法](qiita.com/thxUVER2012)
[@chuki082おもしろいゾ、UiPath Autopilot for Studio （コードネーム "Wingman"！）](note.com/chuki082/n/n3877cfd26f36)
[@thxUVER2012市民開発者を育てる上で気を付けないといけないこと](qiita.com/thxUVER2012)
[@shuy【UiPath】Communications Miningのモデルトレーニング方法](qiita.com/shuy/items/521b9f7f17798792fef8)
[@hidechaUiPathドキュメントポータルの内容をチャットで問い合わせるシステムを作る](qiita.com/hidecha/items/5ba2ad685748d9ba7418)
[@kokoderosas個々の強みを発揮できる組織にいる幸せ UiPath](note.com/kokoderosas/n/nc8fc4cd90c87)
[@steve_tanaka2023年は広がりの一年でした](note.com/steve_tanaka/n/n5066dd50620c)
[@nanohana_rpaFOWARD VIに参加してみた](note.com/ss_uipath/n/ne87deac1712b)
[@choineta仕事効率化が三倍?! コピペが断然楽になるClipboard AIを知っていますか？](goodsystem.jp/rpa/20231206-clipboard-ai.html)
[@sebastian510RPAは、やめてない](note.com/sebastian510/n/n3824952ff43e)
[@hidecha【UiPath】APIトリガーのメリットと利用手順](qiita.com/hidecha/items/5b0733639dcd1420531a)
[@MasahiroHarada1105【UiPath】Teams に画像付きメッセージを送る その１](qiita.com/MasahiroHarada1105/items/bc87dabc7e09b19c6442)