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

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

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

No.43519 の関連記事表示

<< 0 >>
■43519  VS2008 C# にてVSTOにてセル範囲の指定方法
□投稿者/ msnr -(2009/11/11(Wed) 23:43:07)

    分類:[C#] 

    VSTOの勉強中です。
    今まではVBAを使っていたのですが、そろそろVSTOに転向しようと
    思うのですがオブジェクトモデルを見ても分かりにくく困っています。
    以下のコードですが、簡単な内容で
    ワークブックを開くとA列の1〜5行目まで各々の行数が入力され
    閉じる直前にコンテンツをクリアするものです。


    namespace ExcelWorkbook1
    {
    public partial class Sheet1
    {
    private void Sheet1_Startup(object sender, System.EventArgs e)
    {
    long i = 1;

    MessageBox.Show("Try VSTO");
    do
    {
    this.Application.Cells[i , 1]=i+"行";
    i++ ;
    }while(i <= 5);
    }

    private void Sheet1_Shutdown(object sender, System.EventArgs e)
    {
         /// ここでA列1〜5行の文字列をクリアしたいのです。
    }

    3行上でクリアしたいのですが、ループ処理を使わずクリアしたいのです。
    いわゆるVBAで言う
    Excel.Worksheets1.Cells(Worksheets1.Cells(1,1),Worksheets1.Cells(1,5)).Clear

    Excel.Worksheets1.Range("A1:A5").Clear

    の様な記述はどの様にすれば良いのでしょうか?

    経験浅く、分かり難い質問ですが識者の皆様、ご教授下さい。

    よろしくお願いいたします。
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43520  Re[1]: VS2008 C# にてVSTOにてセル範囲の指定方法
□投稿者/ msnr -(2009/11/11(Wed) 23:51:50)
    すいません、書き忘れました。

    開発環境は VS2008 Professional
    使用OSは  Windows XP Professional
    Officeは  2007 Professionalです。
記事No.43519 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43523  Re[1]: VS2008 C# にてVSTOにてセル範囲の指定方法
□投稿者/ 裕猫 -(2009/11/12(Thu) 08:37:46)
    No43519 (msnr さん) に返信
    > VSTOの勉強中です。
    > 今まではVBAを使っていたのですが、そろそろVSTOに転向しようと
    > 思うのですがオブジェクトモデルを見ても分かりにくく困っています。
    > 以下のコードですが、簡単な内容で
    > ワークブックを開くとA列の1〜5行目まで各々の行数が入力され
    > 閉じる直前にコンテンツをクリアするものです。
    >
    >
    > namespace ExcelWorkbook1
    > {
    > public partial class Sheet1
    > {
    > private void Sheet1_Startup(object sender, System.EventArgs e)
    > {
    > long i = 1;
    >
    > MessageBox.Show("Try VSTO");
    > do
    > {
    > this.Application.Cells[i , 1]=i+"行";
    > i++ ;
    > }while(i <= 5);
    > }
    >
    > private void Sheet1_Shutdown(object sender, System.EventArgs e)
    > {
    >      /// ここでA列1〜5行の文字列をクリアしたいのです。
    > }
    >
    > 3行上でクリアしたいのですが、ループ処理を使わずクリアしたいのです。
    > いわゆるVBAで言う
    > Excel.Worksheets1.Cells(Worksheets1.Cells(1,1),Worksheets1.Cells(1,5)).Clear
    > や
    > Excel.Worksheets1.Range("A1:A5").Clear
    >
    > の様な記述はどの様にすれば良いのでしょうか?
    >
    > 経験浅く、分かり難い質問ですが識者の皆様、ご教授下さい。
    >
    > よろしくお願いいたします。
    ループを使いたくないのはなぜでしょう?行数が多くなるからでしょうか?私も聞くことが多い身なので回答はないのですが、もし文字数
    を気にするのでしたら
    > do
    > {
    > this.Application.Cells[i , 1]=i+"行";
    > i++ ;
    > }while(i <= 5);

    for(int i = 0; i <= 5; i++)
    {
    this.Application.Cells[i , 1]=i+"行";
    }
    という書き方があります。
    while(i <= 5)
    {
    this.Application.Cells[i , 1]=i+"行";
    i++ ;
    }
    でもいい。ほんの少しですが文字数減らせます。たわごと程度の参考にどうぞ。
記事No.43519 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43535  Re[1]: VS2008 C# にてVSTOにてセル範囲の指定方法
□投稿者/ 魔界の仮面弁士 -(2009/11/12(Thu) 11:12:07)
    No43519 (msnr さん) に返信
    > 思うのですがオブジェクトモデルを見ても分かりにくく困っています。
    オブジェクトモデル自体は、VBA と殆ど一緒なのですが、
     ・Optional 引数
     ・名前付き引数
     ・引数付きプロパティ
    などが、現行バージョンの C# では使えないので、
    言語制限上、VB.NET/VBA とは多少異なる構文になりがちですね。


    > ワークブックを開くとA列の1〜5行目まで各々の行数が入力され
    ブック上の、どのシートのA列でしょうか。

    今回の場合、Sheet1 のイベントを使っているのですから
    「アクティブなシート」ではなく、「Sheet1」を対象にするのですよね?
    だとしたら、Application.Cells ではなく、this.Cells を使うべきかと。

    > Excel.Worksheets1.Range("A1:A5").Clear
    VB.NET であればそのようにも指定できますが、C# では第2引数の省略が出来ないので、
     〜.Range["A1:A5", System.Type.Missing].Clear();
    とする事になります。もしくは、
     〜.Range["A1", "A5"].Clear();
    という書き方もできますね。
記事No.43519 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43593  Re[2]: VS2008 C# にてVSTOにてセル範囲の指定方法
□投稿者/ msnr -(2009/11/13(Fri) 00:44:58)
    No43535 (魔界の仮面弁士 さん) に返信
    
    > 今回の場合、Sheet1 のイベントを使っているのですから
    > 「アクティブなシート」ではなく、「Sheet1」を対象にするのですよね?
    > だとしたら、Application.Cells ではなく、this.Cells を使うべきかと。
    > 
    >>Excel.Worksheets1.Range("A1:A5").Clear
    > VB.NET であればそのようにも指定できますが、C# では第2引数の省略が出来ないので、
    >  〜.Range["A1:A5", System.Type.Missing].Clear();
    > とする事になります。もしくは、
    >  〜.Range["A1", "A5"].Clear();
    > という書き方もできますね。
    
    魔界の仮面弁士 さん、ありがとうございます。
    ごもっともです。すごく勉強になります!!
    
    処理に関しては
    this.Range["A1:A5", System.Type.Missing].Clear();
    こちらで処理できました。
    もちろん〜.Range["A1", "A5"].Clear();でも出来ましたが。
    今後C#を勉強していくので前者のC#らしい記述でまずは勉強です。
    
    裕猫さんもありがとうございます!!
    >ループを使いたくないのはなぜでしょう?行数が多くなるからでしょうか?私も聞くこと
    >が多い身なので回答はないのですが、もし文字数を気にするのでしたら
    
    こちらに関しては、特にコーディングの量にはまだ意識してないのですが
    例えば、下記の例でいくと
    do
    {
        this.Application.Cells[i , 1]=i+"行";
        i++ ;
    }while(i <= 5);
    このままのソースならたかだか5回ループするだけなので
    Excel.Rangeオブジェクトへのアクセス回数は5回となりますが
    
    }while(i <= 10000);
    
    となった時は、アクセス回数は10000回となりますので非常に
    鈍足な処理となってしまうかと思い、この様に考えました。
    
    for,Whileステートメントのご指南ありがとうございます!!
    これから徐々に色々覚えながら頑張ります!!
    
    もうひとつ教えてください!!
    VSTOに関する書籍は調べてもあまり無いのですが、もし何かお勧めがあれば
    ご紹介頂けないでしょうか?
    よろしくお願いします!!
    
    しかしC#言語とは、何かとVB6.0に比べてスマートにコードが出来るように
    感じます。
    
    # 個人的にはVB/VB.NETのWith句は非常に好きなのですが・・・・
    
記事No.43519 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43599  Re[3]: VS2008 C# にてVSTOにてセル範囲の指定方法
□投稿者/ 裕猫 -(2009/11/13(Fri) 09:02:25)
    No43593 (msnr さん) に返信
    > ■No43535 (魔界の仮面弁士 さん) に返信
    >
    >>今回の場合、Sheet1 のイベントを使っているのですから
    >>「アクティブなシート」ではなく、「Sheet1」を対象にするのですよね?
    >>だとしたら、Application.Cells ではなく、this.Cells を使うべきかと。
    >>
    > >>Excel.Worksheets1.Range("A1:A5").Clear
    >>VB.NET であればそのようにも指定できますが、C# では第2引数の省略が出来ないので、
    >> 〜.Range["A1:A5", System.Type.Missing].Clear();
    >>とする事になります。もしくは、
    >> 〜.Range["A1", "A5"].Clear();
    >>という書き方もできますね。
    >
    > 処理に関しては
    > this.Range["A1:A5", System.Type.Missing].Clear();
    > こちらで処理できました。
    > もちろん〜.Range["A1", "A5"].Clear();でも出来ましたが。
    > 今後C#を勉強していくので前者のC#らしい記述でまずは勉強です。
    >
    > こちらに関しては、特にコーディングの量にはまだ意識してないのですが
    > 例えば、下記の例でいくと
    > do
    > {
    > this.Application.Cells[i , 1]=i+"行";
    >  i++ ;
    > }while(i <= 5);
    > このままのソースならたかだか5回ループするだけなので
    > Excel.Rangeオブジェクトへのアクセス回数は5回となりますが
    >
    > }while(i <= 10000);
    >
    > となった時は、アクセス回数は10000回となりますので非常に
    > 鈍足な処理となってしまうかと思い、この様に考えました。
    >
    確かにおっしゃるとうりですね。Clearの使い方大変参考になりました。ありがとうございます。

    > もうひとつ教えてください!!
    > VSTOに関する書籍は調べてもあまり無いのですが、もし何かお勧めがあれば
    > ご紹介頂けないでしょうか?
    > よろしくお願いします!!
    >
    私も浅学ゆえ紹介できないのですが、同じくBASICから来た身なので共に学んでいきたいと思います。おたがいに頑張りましょう。
記事No.43519 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43625  Re[4]: VS2008 C# にてVSTOにてセル範囲の指定方法
□投稿者/ msnr -(2009/11/13(Fri) 18:49:41)
    No43599 (裕猫 さん) に返信
    > 私も浅学ゆえ紹介できないのですが、同じくBASICから来た身なので共に学んでいきたいと思います。おたがいに頑張りましょう。

    ありがたいお言葉、感謝いたします。
    また何か機会が有りましたら、ご助力ください!!

    それでは裕猫さん、魔界の仮面弁士さん ありがとうございました。

    今後ともよろしくお願いします。
記事No.43519 のレス / END /過去ログ74より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -