Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

無料で使えるRPA | RPA Express(Workfusion Studio)の使い方③ エクセルから値の取得

RPA Express(Workfusion Studio)でエクセルのセルから値を取得する方法について説明します。最終的に売上実績データというエクセルデータがあったとして、繰り返しを使ってデータを処理する事を目指します。初めてRPA Expressを操作する方はまず、前回のエクセルに値を書き込む方法の記事をご覧頂ければよりスムーズに理解できると思います。

目次

今回やりたいこと

売上実績データを集計します。売上実績データはデスクトップに保存されており、下の様になっています。

売上実績データの絵
売上実績データの絵

前回のエクセルに書き込む方法の記事でF1セルに「売上高」の文字を入力しました。この続きとして、F2セルからF7セルに売上高の数字を入力していきます。売上高はC列の値とD列の値をかけ算して求めます。「売上高」の文字を記入した段階で、スクリプトはこのようになっています。

「売上高」の文字をF1に記入するところまでのスクリプトの画像
「売上高」の文字をF1に記入するところまでのスクリプト

エクセルからデータを読み取る為の準備

それでは、早速スクリプトを作成していきます。

計算の為の変数を用意する

まずは変数の準備を行います。

計算結果を代入する為の変数を用意する

エクセルのセルに入力するためには、変数に値を代入して、「Set Cell Valueアクション」に変数を渡すんでしたね。「変数?アクション?値を渡す??」となっている方は、まず、前回のエクセルに書き込む方法の記事をご覧下さい。詳しく、やさしく解説しています。

Record VariablesウィンドウからAdd Variablesをクリックして変数を設定します。売上高を入れる変数なので、Nameは「sales_amount」とします。分かりやすい名前なら別の名前でも構いません。日本語は使えないので英語の名前をつけましょう。スペースもつかえませんよ。

このsales_amountという変数にかけ算の結果を入れるので、Type(=変数の型)はNumberを選択して下さい。そして、Default Value(=初期値)はあとでかけ算したときに変数にかけ算の結果を入れるようにするので設定しなくて大丈夫です。Number型(=数値型の変数は)Default Valueが未設定だと、勝手に0が入力されます

sales_amountというNumber型で初期値が0の変数を設定した画面
sales_amountというNumber型で初期値が0の変数を設定した
これで販売単価と販売実績をかけ算した値を代入する為の変数が宣言*1できました。

計算するための値を代入する変数を用意する

次に、C列の販売単価とD列の販売実績の値を代入する為の変数を用意します。販売単価は「price」、販売実績は数量を意味する「quantity」という変数にする事にします。

かけ算してsales_amountを求める為に、priceとquantityという変数を追加した
かけ算してsales_amountを求める為に、priceとquantityという変数を追加した

ここで要注意なのは、priceもquantityも数値なのにString型(=文字列型)で宣言するという点です。ここが一番大事なところで、理由は後ほど説明します。

これで、sales_amount = price * quantity という式でsales_amountが求められますね!「*」はかけ算の意味で算数だと「×」の意味です。

エクセルのセルから値を取得する

それではようやく、エクセルから値を取得します。前回、入力したい値を変数に入れて「Set Cell Valueアクション」に渡すことによってセルに値を記入しましたね。今回は逆で、書いてある値を取得したいので、「Get Cell Valueアクション」を使います。

Get Cell Valueアクション

Actions LibraryからGet cell valueをダブルクリックして、Action FlowにGet Cell Valueアクションを追加します。

まずは2行目の値を取得してみるので、Expressionの所を座標を意味するCoordinatesに変更します。そしてC2と記入します。次に、取得した値をpriceに代入します。Save cell value to variableのVariable nameのところがプルダウンで変数名を選択できるので、priceを選べばOK。

C2の値をpriceに代入するのに必要な設定


同様に、販売実績もquantityという変数に入れます。

D2列の販売実績もString型のquantityに入れる
D2列の販売実績もString型のquantityに入れる

スクリプトは、この時点でこのようになっています。

C2とD2の値をそれぞれpriceとquantityに代入するアクションを挿入した
C2とD2の値をそれぞれpriceとquantityに代入するアクションを挿入した

さて、ここで、気づくことはありませんか?Get Cell Vallueの設定で変数「price」を選ぶ瞬間、このようになっています。

C2セルの値をpriceと言う変数に入れる設定をする瞬間の画像
C2セルの値をpriceと言う変数に入れる設定をする瞬間

そうです。Number型で宣言した変数であるsales_amountが代入先の変数の選択肢にないのです。これを言うために、この記事ではまだ出てこないsales_amountを宣言しました。実は、Get Cell Valueアクションは、String型の変数にしか値を代入できません*2

~~以下、読み飛ばし可(String型の変数にしかエクセルのセルの値を代入できない理由)~~

理由は、公式サイトでも確認できませんでしたので私見ですが、

+ 技術的な問題
+ Workfusion社の優しさ

の2つの理由があると考えられます。技術的な問題については「配列」というプログラミングの知識が必要なので割愛します。難しいを超えたと書いて超難しいです。一方、優しさについてはプログラミング経験がなくても理解できるので簡単に説明します。エクセルのセルには「売上高」のような文字列も「3」のような数値もあるので、Number型の変数に入れると「それ、数字じゃありません」というエラーになる可能性がある為です。数字は文字列として捉える事ができますが、文字列は数字として捉える事ができないので、エラー回避のための優しさもあって(一旦)すべてString型で取得している一面はあると思います。String型からNumber型への変換はできますからね

~~読み飛ばし可ここまで~~

何はともあれ、エクセルのセルに書き込まれている値は取得できました。これで売上高を更新するための土台ができましたね。今後の流れは以下の通りです。ゴール地点までのステップが見えた方がいいですよね。

  1. 値を数値に変換する
  2. 販売単価×販売実績を求めてセルに書き込む
  3. 繰り返し構文について学ぶ
  4. 繰り返し構文を使って売上データのかけ算を完成させる
  5. イレギュラーに備えて完成度を高める
  6. メンテナンス性を高めて自分だけの便利ツールから部門で使えるようにする
  7. メンテナンス性まで考えてたRPAを作る上で、効率の良いスクリプトの作り方

この記事のまとめ

  • エクセルからセルの値を取得するには、Get Cell Valueアクションを使う
  • 取得したデータは数値でも何でもString型となる
  • 取得したデータはString型の変数に入れる
  • 次回はString型になってしまった数字をNumber型(=数値型)に変換するところから再開する

次ページでは値の型変換について勉強します。売上集計ができるまで、頑張っていきましょう!

*1:新たに変数を設定することを「変数を宣言する」と言います

*2:出典: https://forum.workfusion.com/t/rpa-recognized-excel-number-as-text/44327