インデックスおよび長さは文字列内の場所を参照しなければなりません

お世話になっております。

特定列で重複する文字列がある場合、
他の列が重複していなくても1行削除する 処理を行いたく、
以前、こちらで教えて頂いた式を使っておりました。

実行した所、以下のエラーとなりました。
『インデックスおよび長さは文字列内の場所を参照しなければなりません』

どの部分を修正したら良いか教えて頂きたくよろしくお願い致します。

左辺:元dt
右辺:元dt.AsEnumerable.GroupBy(Function(r) r(“重複検索列タイトル”).ToString).Select(Function(g) 元dt.Clone.LoadDataRow(g.OrderBy(Function(r) r(“dt左端列タイトル”).ToString.Substring(1,1)).First().ItemArray,False)).CopyToDataTable

お疲れ様です。

100%ではないですが、このエラーの元は多分Substringからきます。Substring(1,1)は二つ目の文字を取ります。最初の1は0に変えてみてください。

右辺:元dt.AsEnumerable.GroupBy(Function(r) r(“重複検索列タイトル”).ToString).Select(Function(g) 元dt.Clone.LoadDataRow(g.OrderBy(Function(r) r(“dt左端列タイトル”).ToString.Substring(0,1)).First().ItemArray,False)).CopyToDataTable

よろしくお願いいたします。

1 Like

GT_Ropa様

ありがとうございます。
教えて頂いた通り、0に変更したところ、エラーなく、希望通り重複データが削除出来ました。
本当にありがとうございました。

こんにちは
既に解決済みですが...

もとTopicは以下かと思いますが、SubStringの最初の引数を0に変更した場合、元の条件である2文字目という条件は満たされなくなります(最初の1文字になります)が、問題ありませんか?

当該列のデータが想定と異なるようでしたら、それを含めた新たな条件を設定する必要があるかもしれません。

1 Like

Yoichi様

いつもお世話になっております。
元topicは仰る通りです。
以前Yoichi様に教えて頂いた式を利用しようとしておりました。
今回は重複検索列が重複していた場合、1行のみ残し、残りを削除、残す行については指定なし と、しようとしておりました。
式の解読が出来ず、以前の2文字目の判定を残したまま使用していた為、エラーとなってしまいました。

こんにちは

1文字目あるいは2文字目という条件がないのであれば
.Substring(0,1) の部分は不要なので削除してしまっても問題ありません。
(文字コード順の並びにしたときの最初の行が残ります。上記は2文字目の
指定があったので、SubStringが使用していました。あるいは空欄がある場合は
SubString(0,1)がエラーの要因にもなりますので)

1 Like

Yoichi様

いつも本当にありがとうございます。
.Substring(0,1)が削除行を決めていたのですね。
列「仕入先」の指定はどこでされていましたか。
後学の為に、教えて頂きたいです。

今回は空欄の場合も考えられますので
.Substring(0,1)を削除し、運用します。
本当にありがとうございます。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.