C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.58785 の関連記事表示

<< 0 >>
■58785  C#でExcelオートフィルタ結果削除
□投稿者/ 5dogsFuji -(2011/04/26(Tue) 14:47:49)

    分類:[.NET 全般] 

    VisualStudio2008(C#)でExcelオブジェクトを利用したアプリ開発をしております。

    21列3000行ほどあるデータをExcelオートフィルタで絞りこみました。
    その結果を同シート内の最終行にコピーした上で、絞込み結果を削除(行削除し上に詰める)を行いたいのですが、項目行まで削除されてしまいます。
    コピーの時は項目行もコピーしたいのですが、削除はデータのみの削除をしたいです。

    オートフィルタとコピーは下記プログラムで実現できています。
    setRange1 = ((Excel.Range)this.xlsSSheet.get_Range(xlsSSheet.Cells[1, 1], xlsSSheet.Cells[xlsSSheet.UsedRange.Rows.Count, xlsSSheet.UsedRange.Columns.Count]));
    setRange1.AutoFilter(21, "*確認対象外*", Excel.XlAutoFilterOperator.xlAnd, Type.Missing,false);
    setRange1.SpecialCells(XlCellType.xlCellTypeVisible, Type.Missing).Copy(Type.Missing);
    setRange2 = (Excel.Range)this.xlsSSheet.Cells[this.xlsSSheet.UsedRange.Rows.Count+3, 1];
    setRange2.PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationNone, Type.Missing, Type.Missing);

    項目行を除いた見えているセルをどのようにしてRangeオブジェクトにセットするのかが
    分からず困っています。

    何とぞご教授をお願い致します。

親記事 /過去ログ98より / 関連記事表示
削除チェック/

■58787  Re[1]: C#でExcelオートフィルタ結果削除
□投稿者/ ちりめん -(2011/04/26(Tue) 15:04:56)
    No58785 (5dogsFuji さん) に返信

    項目行と削除対象行の違いは何ですか?
    シート状に項目行と削除対象行がどのように配置されているか分からないのですが、
    行削除時は削除対象行のみをフィルタすればいいのでは?
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58792  Re[2]: C#でExcelオートフィルタ結果削除
□投稿者/ 5dogsFuji -(2011/04/26(Tue) 16:00:49)
    ちりめんさん 早速のコメントありがとうございます。

    項目行と削除対象行の違いは、タイトルとデータです。(トンチンカンな答えですか?)
    フィルタ事態は希望通り行えているので問題ないのですが、フィルタ結果の
    可視範囲を先頭を1行オフセットした範囲をRangeオブジェクトにセットしたいのです。


    No58787 (ちりめん さん) に返信
    > ■No58785 (5dogsFuji さん) に返信
    >
    > 項目行と削除対象行の違いは何ですか?
    > シート状に項目行と削除対象行がどのように配置されているか分からないのですが、
    > 行削除時は削除対象行のみをフィルタすればいいのでは?
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58789  Re[1]: C#でExcelオートフィルタ結果削除
□投稿者/ shu -(2011/04/26(Tue) 15:16:25)
    No58785 (5dogsFuji さん) に返信

    Excelのマクロ記録でやりたい事の動きを保存してみるといいですよ。
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58794  Re[2]: C#でExcelオートフィルタ結果削除
□投稿者/ 5dogsFuji -(2011/04/26(Tue) 16:06:39)
    shuさん コメントありがとうございます。

    はい、投稿前にマクロ記録し、その上での質問でした。

    setRange1.SpecialCells(XlCellType.xlCellTypeVisible, Type.Missing).Copy(Type.Missing);
    のところで、先頭行を外した可視行という選択ができないものかな?と思ったのです。

    No58789 (shu さん) に返信
    > ■No58785 (5dogsFuji さん) に返信
    >
    > Excelのマクロ記録でやりたい事の動きを保存してみるといいですよ。
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58795  Re[3]: C#でExcelオートフィルタ結果削除
□投稿者/ shu -(2011/04/26(Tue) 17:23:27)
    No58794 (5dogsFuji さん) に返信
    > shuさん コメントありがとうございます。
    >
    > はい、投稿前にマクロ記録し、その上での質問でした。
    >
    > setRange1.SpecialCells(XlCellType.xlCellTypeVisible, Type.Missing).Copy(Type.Missing);
    > のところで、先頭行を外した可視行という選択ができないものかな?と思ったのです。
    >
    > ■No58789 (shu さん) に返信
    >>■No58785 (5dogsFuji さん) に返信
    >>
    >>Excelのマクロ記録でやりたい事の動きを保存してみるといいですよ。

    Excel上での操作が出来ないとなるとデータ範囲内のRangeのValueを配列に取得して、
    配列内の入れ替えをしてから戻すという方法もあります。ただし書式の入れ替えは出来ないので、
    各行の書式は統一されている必要があります。
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58797  Re[4]: C#でExcelオートフィルタ結果削除
□投稿者/ 5dogsFuji -(2011/04/26(Tue) 17:52:02)
    No58795 (shu さん) に返信
    > ■No58794 (5dogsFuji さん) に返信
    >>■No58789 (shu さん) に返信
    > >>■No58785 (5dogsFuji さん) に返信

    > Excel上での操作が出来ないとなるとデータ範囲内のRangeのValueを配列に取得して、
    > 配列内の入れ替えをしてから戻すという方法もあります。ただし書式の入れ替えは出来ないので、
    > 各行の書式は統一されている必要があります。

    Excel上では操作できます。
    オートフィルタ後の結果を選択して、編集-ジャンプ-セル選択で選択オプションの可視セルを
    選び削除するとタイトル行とその他データ(フィルタ抽出外)を残して、削除ができます。

    つまりフィルタ後の範囲を、タイトル行を除いてRangeオブジェクトにセットできれば
    できると思っています。

    このRangeオブジェクトセットが分からないのです。
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58798  Re[5]: C#でExcelオートフィルタ結果削除
□投稿者/ shu -(2011/04/26(Tue) 18:12:34)
    No58797 (5dogsFuji さん) に返信

    例えば提示されている
    > setRange1.SpecialCells(XlCellType.xlCellTypeVisible, Type.Missing)
    この部分ですがこれはRangeオブジェクトになってますが、これでは処理が出来ないということでしょうか?
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58812  Re[6]: C#でExcelオートフィルタ結果削除
□投稿者/ 5dogsFuji -(2011/04/27(Wed) 09:07:22)
    No58798 (shu さん) に返信
    > ■No58797 (5dogsFuji さん) に返信
    >
    > 例えば提示されている
    >>setRange1.SpecialCells(XlCellType.xlCellTypeVisible, Type.Missing)
    > この部分ですがこれはRangeオブジェクトになってますが、これでは処理が出来ないということでしょうか?


    shuさん、お付き合いいただき本当にありがとうございます。
    下記の通り、このsetRange1はオートフィルタを行うための範囲(タイトル行含む)をセットしています。

    setRange1 = ((Excel.Range)this.xlsSSheet.get_Range(xlsSSheet.Cells[1, 1], xlsSSheet.Cells[xlsSSheet.UsedRange.Rows.Count, xlsSSheet.UsedRange.Columns.Count]));
    setRange1.AutoFilter(21, "*確認対象外*", Excel.XlAutoFilterOperator.xlAnd, Type.Missing,false);

    つまり、このsetRange1の可視セルとするとタイトル行も含まれてしまうのです。
    オートフィルタ後の結果に対して新たに、「タイトル行を抜いた範囲」をRangeオブジェクトにセットするか、
    setRange1からタイトル行を省いて削除という処理ができないものかと・・・。
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58814  Re[7]: C#でExcelオートフィルタ結果削除
□投稿者/ shu -(2011/04/27(Wed) 09:18:45)
    No58812 (5dogsFuji さん) に返信

    > setRange1 = ((Excel.Range)this.xlsSSheet.get_Range(xlsSSheet.Cells[1, 1], xlsSSheet.Cells[xlsSSheet.UsedRange.Rows.Count, xlsSSheet.UsedRange.Columns.Count]));
    ここにタイトル行が含まれているのだから、1行目でなく2行目からにすればいいのでは?



記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58839  Re[7]: C#でExcelオートフィルタ結果削除
□投稿者/ ちりめん -(2011/04/27(Wed) 16:47:44)
    No58812 (5dogsFuji さん) に返信

    あぁ、なるほど。項目行の意味が分かりました。
    フィルタの▼の表示される、見出し行のことですね。
    それならば、フィルタをかけた後にのRangeを項目行を含まない範囲にして、それで行削除したらいいのでは?
    (これは、具体的にどのようにRangeが取得されるか、マクロの記録を使って確認した方がいいでしょう。)
記事No.58785 のレス /過去ログ98より / 関連記事表示
削除チェック/

■58838  Re[8]: C#でExcelオートフィルタ結果削除
□投稿者/ 5dogsFuji -(2011/04/27(Wed) 16:43:51)
    No58814 (shu さん) に返信
    > ■No58812 (5dogsFuji さん) に返信
    >
    >>setRange1 = ((Excel.Range)this.xlsSSheet.get_Range(xlsSSheet.Cells[1, 1], xlsSSheet.Cells[xlsSSheet.UsedRange.Rows.Count, xlsSSheet.UsedRange.Columns.Count]));
    > ここにタイトル行が含まれているのだから、1行目でなく2行目からにすればいいのでは?

    この時間まで、ああでもないこうでもないと試行錯誤しましたが、結局アドバイスの通り
    タイトル行を先にコピーし、オートフィルタをタイトル行を除いた範囲で実行し、その結果を
    貼り付けたタイトル行の下に貼り付けました。

    オートフィルタ後の行オフセットができると便利だなぁと思ってたのですが、とりあえず
    やりたい事が実現できたので、解決済みとさせていただきます。

    shuさん、アドバイスありがとうございました。
    また何かありましたら、よろしくお願い致します。
記事No.58785 のレス / END /過去ログ98より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -