こんにちは!UiPath メンターです。
Excelデータを読み込んでループ処理を実行したら、いきなりこんなエラーが出たことはありませんか?
「えっ?Excelを開いて見たら、ちゃんと『商品名』って列があるよ!?」
そう、人間には見えているのです。
しかし、ロボットの目には「全く別の列名」として映っている可能性があります。
原因の多くは、Excel特有の「結合セル」や「2行ヘッダー(親亀子亀)」、あるいは「開始位置のズレ」です。
ロボットが表をどう認識しているかを知り、正しく導いてあげましょう。
診察1:ロボットには「1行目」がどう見えている?
UiPathの [範囲を読み込み] は、デフォルトでは「指定された範囲の一番上の行」を項目名(ヘッダー)だと思い込みます。
例えば、Excelの1行目に「2024年度 売上管理表」というタイトルがあり、実際の表(項目名)が3行目から始まっている場合。
何も指定せずに読み込むと、ロボットは「2024年度 売上管理表」という名前の列が1つあるだけと勘違いします。
これでは、3行目にある「商品名」列を探そうとしても「そんなものはない」と怒られるわけです。
処方箋A:開始位置をズラしてあげる
表がA1セルから始まっていない場合は、読み込み範囲を明示的に指定します。
手順
- [範囲を読み込み] アクティビティの [範囲] 欄を見ます。
- 空欄(またはシート名のみ)になっている場合、シート全体を読みに行こうとします。
- ここに、実際の表が始まるセルを指定します。
例:ヘッダーが3行目から始まるなら"A3"と入力。
これだけで、ロボットは「ああ、A3から下がデータなんだな」と理解し、A3にある「商品名」を正しくヘッダーとして認識します。
💡 メンターからのアドバイス:Excel内で示す
手入力が不安な場合は、ここでもモダン機能の出番です。
範囲の右にある + > [Excel 内で示す] を使い、実際の表のデータが含まれる範囲(または開始セル)をマウスで選択してしまいましょう。
処方箋B:ヘッダーが2行ある(結合されている)場合
これが一番厄介です。
1行目に「上期」「下期」、2行目にそれぞれ「売上」「利益」「売上」「利益」とあるようなケースです。
ロボットは「複雑な結合ヘッダー」を理解できません。
無理に読み込むと、列名が「売上」「売上_1」のように勝手に変換されたり、エラーになったりします。
解決策:ヘッダーなしで読み込む
こういう時は、あえて「ヘッダーはない(ただのデータだ)」とロボットに嘘をつきます。
- [範囲を読み込み] のプロパティで、[ヘッダーあり (Has Headers)] のチェックを外します。
- 範囲は、データ部分だけでなく項目名の行も含めて指定します。
こうすると、ロボットは列名を勝手に Column0, Column1, Column2… という番号で管理します。
データを処理するときは、CurrentRow("商品名") ではなく、CurrentRow(2) (0から数えて3番目の列)のように番号で指定すれば、どんな複雑な表でも確実にデータが取れます。
処方箋C:余計なスペースに注意
意外と多いのがこれです。
- Excel上の見た目:
商品名 - 実際のデータ:
商品名(後ろに全角スペースが入っている!)
ロボットは生真面目なので、「商品名」と「商品名 」は別の言葉として扱います。
エラーが出たら、Excelのセルの後ろをダブルクリックして、見えないスペースが隠れていないか確認してみてください。
まとめ:ロボットの視線に合わせよう
- 「列が見つかりません」は、読み込み開始位置(範囲)がズレていることが多い。
- 表が途中から始まるなら、“A3” のように開始セルを指定する。
- 複雑な表は [ヘッダーあり] のチェックを外して、列番号(インデックス)で操作するのも手。
⚠️ 注意:シート全体 vs 範囲指定
モダンデザインの [Excel ファイルを使用] で [範囲を読み込み] を使う際、範囲を「空欄」にすると「使用されている範囲すべて」を自動判別します。
しかし、表の遥か下のほう(例:Z1000セル)にゴミデータが入っていると、そこまで巨大な表として読み込んでしまい、メモリ不足になることがあります。
動作が遅いな?と思ったら、Ctrl + End キーでExcelの最終行を確認してみましょう。
次回は最終回、Case 5「デバッグのやり方」。
「なぜか途中で止まるけど、原因が分からない」
そんな時に、ロボットの動きをスローモーションで見たり、変の中身を覗き見たりする「探偵グッズ(デバッグ機能)」の使い方を伝授します!