# 番号からExcelの行範囲を特定する方法

**URL:** <https://forum.uipath.com/t/excel/311184>\
**Category:** フォーラム\
**Tags:** datatable, excel, activities\
**Created:** [April 29, 2021, 5:51am UTC](https://forum.uipath.com/t/excel/311184 "2021-04-29T05:51:19Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![pthfs1](https://sea2.discourse-cdn.com/uipath/user_avatar/forum.uipath.com/pthfs1/32/176959_2.png) [@pthfs1](https://forum.uipath.com/u/pthfs1)\
**Post date:** [April 29, 2021, 5:51am UTC](https://forum.uipath.com/t/excel/311184/1 "2021-04-29T05:51:20Z")

</div>

固有の各番号から行番号を指定してデータテーブルを処理する方法について

以下のようなエクセルのデータファイルから特定の番号から特定の番号までの間の行を処理したいと思っています（実際は何万行もあります）  
。

しかし、LookUp Rangeアクティビティでは部分一致しか検索できないため、例えば番号「18」の行を特定したいのに「118」の行を見つけてしまうという不具合が起こる可能性があります。  
 ![screenshot_2021-04-29](https://global.discourse-cdn.com/uipath/original/3X/8/c/8cf7d31a20a5476f94d22ac298f532f3d8641a45.png)

実際の処理としては添付画像のようなデータのうち、特定の番号から特定の番号までの行をdatatableとして取得し、行ごと（商品ごと）に処理をした後に売上と利益のところに「Write Cell」アクティビティを使用してデータを書き込みたいと思っています。  
速度向上のためセル書き込みは行ごとの繰り返しが完全に終わった後にExcelを開いて一気にまとめて行います。

また、商品が何万個もあるためできるだけ速く処理できる方法を探しています。  
最初の特定行から特定行までテーブルに取り込む方法について今考えています（上記の通り範囲内で検索 (LookUp Range)アクティビティでは部分一致のため正確に行えません）。

未熟で情けないのですがこの点についてご相談にのっていただけないでしょうか。

---

<div class="post-metadata">

**Author:** ![Yoichi](https://sea2.discourse-cdn.com/uipath/user_avatar/forum.uipath.com/yoichi/32/523754_2.png) [@Yoichi](https://forum.uipath.com/u/Yoichi)\
**Post date:** [April 29, 2021, 12:19pm UTC](https://forum.uipath.com/t/excel/311184/3 "2021-04-29T12:19:43Z")

</div>

こんにちは

処理速度を重視するなら、書き込むセルの数にもよりますが、WriteCellではなく、WriteRangeで  
一括で書き込んだほうが速いケースが多いかと思います。  
またForEachRow等のアクティビティでのループは結構遅いので、LINQやInvoke Codeを使うと  
高速になるケースもあります。

あと要件がわかりずらいのですが、番号（列）はユニークではなく重複するデータがあるという  
ことでしょうか？例では番号列に「3」が２つあるので、かならず同じ番号が列内に２つあり、  
一つの番号を指定するということでしょうか？このあたり具体例を示していただけると  
コメントしやすくなると思います。

---

<div class="post-metadata">

**Author:** ![pthfs1](https://sea2.discourse-cdn.com/uipath/user_avatar/forum.uipath.com/pthfs1/32/176959_2.png) [@pthfs1](https://forum.uipath.com/u/pthfs1)\
**Post date:** [April 29, 2021, 1:45pm UTC](https://forum.uipath.com/t/excel/311184/4 "2021-04-29T13:45:27Z")

</div>

ご助言ありがとうございます。  
失礼しました。  
番号は重複しません（3が2つあるのは完全にミスです。混乱させてしまい申し訳ないです）。

WriteRange、使用した経験はあるのですが完全に見落としていました。  
その場合、現在売上と利益を連想配列要素（キーが番号で値が二次元配列(array(1)です）で取得しているので、売上と利益をdatatableで持つように変更する必要がありますが、WriteRangeの方が一発書き込みなので速いですね

もとの質問点なのですが、特定行を特定する方法はないでしょうか。  
今考えているのは「データテーブルを検索」アクティビティで行番号も特定できるのか実際に検証してみようと思っています。

---

<div class="post-metadata">

**Author:** ![Yoichi](https://sea2.discourse-cdn.com/uipath/user_avatar/forum.uipath.com/yoichi/32/523754_2.png) [@Yoichi](https://forum.uipath.com/u/Yoichi)\
**Post date:** [April 29, 2021, 2:39pm UTC](https://forum.uipath.com/t/excel/311184/5 "2021-04-29T14:39:30Z")

</div>

こんにちは

> [@pthfs1](#):
>
> 今考えているのは「データテーブルを検索」アクティビティで行番号も特定できるのか実際に検証してみようと思っています。

まず対象全体をDataTableと取得して、検索対象のデータがある行番号を探すことになると思います。  
その方法の一つとして、「データテーブルを検索」アクティビティを利用する方法も「あり」と思います。

---

<div class="post-metadata">

**Author:** ![pthfs1](https://sea2.discourse-cdn.com/uipath/user_avatar/forum.uipath.com/pthfs1/32/176959_2.png) [@pthfs1](https://forum.uipath.com/u/pthfs1)\
**Post date:** [April 29, 2021, 2:50pm UTC](https://forum.uipath.com/t/excel/311184/6 "2021-04-29T14:50:05Z")

</div>

ありがとうございます。  
最初はいったんdatatableとして取り込んでから、「データテーブルを検索」でいけるのですね。  
そちらなら狂いなく指定した番号の行を取り出せそうです。

完全に見落としてましたが、調べたらLINQ、invoke codeとは、C#、.net（関係のUiPathの機能？）のことでしょうか？  
私はそれらの言語をほぼ全く経験がないですが、調べながら実装してみるのもありかもしれません  
（ただ学習コストを考えると今回は時間的に厳しいかもしれません）

---

<div class="post-metadata">

**Author:** ![Yoichi](https://sea2.discourse-cdn.com/uipath/user_avatar/forum.uipath.com/yoichi/32/523754_2.png) [@Yoichi](https://forum.uipath.com/u/Yoichi)\
**Post date:** [April 29, 2021, 11:01pm UTC](https://forum.uipath.com/t/excel/311184/7 "2021-04-29T23:01:03Z")

</div>

こんにちは

> 完全に見落としてましたが、調べたらLINQ、invoke codeとは、C#、.net（関係のUiPathの機能？）のことでしょうか？

Invoke [Codeはアクティビティ内でVb.net](http://xn--CodeVb-zc4e9b8zkaa6l9lb8qw462c.net) またはC#のコードを記述・実行できるアクティビティです。  
LINQは以下参照ください。

> **[統合言語クエリ](https://ja.wikipedia.org/wiki/%E7%B5%B1%E5%90%88%E8%A8%80%E8%AA%9E%E3%82%AF%E3%82%A8%E3%83%AA)**
>
> 統合言語クエリ (Language INtegrated Query; LINQ, リンクと発音する) とは、.NET Framework 3.5において、様々な種類のデータ集合に対して標準化された方法でデータを問い合わせること（クエリ）を可能にするために、言語に統合された機能のことである。開発ツールはVisual Studio 2008から対応している。
> 統合言語問合せという表記も見られる:43。
> C#による例を示す。このコードでは、fruitsの中から"m"で始まるものを取り出し、それをretに格納し、それをforeach文で順に出力している（実際にはretは遅延評価される）。
> LINQに対応する言語は、LINQを自然に導入するための新しい言語仕様が併せて追加されている。代表的な例を以下に示す。

これらを使わずとも、アクティビティだけでも仕様通りに実装できると思いますが  
パフォーマンスの視点が入ると、状況によっては必要なケースが出てきます。
