質問: strTSV & row("出身").ToString() '改行する sw.WriteLine(strTSV) Next 'sw.Close() Catch ex As Exception MessageBox.Show(ex.Message, "エラー") End Try SyainTable.Dispose() Adapter.Dispose() command.Dispose() con.Close() con.Dispose() MessageBox.Show("処理が終了しました", "通知") End Sub End Module ``` ### 補足情報(FW/ツールのバージョンなど) OS:Windows10 開発ツール:Visual Studio2019 フレームワーク:.NET Framework4.8 VBを学び始めてまだ日が浅く、意味のないロジックや無駄なコードがあるかもしれませんが、併せて教えていただければ幸いです。
回答: Access の「社員テーブル」と「部門テーブル」のデータを別々の DataTable に取得するところまではできていると理解してレスします。(ホントはそれは無駄なような気がしますが、その話はちょっと置いときます) > > 1 上記に記載の【datファイルへの出力イメージ】のようなヘッダ・フィールドの順番で出力するための正しい書き方がわからない。 > > どこに、どのような順番でコードを書けば良いかが分かりません。現在のコードだと任意の位置に出力してくれません。 > > > すでに「社員テーブル」と「部門テーブル」の別々の DataTable が取得できているのでそれらを利用するとして・・・ まず、【datファイルへの出力イメージ】のもとになるデータを List(Of T) オブジェクト(DataTable ではなく)として取得することにします。その T クラスの定義を追加してください。 DataTableExtensions.AsEnumerable メソッドを使って、それぞれの DataTable から EnumerableRowCollection(Of TRow) オブジェクトを取得し、それらを Linq to Object を使って結合して List(Of T) 型オブジェクトを生成します。 以下のような感じです(あくまで感じ。コードは C# です)。上でいう T クラスが下の画像の Result クラスに該当します(下の例では内部結合の結果 List(Of Result) オブジェクトが取得できています)。質問者さんのケースでは、上で言う T クラスのプロパティは全部 String 型で良いと思います。 !イメージ説明 > > 2 上記に記載の【datファイルへの出力イメージ】のように"勤続年数"を算出する方法が分からない。 > > > 「入社日」と「退職日」は DataTable では DateTime 型になっていると思います(確認してください)。であれば、上の画像の Select new Result { ... } の ... で "勤続年数" に該当するプロパティに値を代入する際、「入社日」と「退職日」の値を引き算して(結果は TimeSpan 型になるはず)〇年〇ヶ月という文字列に書式設定すれば望む結果が得られるはずです。 > > 3 上記に記載の【datファイルへの出力イメージ】の〇年〇月や〇年〇月〇日、〇年〇ヶ月というように出力するための書き方が分からない。同じくどこに、どのような方法でコードを書けば良いかが分かりません。 > > > DateTime 型、TimeSpan 型から書式設定をして文字列に変換してください。詳しくは以下の記事を見てください。 カスタム日時形式文字列 カスタム TimeSpan 書式指定文字列 以上で【datファイルへの出力イメージ】のもとになる List(Of T) オブジェクトが生成できるはずです。それから質問者さんの言う .dat ファイルは容易に作れるはずです。