2つのデータテーブルの重複行を削除したいのですが、日付の部分が2つのデータテーブルで書式が異なっているため見た目には同じでも重複行とならず削除できません。
表示形式では、一方はM月d日、もう一方はyyyy/M/dです。
前者を後者の形式に一括で変更した上で重複行の削除をすることはできないでしょうか?
2つのデータテーブルの重複行を削除したいのですが、日付の部分が2つのデータテーブルで書式が異なっているため見た目には同じでも重複行とならず削除できません。
表示形式では、一方はM月d日、もう一方はyyyy/M/dです。
前者を後者の形式に一括で変更した上で重複行の削除をすることはできないでしょうか?
What you see on excel and what you get when you read might be different…check the datatable in locals panel for correct format
Now coming to removing duplicates…from one of the table if whole row matches do you want to remove? If so yes we can change the format as needed and then use dt.AsEnumerable.Except(dt1.AsEnumerable).CopyToDataTable
To change format …use as below in invoke code and send dt as in/out argument
Dt.AsEnumerable.ToList.ForEach(Sub(r) r("Column") = DateTime.ParseExact(r("Column").ToString,"yyyy-MM-dd",System.Globalization.CultureInfo.InvariantCulture).ToString("MM/dd/yyyy"))
In the above change the input and output formats as needed
Cheers
こんにちは
上記だけですと年の情報が欠落しているので、正確にyyyy/M/dと比較ができないと思いますが、
年の条件ありますか?例えば「現在と同じ年であるとする」あるいは「yyyy/M/dと同じ年とする(逆に言えば年は無視して比較する)」など
元のExcelの表示上のことで、実データはyyyy/M/dとなっています。
データテーブルで取得する方法に変えたところ、今度は日付がシリアル値となってしまいました。
シリアル値をデータテーブル上でyyyy/M/dに変える方法はありますでしょうか?
DateTime.FromOADateメソッドで変換できます。ForEachRow内ですと例えば以下になります。
DateTime.FromOADate(CDbl(row("列名").ToString)).toString("yyyy/M/d")
ありがとうございます。
ForEachRow内じゃない場合はどうなりますか?
元のデータは、どのような変数(変数名と型名)に入っているか共有いただけますでしょうか?
ありがとうございます。
Datatable変数のdt
になります。
ありがとうございます。シリアル値を書き換えて格納することができました。
また日付以外にも問題があることがわかり、見た目には同じ「¥100,000」でも、
双方のデータテーブルでの値がそれぞれ「¥100,000」と「100000.2524」となっておりました。
後者を前者の値に合わせるようなこともできるものでしょうか?
双方のデータテーブルでの値がそれぞれ「¥100,000」と「100000.2524」となっておりました。
後者を前者の値に合わせるようなこともできるものでしょうか?
例えば以下の式で可能です。(円マークは半角になります)
CDbl("100000.2524").ToString("C",New System.Globalization.CultureInfo("ja-JP"))
内容がタイトルと離れつつありますので、必要に応じて別トピックにすると良いかと思います。
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.