QA・フローを検索する

キーワード入力後[Enter]キーを押すと、検索が実行されます

トップページ Forums Q&A 超初心者向け For eachについて

  • 作成者
    ディスカッション
  • #8690

    syoshinsya00
    Participant

    エクセルにある文字列を新しいフォルダにつけていきたいが、繰り返すことができないでいます。

    最終的には、エクセルにある「ABC-D」というフォルダを作成し、その中に「ABC」という文字列が入る画像を「ABC-D」のフォルダにいれていくことで、おそらく全部で1000近いフォルダを作成し、3000近い画像を振り分けることです。

    そのままファイル名を指定すると問題なくできるのですが、繰り返すことが分かりません。

    どうか、ご教示くださいませ。

  • For eachについて

     sai 更新 3 年, 4 ヶ 月 前 2 メンバー · 7 回答
  • Tomo

    メンバー
    2023年4月3日 at 6:20 PM

    コメント失礼いたします!

    Excel内に作成したいフォルダ名が並んで記載されている場合、
    「Excelワークシートから読み取る」でフローを作成できるかと存じます。

    取得:ワークシートに含まれる使用可能なすべての値
    生成された変数:ExcelData

    上記の設定で、データテーブル型のExcelDataには、下記のようになります。
    ※A1のセルにABC-A、
    A2のセルにDEF-Aのように縦に並んでいる場合、

    #|Column1
    0|ABC-A
    1|DEF-A
    2|GHI-A
    3|JKL-A

    次に「For each」アクションを使用し、
    反復処理を行う値:%ExcelData%を設定します。

    「For each」と「End」の間に「フォルダの作成」アクションを挟みます。
    ※「For each」アクションで生成される変数:%CurrentItem%は、
    ABC-Aから降順に入れ替わり最後まで処理を行います。

    パラメーター
    新しいフォルダ-を次の場所に作成:作成したいフォルダーパスを指定
    新しいフォルダー名:%CurrentItem%

    上記の方法でフォルダを作成できるかと存じます。
    ーーーーーーーーーーーーーーーーー
    【画像の振り分けについて】
    画像の格納されているフォルダが一箇所であれば、「フォルダ-内のファイルを取得」アクションで、振り分ける画像の情報をまとめて取得できます。

    パラメーターのファイルフィルターで取得したい画像の形式合わせて絞り込むことができます。

    ※png形式の画像の場合

    パラメーター
    ファイルフィルター:*.png
    生成された変数:Files

    #|アイテム
    0|C:Users\ユーザー名\Desktop\振り分け用\画像データ¥ABC-A.png

    1|C:Users\ユーザー名\Desktop\振り分け用\画像データ¥DEF-A.png
    2|C:Users\ユーザー名\Desktop\振り分け用\画像データ¥GHI-A.png
    3|C:Users\ユーザー名\Desktop\振り分け用\画像データ¥JKL-A.png

    次に、先に作成したフォルダに画像を振り分けていきます。
    「フォルダ内のサブフォルダーを取得」アクションで、新しいフォルダを作成した階層を指定し、フォルダの情報を取得します。

    パラメーター
    フォルダ-:新しいフォルダを作成した階層パスを指定
    生成された変数:Folders

    #|アイテム

    0|C:Users\ユーザー名\Desktop\振り分け用\ABC-A
    1|C:Users\ユーザー名\Desktop\振り分け用\DEF-A
    2|C:Users\ユーザー名\Desktop\振り分け用\GHI-A
    3|C:Users\ユーザー名\Desktop\振り分け用\JL-A

    これにより、画像のパスと格納先のフォルダパスを取得できました。

    ここから、取得した画像リスト(Files)に対して「For each」アクションを使用します。

    パラメーター
    反復処理を行う値:%Filse%
    保存先:CurrentItem2

    続けて、「For each」アクションを使用します。
    今度は、取得したフォルダリスト(Folders)を設定します。

    反復処理を行う値:%Folders%
    保存先:CurrentItem3 ※同じ変数名には自動的に末尾に数字が付き区別されます。

    さらにその中に、「if」アクションを設定します。

    パラメーター

    最初のオペランド:%CurrentItem2.NameWithoutExtension%
    演算子:次を含む
    2番目のオペランド:%CurrentItem3.name%

    %Currentltem2.NameWithoutExtension%⇒ABC-A
    %CurrentItem3.Name%⇒ABC-A
    (CurrentItem3は、フォルダのため拡張子はありません)

    ※補足
    .FullName ⇒ファイルのフルパス。
    .Name ⇒拡張子を含むファイル名。
    .NameWithoutExtension ⇒拡張子を含まないファイル名。

    フォルダ名に対して、ファイル名が含まれているかを判定しています。

    次に「if」アクションの間に「ファイルの移動」アクションを入れます。
    これにより、ファイル名が含まれていた場合、フォルダに格納されます。

    パラメーター
    移動するファイル:%Currentltem2.name%
    宛先フォルダ-:
    C:\Users\ユーザー名\Desktop\振り分け用\%CurrentItem3.Name%
    ファイルが存在する場合:何もしない
    生成された変数:MovedFiles

    【重要】
    ファイルの移動と合わせて、「ループを抜ける」アクションを設定します。

    これにより、画像ファイル1つを対象として、
    ファイル名と各フォルダ名を比較し、フォルダ名にファイル名が含まれなければ、
    次のフォルダ名と比較し、一致する場合は、「ファイルの移動」アクションにより画像ファイルを格納し、「ループを抜ける」で次の画像ファイル処理に移行します。

    ※「ループを抜ける」一つのループから抜けます。

    文章のみ、かつ長文で恐れ入りますが、
    お役立ちできれば、幸いでございます。よろしくお願いいたします。

  • syoshinsya00

    メンバー
    2023年4月6日 at 5:07 PM

    Tomoさま

    たくさんご教示いただきありがとうございます。

    教えていただいた通りやっていったのですが、最後のファイルの移動で、「移動するファイルが見つかりません」というエラーが発生しております。

    解消すべく色々してみましたが、今一度ご教示いただけないでしょうか。

    以下、フォルダ作成後の現在のフローです。

    ①フォルダ内のファイルを取得

    フォルダ:C:\Users\ユーザー名\Desktop\練習用フォルダ\画像フォルダ

    ファイルフィルタ:*.jpg

    ②フォルダ内のサブフォルダを取得

    フォルダ:C:\Users\447223\Desktop\練習用フォルダ\振り分け用フォルダ

    フォルダフィルタ:*

    ③For each

    反復する値:%Files%

    保存先:%CurrentItem2%

    ④For each

    反復する値:%Folders%

    保存先:%CurrentItem3%

    ⑤if

    ⑥テキストの分割

    分割するテキスト:%CurrentItem3%

    区切り種類:カスタム

    区切り記号:MT(実は23MT、23MH、23FT、23FHと4種類ありますが、とりあえず今回はMTのみで実施)

    ⑦ファイルの移動

    移動するファイル:%CurrentItem2.name%

    宛先フォルダ:C:\Users\ユーザー名\Desktop\練習用フォルダ\振り分け用フォルダ\%CurrentItem3.Name%

    ファイルが存在する場合:何もしない

    ⑧ループを抜ける

    現状、⑦での移動でエラーが発生しております。

    何度も申し訳ないのですが、ご教示のほどお願い致します。

  • syoshinsya00

    メンバー
    2023年4月4日 at 2:31 PM

    Tomoさま

    実に分かりやすくありがとうございます。

    しかし、フォルダは完成しましたが、1点、したかったことのひとつをお伝えしていなかったため、

    画像の移動までは至りませんでした・・・。


    それはエクセルにあるフォルダ名と画像名が同一ではないことです。

    共通のキーワードがあるものの、完全一致していないのです。

    エクセル:1-23-45-6(共通キーワード)

          23AA1-23-45-6→これがフォルダ名になります。

    画像:1-23-45-6のあとに「-A」「-B」「_1」「-ロゴ」.jpg

    すなわちフォルダ名と画像名が同じ想定でご教示いただいたので、

    振り分けされていないようです。

    改めてエクセルから1-23-45-6の共通ワードをデータテーブルの形で抜き出して

    画像・フォルダと突き合わせる挑戦してみようと思っておりますが、またご教示いただけると幸いです。

  • Tomo

    メンバー
    2023年4月5日 at 1:26 PM

    syoshinsya00様

    >画像:1-23-45-6のあとに「-A」「-B」「_1」「-ロゴ」.jpg

    詳細につきまして、ご教示いただきありがとうございます。
    おっしゃる通り、共通のワードを抜き出すのが良いと思います。

    ——————————————
    「フォルダ-内のファイルを取得」アクションで下記を取得します。

    Files(リスト)
    #|アイテム
    0|C:Users\ユーザー名\Desktop\画像データ\23AA1-23-45-6-A.png
    1|C:Users\ユーザー名\Desktop\画像データ\23AA6-54-32-1-B.png
    2|C:Users\ユーザー名\Desktop\画像データ\23AA1-35-79-0_1.png
    3|C:Users\ユーザー名\Desktop\画像データ\23AA0-97-53-1-ロゴ.png

    「フォルダ-内のサブフォルダを首都k」アクションで下記を取得します。
    Folder(リストフォルダ-)
    #|アイテム
    0|C:User\ユーザー名\Desktop\振り分け用\23AA0-97-53-1
    1|C:User\ユーザー名\Desktop\振り分け用\23AA1-23-45-6
    2|C:User\ユーザー名\Desktop\振り分け用\23AA1-35-79-0
    3|C:User\ユーザー名\Desktop\振り分け用\23AA6-54-32-1

    この後、同じように「For each」で下記を設定します。

    反復処理を行う値:%Files%
    保存先:CurrentItem2

    続けて中に「For each」で下記を設定します。
    反復処理を行う値:%Folders%
    保存先:CurrentItem3

    ——————————————–

    次に「テキストの分割」を使用し、下記のように設定します。

    分割するテキスト:%CurrentItem3%
    区切り記号の種類:カスタム
    カスタム区切り記号:AA
    生成された変数:TextList

    TextList(リストテキスト値)
    #|アイテム

    0|C:Users\ユーザー名\Desktop\振り分け用\23
    1|1-23-45-6

    ※AAを起点とし分割されます。
    この後、「IF」を使用し、下記設定を行います。

    パラメーター
    最初のオペランド:%CurrentItem2.NameWithoutExtension%
    演算子:次を含む
    2番目のオペランド:%TextList[1]%

    ※「1-23-45-6」が「23AA1-23-45-6-A」に含まれるかを判定します。
    最初のオペランドを.NameWithoutExtension⇒拡張子を含まないファイル名
    で設定しておりますが、プロパティは.FullNameなどを選択しても問題ないかと存じます。

    条件を満たす場合、「ファイルの移動」と「ループを抜ける」アクションを実行させます。
    上記の方法はいかがでしょうか。お役立ちできれば幸いでございます。

  • Tomo

    メンバー
    2023年4月6日 at 6:30 PM

    syoshinsya00様

    大変失礼いたしました。
    移動するファイルなのですが、先の記述が間違っておりました。

    ⑦ファイルの移動

    移動するファイル:%CurrentItem2.name%

    ではなく、パスである必要があるため、%CurrentItem2%になります。

    お手数ですが、よろしくお願いいたします。

  • syoshinsya00

    メンバー
    2023年4月10日 at 5:30 PM

    Tomoさま

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

    ご教示いただきありがとうございます。

    ご指摘いただいた通りにnameを外したら

    1-23-45-6。jpgの画像は移動しました。

    ただ、1-23-45-6のあとに「-A」「-B」「_1」「-ロゴ」.jpgとついたものは移動しませんでした。


    ほとんどの画像が数字のあとに「-A」などがついているためここをクリアする方法はあるのでしょうか?

  • Tomo

    メンバー
    2023年4月13日 at 5:35 PM

    syoshinsya00様

    修正いただき、ありがとうございます!
    お手数をお掛けし申し訳ございませんでした。

    1-23-45-6.jpgにつきまして、フォルダに移動できたとのことと、
    区切り記号について、まずはMTのみで実施いただける旨、承知しました。

    <ご確認させていただきたい箇所について>
    ■ 焦点となる共通文字列を取得(1-23-45-6)について

    「テキストの分割」で生成された「TextList」は下記のようになっておりますでしょうか。

    TextList(リストテキスト値)
    #|アイテム

    0|C:Users\ユーザー名\Desktop\振り分け用\23

    1|1-23-45-6

    ※補足:【デバックされる際の便利な機能について】
    フロー作成画面の各アクションの並びに対して左側に1から数字が並んでおりますが、
    クリックすることで、「ブレークポイント」を設定できます。(赤い丸)
    フロー実行中に一時停止するようになるので、変数の現在値を確認できます。

    ———————————————————
    ■ 画像ファイル名に、1-23-45-6が含まれているか判定について

    1-23-45-6.jpgが判定できているということは、
    「次を含む」の設定になっているかと思われますが、念のため、演算子は「次を含む」になっておりますでしょうか。

    ———————————–
    【If】
    パラメーター
    最初のオペランド:%CurrentItem2.NameWithoutExtension%
    演算子:次を含む
    2番目のオペランド:%TextList[1]%

    %TextList[1]%⇒1-23-45-6 (フォルダ名の共通共通文字列のみ)
    %CurrentItem2.NameWithoutExtension%⇒23AA1-23-45-6-A(拡張子を含まないファイル名)

    ———————————–

    >1-23-45-6のあとに「-A」「-B」「_1」「-ロゴ」.jpgとついたものは移動しませんでした。

    上記につきまして、エラーメッセージなどは表示されておりますでしょうか。
    もしくは、画像ファイル自体が「For each」アクションでの判別対象にされていなかったのでしょうか。

    お忙しいところ、恐れ入りますが、ご確認いただけると幸いです。
    よろしくお願いいたします。

元の投稿
0 of 0 記事 2018年6月