Free Trial

ディスカッション

答えを見つけ、質問し、Alteryx の専門知識を共有してください。

Excelファイル読取でのフロー分岐

禹_泳栽
メテオロイド

お世話になります。

初心者で、どうしてもExcelでの考え方から脱皮できず、アドバイスをいただきたいです。

あるExcelシートには、DBから情報を抽出してほしいキーワードがかいていて、それをループ処理したいと思います。

その前に、このExcelシートに書かれている全てのキーワード(行)に対し、1行でも処理が必要なものがあるかどうかを判断するフラグを付けたセルがA1にあります。

質問は以下の通りであります。

1.セルA1を読み取り、「OK」になったら後続ステップに進み、「OK」でない場合はそこで終了するためにはどうすればよろしいでしょうか。

2.2行(見出し項目行)以降のデータについてループ処理するためにはどうすればよろしいでしょうか。

 

かなりExcelマクロ的な考え方での質問になり恐縮ですが、どうぞよろしくお願いいたします。

 

=======================================

 

早速アドバイスいただいた皆様 ありがとうございます。

詳細情報をなく、失礼いたしました。

やりたいことは以下の通りです。

管理シートに記入するユーザーはファイル「管理シートSample.xlsx」のB、C、D、E列を必須項目として記入してもらいます。

そうすると、J列に処理可能かどうかのステータスが表示され、処理可能な場合、F列の検索キーワードでDBで検索することを考えています。

 

プロセスの手順としては、

 

・ファイル「管理シートSample.xlsx」に対し、セルA1の情報で「OK」かどうかを判別する。

・「OK」になっていたらDBにアクセスし、F列の検索キーワードで検索する。

・検索した結果がない場合は、K列に検索結果なしと入力する。

・検索した結果がある場合は、表示された情報を別のテンプレートファイルに貼り付け、PDFファイルで保存する。

・処理した日付をI列に入力する。

 

ということになります。

7件の返信7
gawa
15 - Aurora
15 - Aurora

@禹_泳栽 さん

ループ処理の部分は、具体的にどういうったデータなのかが想像つかず、いったん回答は差し控えますが、まずはA1のフラグをもとに処理をする/しないの制御の部分について回答いたします。

 

2023.1から追加されたコントロールコンテナーを使うと、値によって処理をする/しないが簡単に制御可能です。2023.1 or 2023.2をお使いであれば、お試しください。

https://help.alteryx.com/current/ja/designer/tools/developer/control-container-tool.html#%E3%82%B3%E...

 

一方で、まだ2022.3以前のバージョンをお使いの場合は(私がそうですが)、コントロールコンテナーがないため、少し工夫がいります。例えば、バッチマクロ+コンテナを使う方法があります。こちらは、フラグによって、バッチマクロ内のコンテナを無効にすることで、処理をする/しないの制御をおこなうものです。

コンテナのON/OFFは、コントロールパラメータで渡しますが、パラメータがTrueでコンテナが無効になるので、A1のフラグを逆転させる必要がある点はご注意ください。(A1=True=処理させたい➡コンテナON=False)

 

データ入力の部分は、まずエクセルファイルのデータを、A1 と 2行目以降 の二つに分けています。こういった処理では、レコード選択と動的リネームが有効です。

image.png

サンプルのワークフローを添付しますので、ご質問の意図に沿っているかどうかご確認いただけると幸いです。

AkimasaKajitani
17 - Castor
17 - Castor

@禹_泳栽 さん

 

なにかインプットサンプル的なものがあったりしないでしょうか?

 

今記載されている内容ですと、

・処理対象のデータ

・キーワード用のExcelシート(A1は処理を行うかどうかのフラグが書いてあり、A2以降の行にキーワードが書かれている)

という風に捉えましたが、それぞれ複数あったりするのでしょうか?

 

イメージ的には、処理対象のデータは一つで、キーワード用のExcelは複数のブックがありそうに思いました(1つのブックであれば処理するかどうかの対象フラグが必要ないと思われるため)

 

ちなみに、セルA1のフラグが有効ではないと処理をしないというのはなにか理由があるのでしょうか?処理を行わないのであれば結果はNullでよい、ということで問題ないのであれば、コントロールコンテナなど複雑なことを行わずに、フィルターツールで処理を行う方と行わない方にデータを分岐するという方法もあります。

 

スクリーンショット 2023-11-29 151221.png

 

AkimasaKajitani
17 - Castor
17 - Castor

Control Containerだとこんな感じになるかと思います・・・。

 

スクリーンショット 2023-11-29 153046.png

禹_泳栽
メテオロイド

投稿削除

禹_泳栽
メテオロイド

お世話になります。

やりたいことをより詳細に追記しました。サンプルExcelシートも添付しました。

お手数おかけしますが、ご確認よろしくお願いいたします。

AkimasaKajitani
17 - Castor
17 - Castor

@禹_泳栽 さん

 

結構複雑なワークロードになりますね・・・。

 

基本的な考え方として、管理シートを一旦全部読み込み、セルA1がOKなら、後段の処理を行う、という

形になるかと思います。ざっくりしたブロックとしては以下のようになるかと思います。

 

スクリーンショット 2023-12-04 113332.png

基本的に各行一気に読み込んで一括で処理していきます。

(Excelマクロのループとの考え方ではないですが、この一気に読み込んでというところが事実上ループ処理と同等です)

 

・ファイル「管理シートSample.xlsx」に対し、セルA1の情報で「OK」かどうかを判別する。

→これは @gawa さんの示した方法か、私のご説明差し上げたコントロールコンテナで後続処理を

 行うかどうかの判定で良いかと思います。

 ちなみに、「管理シートSample.xlsx」は1ファイルのみ、という認識で問題ないでしょうか?

 複数ある場合は、またややこしくなります・・・。

 

・「OK」になっていたらDBにアクセスし、F列の検索キーワードで検索する。

→これは、動的入力ツールなどでDBに対してSQL生成で良いと思います。

 

・検索した結果がない場合は、K列に検索結果なしと入力する。

→フォーミュラツールなどで作成可能です

 

・検索した結果がある場合は、表示された情報を別のテンプレートファイルに貼り付け、PDFファイルで保存する。

→PDFなら、テーブルツールなどを使い、最初からPDFで作った方が良さそうです。Excelに一度貼り付けてからそれをPDFで保存、というのは難しいので。今回、一気に処理を行うので、グループ化オプションをうまく使う必要があります。

 

・処理した日付をI列に入力する。

→一律になるのでしょうか?一律であれば、フォーミュラツールで固定値(DateTimeNow()関数で実行した日を取得可能)として埋め込めば良いと思います。

 

DBがどのように取れるのかよくわかってないので、アウトラインの説明にはなっているのですが、ざっくり以上のような形です。

色々と不明点あるかと思いますが、一つずつ課題をクリアしていけば最終的には実現できる内容になっているかと思います。

随時不明点はご相談いただければ幸いです。

 

禹_泳栽
メテオロイド

お世話になっております。

返事遅くなり大変失礼いたしました。

アウトラインやご説明いただきありがとうございます。

いただいたアウトラインを基に、一つずつ課題クリアをしていきたいと思います。

(本当に初心者ですので、解読と詳細部分の追加に時間かかりそうですが、頑張ります!)

 

不明点があれば、続きまたは別の問い合わせをさせていただきたいと思いますので、どうぞよろしくお願いいたします。