0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UiPath開発備忘録_列名の有無を確認していますか?

Last updated at Posted at 2025-07-03

はじめに

このブログはUiPathブログ発信チャレンジサマー2025の3日目の記事です。

他にも興味深い記事が続々登場予定です!ぜひ共有できそうな内容は記事にしてみませんか?
書いてみるといいことがあるかも...しれません。:relaxed:ホッコリ

開発を続けていくと

開発をかれこれ7年以上(※記事執筆当時)やっていますが、やはりまだまだUiPathも奥深いところが多くて...
最近になって知ってよかったものがあるので備忘録がてらこの記事にアウトプットを兼ねて書いてみようと思います。

列名の有無確認作業ってやっていますか?

皆さんはExcelを使用して読み込みして、Datatableで繰り返し処理を行う機会が多いかもしれませんが、使用する列名の有無についてチェックしていますか?

そもそもですが皆さんはFor Each Rowで繰り返し処理を実行するとき、値の特定や変数・引数への格納に列名何かの値を設定することも多いかと思います。

①列名で設定する(例:CurrentRow("都道府県").ToString)
②列位置設定する(例:CurrentRow(0).ToString)
③上記以外の方法をやっているので特に気にしたことなどない

自分は①でやることが多いんですが、これにはある問題があります。
それは「使用する列名がテーブルになかったらどうするん?」という点です。

いや、Excelファイル読み込みの時点でわかるやん!って思うかもですがそれなら繰り返し処理の前に確認したいですよね...(やりたくないならやらないという選択肢もあります)

列名チェックの方法で自分が考えたのは以下の通りです。
①Excelの中身を読み込みして、列名に重複がないか確認する
②使用したい列の列名を特定して、範囲を設定
③列名を繰り返し処理で確認して、次へ進む

この作業は、初期処理にやっておくといいですよね。

では今回は
・列名設定あり
・列名を設定ファイルに書いておく

にしてみましょうか。

実装してみよう

今回は、以下の方法を使っていきます。

DataTable型変数.Columns (列番号).ColumnName

上記は対象の列番号にある列名を取得するものですが、これを使って列名の有無を確認していきます。

設定ファイル

設定ファイルの中身がこちら
image.png
列名はColumn1~Column4のKey値を取得するようにします。
なおシート名は「Sheet1」とします。

今回の対象ファイル

以下、AddressFileというExcelファイルに「都道府県」、「区市町村」、「区名」、「町名」という表があります。
image.png
黄色の列名がConfigファイルのColumn1~Column4にあるか確認してみましょう。
image.png
なおシート名は「Sheet1」とします。

実装してみた

実装してみると、以下のように仕上がりました。(簡素化のためTryCatchはいったん省いています)
image.png

①設定ファイル読み込み

image.png
ここでは読み込んだ値の辞書化を行います。
KeyとValueをつないで、Key列を指定すればValueの値が出るようにします。

②AddressFileを読込

image.png

③列名をリスト化

では、列名を確認していきましょう。
確認したい列名をList型変数へ格納していきます。(ArrayでもOKです)
image.png

④照合結果格納テーブル作成

では、処理結果格納用のテーブルも作っていきましょう(これは後程利用します)。
「列名」と「照合結果」としましょう。
image.png

image.png

⑤列名照合

For Each(コレクション)のほうへリスト型変数lisPrefColumn*を設定し繰り返し処理を行います。
(以下のような感じです)
条件分岐で照合出来たらTrueに進んで結果を格納し、Continue(次の列名)の確認作業へ移行します。そうでなければ確認を続けます。
もし見つからないままの場合照合結果はNGとし、内容を結果格納用テーブルに格納します。
image.png

*LisPrefColumnの変数はList(String)で設定しています。

⑥"NG"だった列名の行数をカウントして結果抽出

これで繰り返し処理を終えた後、Filter Datatableアクティビティで"NG"になった分を抽出し、条件分岐で"照合結果が"NG"のテーブル行数=0"であればOK、そうでなければNGとして終了なりの処理を行います。
image.png
image.png

【補足】現在のインデックスって?

リストの初期値が"0"なので、0開始になります。
image.png
For Each内だと、こんな感じになります。
image.png

結果は以下になります。
image.png

※条件分岐ですが、以下のパターンでもOKです。(式の書き方、TrueとFalse分岐処理があっているかは各自注意してください)
・"照合結果が"NG"のテーブル行数が1以上"はNG、0の場合はOK
・"照合結果が"OK"のテーブル行数がList型変数lisPrefColumnの個数と同一
...など

実際に列名が違うとどうなりますか

列名が「区市町村」→「市町村」になったらどうなるか見てみましょう。
image.png

結果は...
image.png
相違についてもきちんと確認できましたね。

Configの列名をチェンジしてみると...

「区市町村」と「町名」の列を変更してみるとどうなるでしょうか。
image.png

image.png
相違になったか...

次回は列位置に関係なく取得できるか検討してみます。

まとめ

列名を使うか、列番号で特定させるかは開発規約や見易さなどによって変わってくると思いますが自分はこの技?を知ることができたので良き学びになったと思っています。
今回の件は、Community Forumでのトピックをもとにやってみました。

Community Forumには開発のヒントが転がっているので参考にしてみましょう!
日本語カテゴリは以下サイトより☟

最後までお読みいただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?