エクセルのセルの内容の一部を抜き取る方法

①Uipathにおいて、あるエクセルシートのE3セルに平成30年7月24日現在と記載されているとします。このセルから平成30年7月24日だけを抜き取り、2018/07/24と転記する方法はございますでしょうか?
また、月だけを抜き取る方法はありますか?
(一桁の月と二桁の月を使い分ける感じ)
※毎日、日付だけが変わり、関数は入っておりません。

②Uipathは、.Net関数に基づいているそうですが、例えば、第一月曜日を表示するような表示方法はありますでしょうか?

1 Like

1.の前半のみですが、
E3セルの値をRead Cell で読み取り、読み取った値を文字列に変換した変数を(strとおく)
Substring()を使用して
str.Substring(0,str.Length-2) で最後の2文字を除いた文字列が取得できます。
取り除きたい文字列が2文字固定出ない場合は別の方法を考える必要がありますが…

①の後半ですが、
工夫が必要になるので、InvokeCodeで試作しました。
添付ファイルをご参照:1.xaml (5.9 KB)

②ですが、
一発で計算できる関数がなさそうなので、InvokeCodeで試作しました。
添付ファイルをご参照:2.xaml (6.6 KB)

1 Like

1に関してのみですが、

自作機能なのですが、元号(和暦)混じりの日付表記から、西暦への変換ができます。あとは適当にDateTime型のToStringで調節してみてください。

2 Likes

@canse
excelから読み取って、generic型にした変数をmessage boxで記載の通り、str.Substring(0,str.Length-2)で実行しようとすると、以下のようなエラーが表示されます。

@lainh
1のファイルですが、7月24日になっていますが、例えば、エクセルの所定のセルに入った「平成30年〇月〇〇日現在」を取得するように、inovke codeを変えるにはどこを修正すべきでしょうか?

文字列(string型)に変換してください。
generic型にした場合は、変数名.toStringを使用してください。

@canse

string型にすると、以下のようなエラーが表示されます。

初歩的な質問ですみません。

EXCELより日付を読み込んで変数に格納してから、
InvokeCodeの「argInputDate」引数に代入することです。
サンプルをご参照ください:1.zip (7.7 KB)

@lainh

おかげさまで、ちゃんとエクセルから表示されました。
それぞれのコードがどのような意味を成しているかわからないと今後同じような事象が生じた際対応できません。
今後の参考までに、Uipathが準拠しているVB.NETの書籍・WEBサイト等ございましたら、ご教示ください。

◆System.Globalization.CultureInfo に関して、下記のサイトでは参考になります:

カルチャ - マイクロソフト系技術情報 Wiki

◆DateTime.ParseExact に関しては、下記のサイトでは参考になります:

DateTime.ParseExact メソッド (System) | Microsoft Learn

他にはVB.NETに関するwebサイトなら、msdnのライブラリ:

.NET API ブラウザー | Microsoft Learn

では概ね参照できますが、実戦的なコードはやっぱりgoogleしてみないとわからないです。

1 Like

@lainh
@canse
@Honoka

例えば、「募集期間:平成30年1月1日~平成30年12月31日」となっているところから、
平成30年12月31日だけを抜き取る方法はありますでしょうか?
開始日の月数・日数が現在は1と一桁ですが、2桁になった場合も対応できるようにしたいです。

お手数ですが、お分かりになれば教えて頂けますと幸いです。

全角の"~"の後ろの文字をすべて取得するだけなら、
"~"の位置を取得する indexOfと
文字列中の指定した文字の位置の文字列を取得する Substring で取得できます。
サンプル添付します。ご確認下さい。
test.zip (1.5 KB)

System.Text.RegularExpressions.Regex.Split(対象文字列, “([~])”,System.Text.RegularExpressions.RegexOptions.None).ToArray()

を使用してリストを取得できます。
このリストの最後のitemは「平成30年12月31日」となります。
assignで1行でリストが取得可能ですので、お試しください。

@lainh
@canse
@Honoka
ありがとうございます。
また、(募集期間:平成30年1月1日~平成30年12月31日)となっていた場合、
)が最後に含まれてしまう。末尾を削除するようなことはできますか?

1回目で取得したリストに対して下記を実施してください:

System.Text.RegularExpressions.Regex.Split(3番目のitem, “([)])”,System.Text.RegularExpressions.RegexOptions.None).ToArray()

を使用して2回目のリストが取得できます。
このリストの最初のitemは「平成30年12月31日」となります。

表記にある程度のばらつきが考えられるのなら、正規表現による抽出を使ったほうが良いと思います。

 ^.*(平成[0-3]?[0-9]年[01]?[0-9]月[0-3]?[0-9]日).*(平成[0-3]?[0-9]年[01]?[0-9]月[0-3]?[0-9]日).*$

Main.xaml (8.2 KB)

少し冗長ですが、これで「和暦表示の日付が2つあるパターン」は殆ど網羅できるかな、と。
(使用例のサンプルもつけておきます)

1 Like

@lainh

理解不足ですみません。

System.Text.RegularExpressions.Regex.Split(3番目のitem, “([)])”,System.Text.RegularExpressions.RegexOptions.None).ToArray()
上記のようにありますが、Assign Acitivityで行うのでしょうか?

もしくはInvoke codeで行うのですか?

assignの場合、どう変数の型を定義するのかご教示頂けますと幸いです。

Assign Acitivityで行うことです。
作成したコードのイメージは以下となります:

・1回目
image

・2回目
image

・変数定義は以下となります:

また、正規表現による抽出パターンの記載は @Honoka さんのコメントをご参考ください。

@lainh

①System.Text.RegularExpressions.Regex.Split(3番目のitem, “([)])”,System.Text.RegularExpressions.RegexOptions.None).ToArray()

上記で行ったものを教えて頂いたInvoke codeで和暦から西暦に直そうとすると
以下のようなエラーが出ます。
Invoke codeのエラー
Log event : Invoke code: Exception has been thrown by the target of an invocation

② strKLがStringとなっていますが、どういう風に設定するのでしょうか?

invoke code ではないです。
普通にAssignActivityでコーディングすればよいと思います。
サンプルをご参照ください:→ 1.xaml (7.6 KB)