C#-4.0 と Excel.Interop を使用して .dbf から変換された Excel 97-2003 .xls スプレッドシートがあります。データは列 D に従って日付順に並べ替えられます。
http://www.tiikoni.com/tis/view/?id=af4cf69
ここで、選択した範囲 (画像に表示) を列 G で並べ替えて、空白のセルが選択した範囲の一番下になるようにする必要があります。
画像は正しく表示されていますが、これは入力ソースから取得したデータが正しい順序で入力されたためです。データが正しい順序で入力されていない場合、空のセルが最初から G 列の一番下にない可能性があります。
これは私が持っているもので、D の日付範囲 (1 日) ごとに並べ替えを行います。
Range incasariSortRange;
Range sRange;
int startDateRowIndex = 6; // index of row where a D date starts
int endDateRowIndex = 6; // index of row where the same D date ends
public void selectGroupRange()
{
for (int r = startDateRowIndex; r < rowIndex; r++)
{
if (worksheet.Cells[endDateRowIndex, 4].Value == worksheet.Cells[r, 4].Value)
{
endDateRowIndex = r;
}
else
{
incasariSortRange = worksheet.get_Range("B" + startDateRowIndex, "H" + endDateRowIndex);
sRange = incasariSortRange.get_Range("G" + startDateRowIndex, "G" + endDateRowIndex);
// Sort the first 'D' date range's row by wether the cells in column 'G'
//of that range have any values (to be the first ones) or not (to be the last ones).
incasariSortRange.Sort(sRange, XlSortOrder.xlAscending,
Type.Missing, Type.Missing, XlSortOrder.xlAscending,
Type.Missing, XlSortOrder.xlAscending, XlYesNoGuess.xlNo, Type.Missing,
Type.Missing, XlSortOrientation.xlSortColumns, XlSortMethod.xlPinYin, XlSortDataOption.xlSortNormal,
XlSortDataOption.xlSortNormal, XlSortDataOption.xlSortNormal);
// Set the start and end (date) row indexes to the same so the incasariSortRange will be one row only.
startDateRowIndex = r; // set the start to a new date
endDateRowIndex = r; // set the end to the same new date
}
}
}
「rowIndex」は、スプレッドシート内のデータを含む最後の行の後の行のインデックス番号です。
ただし、ここに示すように、列 G の空白セルが選択範囲の先頭になるように行を並べ替えます。
http://www.tiikoni.com/tis/view/?id=ea48320
私の2番目の質問は、この並べ替えを行った後、選択した範囲から列Gのセルが空白ではない行のみを選択するにはどうすればよいですか? -それらをもう一度並べ替えることができるように。
ありがとうございました。