条件が複数ある場合の条件分岐について

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

Excelのある列がA、B、C、Dと複数の値が入っていて、値によって別のエクセルに書き出す文字を変えたい場合どのようにすればよいでしょうか?

こんにちは

例えば

Dictionaryを使う

Switchアクティビティを使う

等が考えられます。

前者は

dict = New Dictionary(Of String,String) From {{"A","1"},{"B","2"}}

としておけば

dict("A") は1が返り、dict("B")は2が返ります

Switchアクティビティはケースごとに処理を分岐するアクティビティになります。

スイッチを使用すると、その前に代入をしなければならないと思っているのですが、条件の数だけ代入が必要になりますか?

こんにちは

ちょっと気にされているポイントが良くわからないのですが、条件については、例えば以下の様に
なりますので、それぞれを代入する必要はないかと思います。(ご懸念点とあっていますか?)

img20211110-6

処理の内容にもよりますが、Dictionaryを使った方が、シンプルに記述はできるケースが多いと思います。

ありがとうございます。
合っています。
caseに文字を入力すると文字列型との間で変換ができないとエラーになりますが、何が問題でしょうか?

こんにちは

SwitchアクティビティのTypeArgumentプロパティをString型にしてみてください

データを格納している変数がデータテーブル型でstring型にすると変換ができなくてエラーになってしまいます。
代入でデータテーブル型からstring型に変更しようとしてもうまくいきません。

こんにちは

DataTable型は複数の情報が格納されているかと思いますので、それ全体を単純にA、Bとすることはできないかと思います。
最終的にやりたいことを、もう少し明確化(or ダミーデータでも良いので具体化)いただくと良いかと思います。

やっていることは

① エクセルファイル1から内容を読み込んでいます

➁ ①で読み込んだ内容を元にフォルダを作成し(フォルダは複数できます)、エクセルファイル2を各フォルダに格納しています

③ エクセルファイル2に①で読み込んだ内容を転記しています

④ 今回質問させていただいているスイッチを使って転記します

➁のフォルダ作成の時点では、繰り返しがうまくいっていて各行の内容でフォルダ名をつけてフォルダ作成ができています。
③と④で転記がうまくいかず、各行の内容を書き出せず、同じセルの内容を転記している状態です。

フォルダの作成・ファイルの格納・ファイルに転記 という流れを繰り返し行いたい状況です。

上手く伝えられずすみません。
何か分かることがあればご教示ください。

こんにちは

例えば画像3の書き込んでいる内容は1からのものなので、各行からの情報になっていない
ということでしょうか?
繰り返し各行の中にあって、読み取った表の中のデータを記載したいのであれば
書き込む内容は、CurrentRow(“列名”).ToString のようにする必要があるように思えます。

あと今回の主題の4の部分ですが、画像からは例えば、発注者名から発注者コードを
入力するようなイメージでしょうか?
そうであるならSwitchではなく、やはりDictonaryを使った方が良いと思います。
理由は発注者が増えたときに、switchですと毎回Caseを追加しなければならなくなるためです。
あらかじめ発注者-発注者コードのマスタテーブルを用意しておいて、そこから
Dictionaryを作るようにしておくと、マスタテーブルのメンテだけで事足るようになります。

③について書き込む内容を、CurrentRow(“列名”).ToStringにして解決しました。

④について、仰る通り発注者名から発注者コードを入力します。
dictionaryについてネットで調べてみたのですが、よく分からずマスタテーブルを用意するのはどのようにすればよいでしょうか?

変数は作成し、添付ファイルの所まではできていますがこれでよいのでしょうか?

こんにちは

例えば、以下のような表を用意しておいて

img20211111-5

以下の様にDictionaryに展開します。(ForEachRowでも同じことができます)

img20211111-4

Sample20211111-2.zip (8.6 KB)

ご参考まで

ありがとうございます。

教えていただいたように作成してみました。

元のデータをdictionaryと紐づけないと 元のデータがAの場合1、Bの場合2 のようになりませんよね?
これはセルに書き込みの所で、書き込む内容を変えないとだめですか?
それとも何か別のアクティビティでdictionaryと紐づけしますか?

こんにちは

CurrentRow("発注先(事務所単位)").ToString

が「発注者名」に該当しますでしょうか?
そうであれば

dict(CurrentRow("発注先(事務所単位)").ToString)

のようにしてみてください。

大変親切にしていただきありがとうございました。
解決しました。

1 Like

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