置き換えてセルに書き込み

お世話になります。
以下が実行したいワークフローです。
1.エクセルの範囲を読み込み
2.読み込んだ範囲に特定の文字列があるか判断(変数"domain"に格納)
3.特定の文字列があれば置き換えてセルに書き込み
4.読み込んだすべての行に対して3を実行

ここまで作ってエラーは出ていないのですが
何が間違えているのか分かりません。
どなたか教えていただけないでしょうか。

こんにちは

やりたいことが完全に理解できていませんが、おそらく以下のイメージになるのではないかと思います。
変数domainがReadRangeで読み取ったDataTableとすると、それのForEachRow内では例えば最初の列の各要素はrow(0)で取得・設定できます。

今回の場合、同じセルへの置き換えでしたら、そのままReplaceメソッドを使うと、ある場合は置換されますし、ない場合は置換されないのでIFで分岐する必要はないと思います。(違う列への書き込み等でしたらIFでの分岐の必要はあります)
まずは読み取ったDataTableの内容を書き換え、最後にこれをエクセル側にWriteRangeで反映させています。

ご返信いただきありがとうございます!
「置き換えたあとの文字列は一つ右の列に書出し、
置き換える文字列が無い場合には空欄にし、次の列に進む」
という実現が抜けていました。すみません。
上記の場合、IFをどのように使えばよいのでしょうか・・・。

1 Like

こんにちは

最初にReadRangeで2列分読み込んでおいて、条件に合致する場合に2列目に書き込んむと良いと思います。下記は列番号で指定していますが、列名があるならばそれで指定してた方が良いかもしれません。

上記で、もしC列がもともと空欄ではない場合は、ELSEに当該セルを空欄にするAssignを配置する必要があります。

1 Like

ありがとうございます。
IFの使い方は理解できました。
WriteRangeで置き換え後の文字列を書き込む際、
「row(“列名”)」で指定すると型が合わずエラーになってしまいます。
変数「domain」のままだと置き換え前に読み込んだdatatableがそのまま書き込まれてしまいます。
どのようにして書き込むのが有効でしょうか。
大変初歩的な質問ですみませんが、ご教示いただけますと幸いです。

こんにちは

「row(“列名”)」で指定すると型が合わずエラーになってしまいます。

ここへはDataTable型の変数を入力する必要があるので、上記では型が不一致となります
そもそもrow自体がForEachRowのスコープかと思いますので、変数未定義になるのではないでしょうか?

変数「domain」のままだと置き換え前に読み込んだdatatableがそのまま書き込まれてしまいます。

取り急ぎ、可能性としてまずは以下3つが考えられますので、ご確認いただけますでしょうか?

1.ForEachRowでDataTableとしてdomainを指定していない。
2.ForEachRow内の条件分岐またはその後の代入に誤りがある。
3.ExcelApplicationScopeで自動保存がONになっていない。OFFの場合は別途ワークブック保存を配置する。

1 Like

Yoichi様

ありがとうございます。
1.ForEachRowでDataTableとしてdomainを指定していない。
→ForEachRowではdomainを指定しています。

2.ForEachRow内の条件分岐またはその後の代入に誤りがある。
→条件分岐「row(“ドメイン”).ToString.Contains(“1234”)」
代入「row(“修正ドメイン”)」=row(“ドメイン”).ToString.replace(“1234”,“abcd”)

3.ExcelApplicationScopeで自動保存がONになっていない。
→自動保存がONである事を確認済です。

上記の内容で実行すると置き換え前の状態で書き込まれてしまいます。
条件分岐もしくは代入がおかしいのでしょうか。

こんにちは

取り急ぎとなりますが、以下ご確認・対応ください。

1.WriteRangeはForEachRowの外の方がベター(ExcelApplicationScopeの中である必要はあります)ですので、そのようにしてみてください。

2.読み込む範囲と書き込む範囲が一致していますでしょうか?
最初のPOSTではB列から読み込んでしましたので、書き込みも例えばB2にする必要があります。

そのうえで、原因の切り分けのために、WriteRangeアクティビティにBreakPointを設定して(StudioのメニューでDebugをクリックして、BreakPointを設定)デバッグ実行を行うと
当該アクティビティで停止するので、左側に表示されるLocalsパネルでdomainの中身を確認できます。まずはこちらを確認した方が良いかもしれません。

また可能であればワークフローを切り取らず全体をUPいただいた方が良いかもしれません。

1 Like

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

1.ForEachRowの外に出す
2.読み込む範囲=書き込む範囲

上記の2つを実施したところ、成功しました!
これを作るのに今日1日かかってしまっていたので本当に助かりました。
できるまで根気よくお付き合いいただき、本当にありがとうございました!

2 Likes

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.