Excel→CSV

excel
studio

#1

Excelファイル内の文字(項目名)の隣にある値を取得し、取得した値をCSVファイルに転記するプログラムを作成したいのですが、プログラムの作成方法についてアドバイスをいただけますでしょうか。
Excelから取得したい値は必ずしも一定のセルに存在するわけでなく、ファイルによって変動します。


#2

こんにちは。

まず状況を確認させてください。
「項目名」というのはA列にあると考えてよろしいでしょうか?
それから「ある値」というのはB列以降に記述されていて、行によってC列まであったりF列まであったり、ということでしょうか?

詳しい検証は行っていませんが、下記方法で実現できないでしょうか?
(1) Desctop RecorderのClickでA列を選択
(2) Send Hotkey で、Ctrl + 「-」→A列が削除される
(3) Send Hotkey で、Alt + 「f」
(4) Send Hotkey で、「a」
(5) Send Hotkey で、「b」→名前を付けて保存ダイアログが表示される。
(6) Typeでファイル名入力、Click-Select Itemで「csv」を選択
(7) Send Hotkey で、「enter」


#3

こんにちは。
ご返信ありがとうございます。
項目名はC列にあります。
取得したい値ですが、下記のような表がExcelにある場合、項目名と同じ行数の3列隣(F列)に値があるイメージです。

(B列)(C列)(D列)(E列)(F列)
基本料金 月額 ×× ×× ××円
電力量料金 内訳1 ×× ×× ××円
電力量料金 内訳2 ×× ×× ××円
電力量料金 内訳2 ×× ×× ××円

ただ、こちらの表はExcel上のどの行にあるか一定ではありません。
また、Excelシートによって、内訳1~3の順番も異なります。

Excelシートを1行目から順番に読んでいき、キーワード「月額」や「内訳」があればその3列隣の値を取得する、というようプログラムを組みたいと考えているのですが、いかがでしょうか。


#4

なるほど難しいですね。

シートによって表示位置が異なるならば、私の考えでは値を探すための
ループ処理が必要になると思います。

項目名がC列、値がF列で決まっているのであれば、1行目から順に
「月額」「内訳1」「内訳2」などの値を探していき、見つかったらその行の
F列の値をdataTableに格納すればいいと思います。後はwrite csvする
だけです。

ループの終了条件には気をつける必要があります。もし、全てのシートが
100行目までに収まっていることが明らかならば、100回ループを回せば
良いです。もしそのように行数で決まらない場合は、求める値が見つかる都度
フラグを立てていき、判定していく必要があります。

UiPathが適している業務条件の一つとして「データが書式化されている」
という事が挙げられると思います。シート毎にフォーマットがバラバラな
データは、UiPathで処理するには不向きのようですね。


#5

こちらのExcelシートですが、AcrobatでPDF→Excelに変換した関係からか、値部分の列・行がファイルによって異なります(項目名はC列で固定されています)。
説明が不足しており申し訳ございません。

項目名はC列で決まっているので、まずは1行目から順に「月額」「内訳1」「内訳2」などの値を探していき、見つかったらその項目名の3列隣の値を取得する、ということはできますでしょうか(項目名の3列隣に値があることは一定です)。


#6

申し訳ありませんが私もUiPathは始めたばかりで、アドバイスは差し上げられますが、できるか否かは
お答えできません。

UiPatuで扱うには適当でない案件だと思います。
VBやC#などの正式な言語で開発された方が良いと思います。


#7

excelデータのA列がブランクであるなら、割と簡単にできます。
想定されているのは、下記のような抽出で良いですか?


※添付画像ではダミーデータ入れていますが、行がブランクでも問題なく取得可能です

1.Build data tableで出力先のデータテーブル(変数DT2)を用意
2.read RangeでExcelの全セル読込 →(変数DT)に格納
3.for each rowとifを使用して、
DTに格納された2列目セル(excelデータだとC列)の文字列で目的文字列と合致すれば
対象行の2・5列目セルの値をDT2に追加
4.DT2をcsvで書き出し

excelCSV.xaml (10.0 KB)

もっと簡単な方法があるかもしれませんが、ご参考まで。