• ベストアンサー

VB.NETで既存Excel worksheetを操作する方法

VB.net、office XPのexcelを使用しています。 既存のexcelのworkbookのworksheetの特定のセルに、 値を代入してsaveする方法について、 ご存知の方、教えてください。 新規のworkbookのsheet1になら、値を入れることは できるのですが、既存workbookのworksheetに する方法がわかりません。 よろしくお願いいたします。

  • ssi77
  • お礼率76% (32/42)

質問者が選んだベストアンサー

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

ん~、 System.GC.Collect() がうまく機能していないんでしょうかねぇ。 ちなみに、当方はWinXP + Excel2000の環境ですが、上記の1行を実行すれば、正常にExcelプロセスが開放されます。 ……あ、そっか、 他のbookHogeとかshtHogeとかの変数も、Nothingしてやってください。 **********   '保存して閉じる   bookHoge.save()   bookHoge.close()   shtHoge = Nothing   bookHoge = Nothing   xlApp.quit()   xlApp = Nothing ********** ココに書き込むときにソースコードを修正したんですが、そのときに抜けちゃったんでしょうかねぇ。

ssi77
質問者

お礼

返答ありがとうございます!!! うまくいきました!!! 助かりました。 もうし遅れましたが、環境は、 WinXp proとOfficeXP Excelです。

その他の回答 (1)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

ん~と、こんな感じです。 Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click   Dim xlApp As System.Object   Dim bookHoge As System.Object   Dim shtHoge As System.Object   'Excelアプリケーションオブジェクトを生成   xlApp = CreateObject("Excel.Application")   'ワークブック開く   bookHoge = xlApp.Workbooks.Open("C:\hoge.xls")   'ワークシートの操作   shtHoge = bookHoge.worksheets("SheetHoge")   shtHoge.range("A3").value = "あああ"   shtHoge.range("D2").value = 1   '保存して閉じる   bookHoge.save()   bookHoge.close()   xlApp.quit()   xlApp = Nothing   '※ .net では、Nothingしてもメモリが開放されないことに注意。   'ここでは強制的にガベージコレクタを起動することにより、xlAppを開放して、   'ワークブックの排他制御を止めさせる。   System.GC.Collect() End Sub

ssi77
質問者

お礼

返答ありがとうございます。 うまくExcelシートが作れるようになりました。 その出力したシートをエクスプローラから 起動すると、画面が崩れたような形になります。 それで、Excelを終了し、再度立ち上げると、 うまく起動します。 また、出力後、VB Studio.netを終了し、出力したシートを起動すると、まったく問題なく立ち上がります。 VBのプロセスが、Excelプロセスをつかんだままに なったままのような気がするのですが。。。

関連するQ&A

  • VB.net(2003)でのexcel操作

    現在vb.netを使用してのExcelそうさプログラミングを作っており、excel sheetへの文字入力はできるようになりました。そこで質問なのですが、excelシートの特定のセルの値が5だった場合にその隣のセルのあたいを10にするというプログラムを作りたいのですが、VBAではとても簡単なのですが、vb.netを使用してどのようにやればよいかがわからないのでご教示いただきたいです。activecell.offset(0,1)やcells.findのような、VBAをVB.netから使用する方法はあるのでしょうか?

  • VB6にてエクセルのセルに貼り付けで・・・

    お願いします。VB6にてエクセルの任意のセルへデータを貼り付けたいのですが、そのエクセルにauto_openが含まれていてフォームを開くようになっています。 Option Explicit Dim objExcelApp As Workbook ---------------------------- strExcelFile = "C:\A.xls" strExcelSheet = "Sheet1" objExcelApp.ActiveSheet.Cells(1, 1).Value = "A" ではフォームが開いて更新ができません。エクセルを開かずに値をセルへ代入できないものでしょうか? どうかお願いします。

  • Access2000:既存のエクセルファイルの操作

    クエリから抽出した値を既存のエクセルファイルに 書き込む宣言の方法を教えてください。 ・既存シートに書き込む ・シートを追加後、書き込む ・任意のセルに書き込む 上記の方法もよろしくお願いいたします。

  • VB.NETでExcelファイルを読み込むには?

    初心者です。vb.netでExcelのファイルを読み込み、特定のセルからデータを取得したいのですが、(例)登録一覧.xls ファイル の学生番号(セル:A4)の値を取得)ネットで調べてもよくわからなくて困っています。何か良い方法があれば教えてください。よろしくお願いします。

  • VB.net(2005)でエクセルの特定名称のシートを操作したい。

      お世話になります。 WindowsXP + SP3、VB.net(2005)の環境にて開発をしております。 VB.netから既存のエクセルファイル(雛形)を開き、特定の名称のシートを アクティブにしたいのですがどのようにコーディングすれば良いでしょうか? ※色々とネットで情報検索してみましたが特定の名前のシートを操作する  方法をうまく見つけられず質問致しました。 エクセルファイル名:売上情報_2009年.xls シート名     :"200901" ~ "200912" の12シート 以前、VB6で同様のことを行ったときは以下のような記述で実現できました。 Dim xlApp As Object Dim xlsheet As Object xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open(FileName:="C:\売上情報_2009年.xls") xlsheet = xlApp.Sheets("200908") xlsheet.Activate() 現状、vb.netで以下のコーディングまではできております。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlBook As Excel.Workbook = xlBooks.Open("C:\売上情報_200904.xls") Dim xlSheets As Excel.Sheets = xlBook.Worksheets よろしくお願い致します。  

  • VB.NETでのEecelデータの読み込みについて

    VB.netを使用しています。 過去ログを参考にして、Excel値の読み込みのプログラム作成をしています。 下記のコードでerrorはでないのですが、正常な値を読み込んでくれません。どなたかアドバイスお願いします。 ※sampleファイルのsheet1のセルA1の値をLabel1に読み込みたい このコードを実行するとLabel1に "System.__ComObject" と表示されてしまう。 セルA1には"100"という数値が入っています。 Dim excelFilePath As String = "C:\sample.xls" Dim Excel As Excel.Application Dim ExcelBook As Excel.Workbook Dim ExcelSheet As Excel.Worksheet Excel = CType(CreateObject("Excel.application"), Excel.Application) ExcelBook = CType(Excel.Workbooks.Open(excelFilePath), Excel.Workbook) ExcelSheet = CType(ExcelBook.Worksheets(1), Excel.Worksheet) Label1.Text = ExcelSheet.Cells(1, 1).ToString

  • VB6.0でVB上にExcel

    VB上にExcelオブジェクトを貼り付け、特定の条件に当てはまったとき既存のExcelファイルのSheet1を乗せたいという場合は、どうすればいいのでしょうか?

  • vb.netによるEXCEL値取得

    いつも参考にさせていただいております。 現在、VS2005 VB.netで開発をしており、 EXCELの特定のセルの値を取得する方法は過去記事等で理解いたしましたが 式の入ったセルに対して、期待通りに値を取得できません。 対象のセルには名前定義が施されており その定義にはシートの印刷ページ数が取得できるマクロが組み込まれております。 ですので見た目にはセルに数字が入っている状態です。 取得したいのは単純にその数字なのですが、 ・ ・ (省略) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) (省略) ・ ・ Dim result AsString = "" result = xlSheet.Cells(1,1).Text この方式で実行するとresultに$NAME#のような結果が格納されてしまいます。 オブジェクトブラウザにてプロパティを見てみたのですが 該当するようなものも見つからず困っております。 どなたかご存知のことありましたら、 ぜひともご助力ください。 よろしくお願いします。

  • VBからExcelのシートを操作する

     VBからExcelを操作するのですが、  たとえば、Book1のSheet1 を Book2のSheet1の後ろへ  という形でシートをコピーしたいのですがうまくいきません。    Sheet1,Sheet2を Excel.Worksheet 型で定義した変数へそれぞれ取得し、Sheet1のcopyメソッドを使って試しています。  Sheet1.copy のみだと、新たなブックへきちんとコピーされるのですが、After:= Sheet2 をつけるとエラーが起きてしまいます。  この方法で、また、他の方法でもうまくいく方法を御存知の方、何卒御教授のほどをお願いします。

  • VB.NETでのExcelの印刷について

    環境:XP-Pro  VisualStudio.NET2003 VB.NET VBAについて。 【1】VB.NETを使ってExcelを表示しないで印刷を行います。 その時に印刷用紙を横にしたいのですが、方法がわかりません。 Excel.Worksheet.Range("A1:N9").Orientation = 例:xlLandscapeなどで 試したのですが、うまくできませんでした。 どなたかご存知でしたら教えて頂けませんか? 【2】それと印刷時にExcelを表示させずに、プレビューを出したいのですが、 PrintPreview()をプログラムに追加したらプレビューが表示されずに 固まってしまいます。 引数などが必要ですか?

専門家に質問してみよう