9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【UiPath】Excel - 表(DataTable)の縦横を変換する

Last updated at Posted at 2021-05-22

はじめに

この投稿は、RPAツールのUiPathで、表(DataTable)の縦横を変換する方法についての投稿です。

この記事は、UiPath Friends もくもく会 2021年5月開催 2021-05-22(土)08:45 - 12:00 で書きました。

表(DataTable)の縦横変換とは

表で、横軸に時系列などが設定されている時に、縦横を変換したくなります。
例えば、以下のようなケースです。
pv1.PNG

UiPathで表を扱うときは、DataTable形式で取得して使用しますが、基本は行でループさせながら処理するほうが普通なので、上記の表の場合は、縦と横を入れ替えてから処理するのもありです。

UiPathで縦横変換する

UiPathで表(DataTable)の縦横を変換するなら、以下の方法が考えられます。

1)UiPathの標準アクティビティで変換する
2)UiPathの「コードを呼び出し (Invoke Code)アクティビティ」で変換する
3)Excel操作の「形式を選択して貼り付け」で「行列を入れ替える」

以下で説明します。

1)標準アクティビティで変換する

列と行を入れ替えるために、以下のようなフローを使用します。
image.png

1列目の名前はkeyという名前にしていますが、変えてもOKです。

確認しやすいように、以下にxaml形式でアップしました。

2)コードを呼び出し (Invoke Code)アクティビティで変換する

.NETのコードでも、縦横変換が可能です。

以下は、コードを呼び出し (Invoke Code)アクティビティで、VB.NETのコードで書いた例です。

'// in_dt:変換前のデータテーブル
'// out_dt:変換後のデータテーブル
out_dt = New DataTable()
out_dt.Columns.Add("key")
For idx As Integer = 0 To in_dt.Rows.Count - 1
	out_dt.Columns.Add(in_dt.Rows(idx)(0).ToString)
Next
For idx As Integer = 1 To in_dt.Columns.Count - 1
	Dim drow As DataRow = out_dt.NewRow()
	Dim colName As String = in_dt.Columns(idx).ColumnName
    drow(0) = in_dt.Columns(idx).ColumnName
	For idxRow As Integer = 0 To in_dt.Rows.Count -1
		drow(idxRow + 1) = in_dt.Rows(idxRow)(colName)
    Next
	out_dt.Rows.Add(drow)
Next

確認しやすいように、以下にxaml形式でアップしました。

3)Excel画面操作で「行列を入れ替える」

Excel単体でも「表の縦横変換」ができます。

UiPathのフローにするなら以下のようになります。

image.png

終わりに

いかがでしたでしょうか。扱いにくい表の場合は、思い切って縦横変換してみるのもありです。

この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?