質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
UiPath

UiPathは、API連携による高い拡張性を持つ幅広いシステムに適用可能なRPAプラットフォームです。開発・設定ソフトウェアや管理コンソール、バックオフィスロボットなどのツールがあり、必要に応じて導入することが可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

12600閲覧

データテーブルの列の順番を変更したいですが、どうしたらいいでしょうか?

rena_168

総合スコア72

UiPath

UiPathは、API連携による高い拡張性を持つ幅広いシステムに適用可能なRPAプラットフォームです。開発・設定ソフトウェアや管理コンソール、バックオフィスロボットなどのツールがあり、必要に応じて導入することが可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/07/25 01:25

編集2019/07/25 02:07

UipathでVB.NETコードを呼び出して、以下のことをしたいです。

Excelのデータをデータテーブルに格納後、3列目と4列目の全てのデータを一番最初の列に持ってきたいですが、どうしたらよろしいでしょうか?

どなたか教えていただきたいです。

宜しくお願いいたします。

元データの列は
【所属コード 所属名 氏名コード 氏名 年 月 出勤回数 欠勤日数 有休日数 有休時間 特別休暇 代休日数 夜勤回数 交代4-2回数 L手当 法定時間内残業 普通残業 休日出勤 休日深夜 深夜時間 勤務時間数 在宅回数 ノーPC回数 実労働時間 過不足時間 備 考

最終必要データ列順番は以下のように、変更不可である
【氏名コード 支給月(年+月) 氏名 所属コード 所属名 普通残業 休日出勤 休日深夜 深夜時間 過不足時間】

それで、データテーブルをクローン後、必要ない列を削除後、データ結合し指定カラムに代入後、カラム名変更しました。
----------------start

VB.NET

1dt.Columns.Remove("出勤回数") 2dt.Columns.Remove("欠勤日数") 3dt.Columns.Remove("有休日数") 4dt.Columns.Remove("有休時間") 5dt.Columns.Remove("特別休暇") 6dt.Columns.Remove("代休日数") 7dt.Columns.Remove("夜勤回数") 8dt.Columns.Remove("交代4-2回数") 9dt.Columns.Remove("L手当") 10dt.Columns.Remove("法定時間内残業") 11dt.Columns.Remove("勤務時間数") 12dt.Columns.Remove("在宅回数") 13dt.Columns.Remove("ノーPC回数") 14dt.Columns.Remove("実労働時間") 15 16Dim i As Integer = dt.Rows.Count 17For Each dRow As DataRow In dt.Rows 18If Integer.Parse(dRow("月").ToString) < 10 Then 19dt.Rows(i-dt.Rows.Count).Item("年") = Integer.Parse(dRow("年").ToString & "0" & dRow("月").ToString) 20Else 21dt.Rows(i-dt.Rows.Count).Item("年") = Integer.Parse(dRow("年").ToString & dRow("月").ToString) 22End If 23i = i + 1 24Next 25 26dt.Columns.Remove("月") 27 28dt.Columns(4).ColumnName = "支給年月"

----------------end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2019/07/25 01:31

何故そういったことが必要なのでしょうか? データテーブルを使用する側で対応できないのでしょうか?
gentaro

2019/07/25 01:34

VB.NETのタグとの関連がわかりません。 VB.NETのプログラムを組んでいるなら、コードを提示して下さい。
rena_168

2019/07/25 01:38

別シートでVLOOKUP式は変えられないので、VLOOKUP内の式では、データの列順番は(1,2,3,4....)でないといけないのに、inputデータのExcelデータ列は(3,4,1,2...)になっております。
rena_168

2019/07/25 01:49

元データの列は 【所属コード 所属名 氏名コード 氏名 年 月 出勤回数 欠勤日数 有休日数 有休時間 特別休暇 代休日数 夜勤回数 交代4-2回数 L手当 法定時間内残業 普通残業 休日出勤 休日深夜 深夜時間 勤務時間数 在宅回数 ノーPC回数 実労働時間 過不足時間 備 考 】 最終必要データ列順番は以下のように、変更不可である 【氏名コード 支給月(年+月) 氏名 所属コード 所属名 普通残業 休日出勤 休日深夜 深夜時間 過不足時間】 それで、データテーブルをクローン後、必要ない列を削除後、データ結合し指定カラムに代入後、カラム名変更しました。 ----------------start dt.Columns.Remove("出勤回数") dt.Columns.Remove("欠勤日数") dt.Columns.Remove("有休日数") dt.Columns.Remove("有休時間") dt.Columns.Remove("特別休暇") dt.Columns.Remove("代休日数") dt.Columns.Remove("夜勤回数") dt.Columns.Remove("交代4-2回数") dt.Columns.Remove("L手当") dt.Columns.Remove("法定時間内残業") dt.Columns.Remove("勤務時間数") dt.Columns.Remove("在宅回数") dt.Columns.Remove("ノーPC回数") dt.Columns.Remove("実労働時間") Dim i As Integer = dt.Rows.Count For Each dRow As DataRow In dt.Rows If Integer.Parse(dRow("月").ToString) < 10 Then dt.Rows(i-dt.Rows.Count).Item("年") = Integer.Parse(dRow("年").ToString & "0" & dRow("月").ToString) Else dt.Rows(i-dt.Rows.Count).Item("年") = Integer.Parse(dRow("年").ToString & dRow("月").ToString) End If i = i + 1 Next dt.Columns.Remove("月") dt.Columns(4).ColumnName = "支給年月" ----------------end
YAmaGNZ

2019/07/25 01:55

コードは質問を編集して提示してください。 また、DataTableに取り込む部分や出力する部分のソースがあれば、そこで必要データのみにするなどの対応が出来るなどの方法が提示できるかもしれません。
YAmaGNZ

2019/07/25 01:57

というかクローン作るなら、新しいDataTableに必要データをループで入れるなりすればいいのでは?
rena_168

2019/07/25 01:59

やっぱりそういう普通のやり方でやるしかないですか? もっと効率のある方法があるかなと思って。。。
gentaro

2019/07/25 02:01

ソースコード書く時はちゃんとインデント付けましょう。見づらいコードを提示しても読んでもらえず、結果ご自身が損をします。
YAmaGNZ

2019/07/25 02:03

ですから、DataTableに取り込む部分やDataTableからの出力部分でデータの限定などが行えるかもしれないので、その部分のコードを出してくださいということです。
rena_168

2019/07/25 02:05

すみません、UipathでVB.NETコードを書いた部分はこれだけです。
YAmaGNZ

2019/07/25 02:48

すみません。UIpathは使用したことがないので、そちらに関することはお答えできません。 VB.NET側であれば、先ほどいったように新たにDataTableを作成し、必要データを生成したほうがすっきりするのではないかと思います。
guest

回答2

0

DataColumn.SetOrdinal メソッドでカラムの順番を入れ替えられます。
3列目、4列目を先頭にもっていくのであればこんな感じでしょうか。

VB

1Dim dt As New DataTable() 2dt.Columns.Add("A") 3dt.Columns.Add("B") 4dt.Columns.Add("C") 5dt.Columns.Add("D") 6dt.Rows.Add("1", "2", "3", "4") 7dt.Columns(3).SetOrdinal(0) 8dt.Columns(3).SetOrdinal(0) ’上の行で順番が変わるので注意 9For Each dc As DataColumn In dt.Columns 10 Debug.WriteLine(dc.ColumnName) 11Next 12 13結果: 14C 15D 16A 17B

投稿2019/07/25 04:03

KOZ6.0

総合スコア2696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOZ6.0

2019/07/25 04:12

このほうがわかりやすいかも。 dt.Columns("C").SetOrdinal(0) dt.Columns("D").SetOrdinal(1)
guest

0

自己解決

YAmaGNZさんに言われたように、元データテーブルから必要となる列のみ取得し、
新規データテーブルを作ることで出来ました。
もっと簡単に列の入れ替えが出来ないことが残念でした。

投稿2019/07/25 04:33

rena_168

総合スコア72

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問