Excel 最終行と最終列の取得方法

はじめまして。2週間前にStudioXを使い始めたものです。
かなり初心者ですので基本的なところから教えていただけると幸いです。

Excelで最終行と最終列が可変のデータシートをコピペする際に、「範囲をコピー/貼り付け」の最終行を指定する方法を教えてください。

VBAマクロで、 Cells(Rows.Count, 1).End(xlUp).Rowに該当するような範囲選択をUipathで行うにはどうすればよいのでしょうか。

現状では「範囲をコピー/貼り付け」のソース範囲が下記のようになっているので、
Rangeの括弧内を変えて表の数字が入っている最終行と列を範囲指定するようにしたいです。
Book1.Sheet(“データ”).Range(“X1358:AX1389”)

拙い質問で恐縮ですが、宜しくお願い致します。

2 Likes

いらっしゃいませ、forumへようこそ! :laughing:

StudioXですと、「最初/最後のデータ行を検索」というジャストなアクティビティが存在します。
image

もし見当たらない場合、StudioXのバージョンを20.10以降、UiPath.Excel.Activitiesパッケージを2.9.3以降にしてみてください。

頑張ってくださいね :+1:

3 Likes

お忙しい中有難うございました。

他サイトでは変数を指定して変える方法など紹介されていたので、StudioXではできないのかと思っておりました。

初心者ですが、頑張らせて頂きます。

2 Likes

説明不足な気がしたので追記です (`・ω・´)ゞ

StudioXで言う『保存された値』はいわゆる変数のことなので、「最初/最後のデータ行を検索」にて『最後の行の番号を保存』として保存した値は変数とも言えます。

で、『最後の行の番号を保存』で保存した値を「範囲をコピー/貼り付け」のソースに指定する時は、カスタム入力の「範囲」で、下記画像のように指定します。

トピックタイトルからすると最終列の取得方法もご希望かと思うのですが、
StudioXで最終列の列番号(AとかXとか)を取得する方法については私では力及ばずです。最終行取得方法だけで申し訳ない :sob:

1 Like

こんにちは

表の最初の列のオフセット量がわかっていれば以下で算出できます。以下は仮にオフセット量が3(D列から始まる表)の場合です。

UiPath.Excel.Helpers.ExcelUtilities.ConvertColumnIndexToColumnLetter(3+ Excel.Sheet("Sheet1").DataTableValue.Columns.Count)
3 Likes

さすがYoichiさん!!
ありがとうございます!!

1 Like

お二人とも有難うございます。
Ryokoさんの説明で最終行は取得できそうです。

最終「列」に関してですが、Range(”X4:AX&LastRow”)のAXの部分に
Yoichiさんが紹介された式を代入すれば良いという認識であっていますでしょうか?

{C1153133-7236-4A9E-958B-EF955C53054B}.png

度々申し訳ありませんが、宜しくお願い致します。

範囲をコピー/貼付の詳細エディターに書き込む方法①と、一旦変数に格納する方法②があるかと思います。
なお、@Tatsuya899 さんが挙げられている例がX列開始だったのでオフセット23してみました。

①「範囲をコピー/貼付」の「ソース」詳細エディターに書き込む方法

Excel.Sheet(“Sheet1”).Range(String.Format(“X1:{0}{1}”,
String.Format(UiPath.Excel.Helpers.ExcelUtilities.ConvertColumnIndexToColumnLetter(23+Excel.Sheet(“Sheet1”).DataTableValue.Columns.Count)),
Saved.Values(Of System.Int32)(“最終行”).ToString))

②一旦変数に格納する方法

  1. 変数を作成

「後のために保存」アクティビティで、保存先を詳細エディターで文字列型に変更(Of UiPath.Excel.ExcelValue→Of stringに修正)し、保存する値の詳細コードに @Yoichi さんが教えてくれた書き方をべた張り(オフセット値だけ必要に応じ修正)
image

  1. 「範囲をコピー/貼付」の「ソース」カスタム入力で設定
    最終行と同じ要領で、最終列を入れます。

どちらでも結果は同じです。:grin:

2 Likes

既に上記で解決済みだと思いますが、単純に「Excel の繰り返し (各行)」でやってみました。参考まで。

Main.xaml (14.2 KB)

2 Likes

ryokoさん

お忙しい中、有難う御座います。
②に方法で解決しました。

本当に有難う御座います。

1 Like

Shinji さん

ありがとうございます。
最終行、列の取得でもいろいろな手法があるんですね。

念のため確認ですが、右下最終セル名=Ctype(CurrentRow.FullRangeName)で合ってますか?社用PCでxamlファイルがダウンロードできなかったのでお手数お掛けしてすみません。

後のために保存 - 最終行の「:」以降の文字(例:C3)

・左辺(保存先)
右下最終セル名

・右辺(保存する値)
CType(CurrentRow.FullRangeName.Substring(CurrentRow.FullRangeName.IndexOf(":")+1), ExcelValue)

行(=CurrentRow.FullRangeName)を示す文字列(例えば:[Sheet1]!B2:F2)から、「:」より後ろ(=.IndexOf(“:”)+1)の文字列を切り出し(=Substring)ています。

例:[Sheet1]!B2:F2 → F2

1 Like

Shinjiさん

本当に有難うございます。