Excelで任意のセル位置を取得したい

UiPath初心者です。
表1
image

表2
image

Excelファイルで、
表1を元に、表2へ○を入力したいです。
どのようにしたら、〇を付けるべきセル位置が取得できるか教えて頂きたく、よろしくお願いいたします。

こんにちは

名前の重複が無いのであれば、下記のようにDataTable上で処理した方が良いように思えます。

例えば、Dictionary<string,string>型の変数dictを用意しておいて

dict = dt1.AsEnumerable.ToDictionary(Function(r) r("名前").ToString,Function(r) r("日付").ToString)

としておきます。

表2 dt2に対してForEachRowでイテレート

row(dict(row("名前").ToString)) = "〇"

として、最後にdt2を書き戻せばよいかと思います。

1 Like

ダミーの数値列を挿入し、1を設定。
その後ぴPIVOTで処理し、のち、全Row,全Columnに値が入っていれば”○”を再設定する。

とか、どうでしょう?

1 Like

いつもありがとうございます。
早速作り始めたのですが、

こちらの部分でエラーとなりました。
image
名前の重複は確かにあります。
リストとしてみた場合、名前・日付のセットでの重複はありませんが、
名前だけ、日付だけで見た場合、重複があります。

このような場合は使えないのでしょうか。

いつもありがとうございます。
今回はまず、 Yoichi様の方法で試してみようと思います。
実は、元々ある表に対して追記をする形で〇を付けたくて・・なんです。
本当にいつもありがとうございます。

1 Like

こんにちは

名前が重複しているのでしたら、以下のようにする必要があるかと思います。

dict = dt1.AsEnumerable.GroupBy(Function(r) r("名前").ToString).ToDictionary(Function(g) g.Key,Function(g) g.Select(Function(r) r("日付").ToString).ToArray)

dict は Dictionary<string,string[]>

1 Like

ありがとうございます。

こちらの設定がわかりませんでした。
image
こちらにしたところ、エラーとなってしまいました。

こんにちは

右側のStringを選ぶときにArray of [T]を選んで、その中でStringを選択してみてください

2 Likes

ありがとうございます!

1 Like

教えて頂いた通りに配置したのですが、
image
エラーとなりました。

image

どの部分を間違ってしまったのか分かりますでしょうか。

こんにちは

繰り返しのTypeArgumentをobjectからStringに変更してみてください

1 Like

ありがとうございます。
お陰様でこちらのエラーを回避することが出来ました。

次々と申し訳ないのですが、
image

このようなエラーとなりました。

日付の書き方が
Excelをデーターブルにしたものと、
dictにしたものが違うのでは?と思ったのですが、以下の通り同じに見えます。
どこが間違っているのか教えて頂きたくよろしくお願いいたします。

dt1
image

dt2
image

こんにちは

Dictionaryのキーが無いエラーですので、表2にある名前が、表1にすべてあるか確認してください。
無い名前が存在する場合は、条件分岐で、dict.ContainsKey(row(“名前”).ToString)を条件にして、
その中に内側の繰り返しを配置してみてください。

1 Like

ありがとうございます。

お陰様でエラーが消えました。

本当に次々と申し訳ございません。
今度はこのようになりました。

image
日付が一致しないと言う意味でしょうか。
このような場合も条件分岐出来ますでしょうか・・・。
出来るならば、日付が一致しない(元データのミスなのでメール等で連絡)
名前・日付一致ならば、〇を入力。

ご面倒をお掛けし、申し訳ございません。

こんにちは

エラーの詳細内容共有可能でしょうか?デバッグ実行でエラーで停止した際に、左上のローカルパネルで$ExceptionDetailsの内容確認になります。

1 Like

ありがとうございます。
エラー詳細の場所まで教えて頂き本当にありがとうございます。

日付が一致しないようです。。

こんにちは

まず表2に当該日付(12/7)はありますでしょうか?

あるようでしたら、範囲読み込みで読み込んだ後に

dt2.Columns(1).ColumnName

をWriteLine等で出力してみて中身を確認ください。
(1の部分は実際に12/7がある列番号(0ベースのインデックス)にしてください))

1 Like

ありがとうございます。
確認したところ、12/7はありませんでした。

そうであれば

内側の繰り返しの中で条件分岐で、以下を条件として、Trueなら書き込み。Falseならエラー処理(あるいは後でそれを行うためのフラグやエラーメッセージの設定等)を行ってみてください。

dt.Columns.Contains(item)

1 Like

ありがとうございます。


処理はこの並べ方であっていますでしょうか。

このこのようなエラーが出てしまいました。