none
VBよりエクセルシートに値を入力 RRS feed

  • 質問

  •  こんにちは。

     

     いま、計算した答えと入力値をせエクセルに直に落としたいとおもっています。

     いまはテキストにSTREAMWRITERコマンドで落としている程度の理解力です。

     

     今は

     このように記述して値をテクストに落としてエクセルにコピーしています。

     間違いの内容にすぐに落とせる方法・記述あれば教えていただけないでしょうか?

     

    ***************************************************************

     Private Sub SaveButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveButton.Click
            Dim file As System.IO.StreamWriter
            file = My.Computer.FileSystem.OpenTextFileWriter("c:\BASE_IIBS.txt", True)                        '場所指定
            file.WriteLine(InputR1TextBox.Text + "," + InputRG.Text + "," + InputW1TextBox.Text + "," + AnswerTextBox.Text _
                          + "," + InputG1.Text + "," + InputN1TextBox.Text + "," + InputM1.Text + " 0.17" + "," _
      + "," + DateTime.Text + "," + Input1RichTextBox.Text)                             '出力値
            file.Close()               '指定抵抗値R 補正抵抗値Rg W L Lg n ρs 誤差(抵抗値)時間 備考
        End Sub

     

     

    ***************************************************************

    ご助言いただけると幸いです。 

    2007年8月23日 9:44

回答

  • 回答は続けても良いのでしょうか。

    .NET からとなると Office PIA か VSTO を使う方法になるでしょう。
    しかしこれらは個人的にはお勧めできません。(COM の面倒 / VSTO の費用)

    私ならば Excel VBA もしくは VBScript などに実装したい処理を書いておき、
    それを .NET から実行させることで .NET 側のソースは最小限に抑えます。

    2007年8月27日 13:07

すべての返信

  • こんにちは。

    まず StreamWriter はコマンドではなくクラスです。
    Excel Workbook はテキスト形式でないため、StreamWriter クラスでは無理でしょう。

    テキスト形式である CSV ファイルであれば可能ですが、これは Excel シートとは言いません。

    2007年8月23日 10:24
  • 外池と申します。

     

    本当のところ、どれぐらいの操作量(手間)が許容できて、どれぐらいの自動化が必須(手間が許されない)のか、よくよくご検討ください。

     

    目下のところ、どのような操作をしているのか、もう少し、詳しく紹介してもらえませんか?

     

    テクストに落として、エクセルにコピー」と仰っても、notepadからエクセルにセルごとにコピーしているのか、エクセルのインポート機能を使ってテクストファイル全体を一気にエクセルのシートに読み込んでいるのか、だいぶ操作量が違いますよね?

     

    そして、目標とするところは、どれぐらい楽チンな操作なのか?

     

    例えば、お示し頂いたプログラムは、ちゃんとコンマ区切りのフォーマットで吐き出しているようなので、ファイル名の拡張子を「.csv」にさえすれば、そのファイルをダブルクリックすれば、とりあえず、エクセルで綺麗に開くはずです。それとも、HINAGESHIさんのプログラムが走っている状態で、一方で、エクセルも立ち上げておいて、HINAGESHIさんのプログラムの方で「保存」の操作をすると逐一エクセルのシートに値が代入されていく、というようなことをお考えでしょうか?

     

    私も、測定データを多数得てエクセルで処理する作業はよくやりますが、前段の「測定データを得る」ところをVBでプログラムを書いて、.csvファイルに吐き出すようにしています。その上で、.csvファイルをダブルクリックでエクセルを起動して、後は、エクセルの方の工夫で楽に処理できるようにする、というのが、一番多いパターンですね。まぁ、内製のプログラムで、極少人数のユーザーしか居ないので、できることではありますが。

     

     

     

     

    2007年8月24日 0:35
  • 外池様

     

     ご丁寧にご回答ありがとうございます。

     

     作業について、テキストでなくエクセルかと理由については

     ①お客様の要望

     ②データ量が多い。計算式と近似値のチェック、エラー時のメッセージ等は書けるようになっています。

      ただしデータ量が多いため複数でひとつのデータをまとめるときに、テキスト経由だと人の手違いが多発しています。

     (これはその方々の慣れにもありますが、今のチームではその手順だけで時間をとられています)

     (エクセルに不慣れな方が多いと最近知りました。)

     

      現在マウスでコピー^・ペーストでエクセルに貼り付けて提出資料作成しています。

     ③データ移動のときにソフトをいくつも介するのが不安。

     

     私は③が一番不安ですね。入出力の記述を載せていますがその上に

     条件によって計算式を場合わけしていることもあり、エクセルでもし他の誰かがドラッグや解除

     をしてしまえば本当に間違いないファイルとデータをもらっているのかわからなくなります。(5人で作業しています)

     データ管理の立場に今あるので、その手順を明瞭・簡単にしたいです。

     

     目標は大量のデータを間違いなく、提出する(誤差も計算しています)

     今の理想は、外池様がかいてくださっているのと同じで

     [保存]ボタンを押すとつく位置エクセルシートに値が代入されていくというVISIONです。

      

     VBとの話は異なりますがエクセルにインポート機能があるのは存じませんでした。もしよろしければその方法おしいえていただけないでしょうか?

     

     

    詳しく書いていただきありがとうございます。またご返信いただけると幸いです。
    2007年8月27日 11:10
  • こんにちは。

     

    そうですよねCSVファイルではなくエクセル直接入出力が理想です。

     

     クラスというかたまりをまだあまり理解できていないですね。

     

     ご回答ありがとうございます。

     

    2007年8月27日 11:12
  • 回答は続けても良いのでしょうか。

    .NET からとなると Office PIA か VSTO を使う方法になるでしょう。
    しかしこれらは個人的にはお勧めできません。(COM の面倒 / VSTO の費用)

    私ならば Excel VBA もしくは VBScript などに実装したい処理を書いておき、
    それを .NET から実行させることで .NET 側のソースは最小限に抑えます。

    2007年8月27日 13:07
  • 外池です。

     

    詳細はまだよくわからないながらも、目指しておられるイメージはよくわかりました。

     

    .Net以前であれば、VBから見て、ExcelはActiveX EXEのオブジェクトとして取り扱えました。この場合は、ユーザーとのインターフェイスの主はVBアプリであって、Excelは従です。逆に、Excelをインターフェイスの主にして、Excelでは扱いきれない(扱いが非常に面倒)な処理をVBでActiveX DLLとして作成するような考え方をしたのですが・・・、

     

    私としては、.Netになってから、この辺りの「主」と「従」の選択の仕方が、よくわからなくなってしまっています。

     

    で、改めてお伺いしますが、Excelにデータを流し込む元のデータですが、計測器か何かから自動的に採って来たものですか? と言いますのも、作ろうとされているアプリからExcelへデータを流し込むタイミングは、実質、ユーザー(人)依存なのか、それとも、計測器の測定のタイミング依存なのか、「主」と「従」の関係を決める上で重要になりそうな気がします。

     

     

     

    2007年8月28日 0:01
  •  

     じゃんぬねっと様

     

     回答していただいてOKです。なにぶんEXCELLでVBAを試したことがありません。

     

     VBscriptというのは何かのツールでしょうか?

     

     EXCELL VBAに[処理をかいて.NETから実行というのはどのようなフローでしょうか?

     あまりまだイメージがつかめてないんですね。経験不足です。

     

     よろしくおねがいいたします。

     

    2007年8月28日 6:07
  •  外池様

     

     ご返信ありがとうございます。HINAGESIです。

     

     EXCELLに流し込むデータはVBで 計算式に入力した値と答えです。

     

     デザイン画面にて

     (計算式を書いて、入力値をBOXにおき、その中に値を入れて解を算出しています)

     

     □=□×100/□×23.4□

     

     この資格に指定地を入力して他の方に計算結果をテキストか手でコピーしたエクセルで

     頂いています。

     

     そのVB上の計算値と解をEXCELLに直接落とすのが今の目的です。

     データを流し込むタイミングはユーザー依存です。

     

     **************************************

     外池様は装置をVBで駆動されたことがるんですね。

     

    2007年8月28日 6:24
  • HINAGESHI さん、こんにちは。

     HINAGESHI さんからの引用
    VBscriptというのは何かのツールでしょうか?

    VBScript で検索して頂けるとわかるかと思いますが、いわゆるスクリプト言語の一種です。
    別に VBScript でなくてもかまいません。 VB6 でも良いです。


    EXCEL VBAに 処理をかいて.NETから実行というのはどのようなフローでしょうか?

    たとえば、VB6 でこれらの処理を実装して EXE を作ったとします。
    あとはこの EXE を System.Diagnostics.Process クラスの Start メソッドで実行できます。


    Script を使う方法のひとつとして、ScriptControl を使うという手段もあります。

    どうやって実装していくのかをまずは検討してみてください。

    2007年8月28日 7:12