vb.netでEXCEl出力

このQ&Aのポイント
  • VB.NETを使ってDataGridViewに表示されたデータをEXCELに出力する方法について質問です。
  • 現在DataGridViewに表示した内容をEXCELに出力する方法を探しています。
  • VB.NETの初心者ですが、ボタンを押すとDataGridViewのデータをEXCELに表示する方法が分かりません。
回答を見る
  • ベストアンサー

vb.netでEXCEl出力

VB.NETを始めて2週間ほどの初心者ですがお願いします。 現在DataGridViewに表示した内容を、ボタン押下によEXCELに表示するという段階で悩んでおります。 現状としては、ボタン押下によりEXCELを開くところまで終了していますが、どうすればDataTableの情報をEXCELに表示できるのかが 色んな質問を見させていただいたのですが分かりません。 お忙しいとは思いますがよろしくお願いします。 現在のEXCELを表示しているソースです Dim oExcel As New Excel.ApplicationClass Dim xlBooks As Excel.Workbooks ' xlApplication から WorkBooks を取得する xlBooks = oExcel.Workbooks ' 新しい Excel ブックを追加する xlBooks.Add() 'Excelを表示する oExcel.Application.Visible = True 環境としまして Microsoft Viosual Basic 2008 Express Edition VB.NET WinXP pro まだ質問する上で何の情報が必要なのかもわかりませんので、必要な情報がありましたら教えてください。

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

  • ベストアンサー
  • korin_
  • ベストアンサー率69% (46/66)
回答No.2

> 1と2と二通り方法があるということでよろしいでしょうか? はい、そうです。説明不足ですみませんでした。 > 知識不足のため1の方がよく理解できていないので ちなみに1の方は、ODBCのデータソースにEXCELへの接続を追加して、通常のデータベースのようにデータを追加する方法です。 > 2の方の質問なんですがDataTableのデータを配列にするというのは 行と列に分けるという事でしょうか? そうですね。以下のように、行と列を持つ2次元配列にします。 --------------------------------------------------------------------- Dim count As Integer = dtTable.Rows.Count - 1 Dim data(count, 3) As String For i As Integer = 0 To count - 1 Dim row As DataRow = CType(dtTable.Rows(i), DataRow) data(i, 0) = row(0).ToString data(i, 1) = row(1).ToString data(i, 2) = row(2).ToString Next --------------------------------------------------------------------- > DataTableをそのままexcelに反映させるといった事はできないのでしょうか? 多分、無理だと思います。(私は知りません。ごめんなさい。)

bangbang27
質問者

お礼

回答ありがとうございます。 おかげさまで二次元配列にする事はできました (コピーしただけですが・・) その上で根本的な質問なのですが、その配列をEXCELに反映させる 方法はどうすればいいのでしょうか? 又、vb.net作成の上で「これは分かりやすい!」などの書籍がありましたら 教えていただけますでしょうか? 一応自分でも調べてはいるのですが、どうも要領が悪いようなので

その他の回答 (3)

  • korin_
  • ベストアンサー率69% (46/66)
回答No.4

> 列の追加については3の部分を変数にして範囲を決めるということで > 大丈夫ですよね? 変数でも良いのですが、dtTable.Columns.Countで列数も取得出来ると思います。 > ちなみにヘッダーについてはDataTableの情報ではなく > 自分で新たにEXCELに作成するしかないでしょうか? ヘッダーはdtTable.Columns(0).ColumnNameとかで取得出来ると思います。 それを配列の最初の行に追加するようにすれば良いと思います。 頑張ってみてください。 > とゆうように、全てにNothingと表記されているんですが > これは意味合い的には変数をNEWで宣言するのと同じような事でよろしいでしょうか? Newで宣言するのと、Nothingで宣言するのは違います。 Newをするとインスタンスが生成されます。 Nothingで宣言しただけではインスタンスは生成されません。 ただ、Nothingで宣言した後にNewをすれば、Newで宣言したのと同じ動きになります。 つまり下記の1と2はどちらにしても同じだと思って良いです。 (厳密に言うと違うのですが、気にしなくても大丈夫です。) ------------------------------------------------------ 1.Dim xlApplication As New Excel.Application ------------------------------------------------------ 2.Dim xlApplication As Excel.Application = Nothing   xlApplication = New Excel.Application ------------------------------------------------------ 疑問点があれば、"インスタンスの生成" や "New" などのキーワードで検索してみてください。

bangbang27
質問者

お礼

回答ありがとうございます。 おかげさまで無事EXCELに出力する事ができました。 細かいレイアウト等の問題が残っているので、その部分に関しては もう少し自分で調べてみようと思います。 >疑問点があれば、"インスタンスの生成" や "New" などのキーワードで検索してみてください。 ありがとうございます。かなり基本的なことが抜けていると実感しましたので 早速検索してみようと思います。 また新しい質問をあげる事もあると思うのですが 機会がありましたらよろしくお願いします。

  • korin_
  • ベストアンサー率69% (46/66)
回答No.3

こんにちは。 簡単なサンプルです。 Excelブックを新規作成して配列のデータを表示しています。 解放等の処理は省いていますので、必要に応じて追加してください。 -------------------------------------------------------------------------------- Dim xlApplication As Excel.Application = Nothing Dim xlWorkBooks As Excel.Workbooks = Nothing Dim xlWorkBook As Excel.Workbook = Nothing Dim xlWorkSheet As Excel.Worksheet = Nothing xlApplication = New Excel.Application xlApplication.WindowState = Excel.XlWindowState.xlMinimized xlWorkBooks = xlApplication.Workbooks xlWorkBook = xlWorkBooks.Add() xlApplication.Visible = True xlWorkSheet = CType(xlWorkBook.Sheets("Sheet1"), Excel.Worksheet) xlWorkSheet.Range("A2").Resize(data.GetLength(0), data.GetLength(1)).Value = data ' ここに配列を指定 -------------------------------------------------------------------------------- また書籍の件についてですが、私もほとんど独学で本を読んだりはしていないので、お勧め出来る書籍がないです・・・すみません。

bangbang27
質問者

お礼

毎回ありがとうございます。 おかげさまで無事EXCELにデータを参照させることができました。 列の追加については3の部分を変数にして範囲を決めるということで 大丈夫ですよね? 今からチャレンジしてみます。 ちなみにヘッダーについてはDataTableの情報ではなく 自分で新たにEXCELに作成するしかないでしょうか? 書籍に関して、お手数をおかけしました。 こちらこそ1から10まで質問してしまってすいません。

bangbang27
質問者

補足

申し訳ありません、追加質問です。 Dim xlApplication As Excel.Application = Nothing Dim xlWorkBooks As Excel.Workbooks = Nothing Dim xlWorkBook As Excel.Workbook = Nothing Dim xlWorkSheet As Excel.Worksheet = Nothing とゆうように、全てにNothingと表記されているんですが これは意味合い的には変数をNEWで宣言するのと同じような事でよろしいでしょうか?

  • korin_
  • ベストアンサー率69% (46/66)
回答No.1

こんにちは。 1. Excelをデータベースとし、ODBC経由でデータをINSERTする。 2. DataTableのデータを配列にして、Excelに流し込む。 ---------------------------------------------------------- ' 作成した配列をExcelに流し込む xlSheet.Range("A1").Resize(100, 5).Value = data ---------------------------------------------------------- また、.NETからCOMオブジェクトを扱う場合は、参照カウントの解放を行わないと意図したところでプロセスが解放されません。 (ReleaseComObject で検索してみてください。)

bangbang27
質問者

お礼

さっそくの返答ありがとうございます。 1と2と二通り方法があるということでよろしいでしょうか? 知識不足のため1の方がよく理解できていないので 2の方の質問なんですがDataTableのデータを配列にするというのは 行と列に分けるという事でしょうか? RangeとResizeについては勉強させていただきます。 DataTableをそのままexcelに反映させるといった事はできないのでしょうか? COMオブジェクトに関しても頂いたキーワードで検索して 勉強させていただきます。

関連するQ&A

  • vb.netのnewキーワード

    'Excel.Application の新しいインスタンスを生成するとき Dim xlApplication As New Excel.Application() のようにNewを使いますが ワークブックを作成するときは Dim xlBooks As Excel.Workbooks のようにNewを使わないのはなぜですか?

  • vb2010で既存のエクセルを開くには?

    初心者です。 VB6.0からvb2010への乗り換えをしていますが、以下のコードでxlBooks = xlApplication.Workbooksのところで止まってしまいます。 参考ページをいろいろ見ましたが原因が分かりません。 実行する前のコードに波線はでません。 CreateObjectでやっても結果は同じでworkbookを作るところでエラーとなります。 エラーは「タイプライブラリのロードに失敗」ですが、であればDim xlApplication As New Excel.Application()かCreateObjectで止まるように思いますが、理由がわかりません。 WinXP, Office2003, .Net 4.0. vb2010Expressの組み合わせで全てアップデート済み、参照設定はExcel 11.0 Object Libraryです。 どなたかご教示頂ければ幸甚です。 Imports Excel = Microsoft.Office.Interop.Excel Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xlApplication As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApplication.Workbooks xlBooks.Open("C:\Hoge.xls") - - System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication) End Sub End Class

  • VB2005からマクロ(EXCEL2003)呼出時の戻り値

    現在VB2005からExcel2003のマクロを呼び出していますが、 戻り値の取得方法が分からなく調べています。 マクロが実行できることは確認しています。 戻り値はそもそも取得できるのでしょうか? 行っている処理は以下の通りです。 ■VB側■ Dim oExcel As New Excel.ApplicationClass() Dim oBook As Excel.WorkbookClass Dim filePath As String = "参照XLSファイルパス" Dim oBooks As Excel.Workbooks = oExcel.Workbooks oExcel.Visible = False oBook = oBooks.Open(filePath) Dim ans As String = CType(oExcel.Run("'" & oBook.Name & "'!ThisWorkbook.DoKbTestWithParameter", "テスト"), String) System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook) oBook = Nothing System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks) oBooks = Nothing oExcel.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel) oExcel = Nothing ■EXCE側■ Public Function DoKbTestWithParameter(sMsg As String) MsgBox sMsg DoKbTestWithParameter = "VBA関数戻り値" End Function ご教授お願いします。

  • VBでエクセルのバージョンを指定して開く

    PCにEXCEL2002と2013がインストールされています。 VBでエクセルを起動し、マクロを実行したいのですが、その際に起動するエクセルのバージョンを指定したいと考えています。 以下でやると標準設定のEXCELが開いてしまい、バージョンの指定ができません。 Dim xlApp As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApp.Workbooks xlBooks.Open("C:\test.xls") xlApp.Visible = True xlApp.Run("test.xls!macro") なにか方法はありますでしょうか?

  • 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でExcelシート削除

    独学で、VB2010にてAccess、Excel連携のプログラムを組んでいます。 ある集計結果をExcelに代入してそのシートのみだけにして(その他集計シートがあります。) 別名ファイルでデスクトップへ保存するようにしたいです。 For Each~Nextで指定のシート名以外を削除するというコードを書いたつもりなのですが、うまく動作しません。 ご教授お願いします。 (Excelはcom参照していません。) Private Sub Button出力_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button出力.Click '===============Excel入力=============== Dim xlApplication Dim xlBooks Dim xlSheets xlApplication = CreateObject("Excel.Application") ' Excelのインスタンス作成 'ファイル名(フルパス) Dim xlFilename As String = 集計ExPath xlApplication.Visible = False ' Excelの表示 xlBooks = xlApplication.Workbooks.Open(xlFilename) xlBooks = xlApplication.Workbooks(Dir(xlFilename)) 'Workbook xlSheets = xlBooks.Worksheets("AAA") 'Worksheet その他Excel処理 xlApplication.DisplayAlerts = False Dim DelSheet As Object For Each DelSheet In xlBooks.Worksheets If DelSheet.Name <> "AAA" Then DelSheet.Delete() End If Next xlBooks.saveas(System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\新ファイル名.xlsx") xlBooks.Close xlApplication.DisplayAlerts = True xlApplication.Quit() ' Excel を終了する xlSheets = Nothing xlBooks = Nothing xlApplication = Nothing MsgBox("出力処理終了しました。") Me.Close() End Sub

  • VB2008のexeファイルについて

    現在、VB2008でフォームを作成し、DataGridViewなどの情報を Excelに出力するというプログラムを設計したのですが、 デバックでテスト動作を行うと、問題なく実行できるのですが、 いざ、exeファイルをデスクトップに置き、実行すると 「指定されたファイルが見つかりません。」というエラーが 出てしまいます。 開こうとしているのは、既存のExcelファイルなのですが、 こちらが、Excelを開く部分のソースです。 Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object '--------------------- ' EXCELファイルを開く '--------------------- xlApp = CreateObject("Excel.Application") 'Application生成 Dim xlBooks As Excel.Workbooks = xlApp.Workbooks xlBook = xlBooks.Open("C:\TEMP\テスト.xls") xlApp.Visible = True 'EXCELの表示 xlSheet = DirectCast(xlBook.ActiveSheet, Excel.Worksheet) 'Worksheet 少し見づらいかもしれないのですが、まずObject型で宣言し、 その値に、Excel.Applicationなどを代入し、 その中で、マイコンピュータの中のTEMPというフォルダから テストというタイトルのExcelを立ち上げるという形になります。 他のサイトやこちらの質問掲示板なども見たのですが、 同じ結果になってしまうため、解決策が分からない状況と なっています。 どなたか、原因か、対策方法が思いつく方は ご教授願えないでしょうか、 よろしくお願いいたします。

  • VB2005でExcelファイルを開く

    こんにちは。 VB2005の勉強をさせて頂いています。 ボタンを押すとコモンダイヤログを表示し、 ダイヤログ内で選択したExcelファイルの内容をフォームのDataGridViewにもって行きたいと思っていますが 上手くできません。一応現在のソースを下記に置いておきます。 特に、下記のソースの 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next のループ条件xlSheet.Rows.Count - 1がどうも6万くらいになっているようなのですが、 実際セルに入力したデータは5行程度のものです。 1セル1セル文字が入っているかどうかを調べていかないといけないのでしょうか? よろしければ、具体的なソースやアドバイスをお願いいたします。 -------------------------------------- Dim ofd As New OpenFileDialog() 'ofdの設定をする 'ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If ofd.ShowDialog() = DialogResult.OK Then '選択されたファイルを読み取り専用で開く Dim ReadFile As System.IO.Stream ReadFile = ofd.OpenFile() If Not (ReadFile Is Nothing) Then Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks '既存ファイルを開く場合 Dim xlFilePath As String = ofd.FileName Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next 'xlSheet の解放 'xlSheets の解放 'xlBook を閉じる 'xlBook の解放 'xlBooks の解放 'Excelを閉じる 'xlApp を解放 End If End If ofd.Dispose()

  • VisualBaic2005でExcelファイルを読む方法2

    temtecomai2さんにアドバイスを頂き、下記のようにプログラムを修正して実行してみたのですが、下記のエラーになりました。 Dim xlApplication As New Excel.Application() Dim xlBooks As Excel.Workbooks xlBooks = xlApplication.Workbooks xlBooks.Open("C:\book1.xls") ↑を実行した時点で「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」のエラーメッセージがでます。 新しいExcelブックの追加(xlBooks.Add())を実行してもエラーはでないです。大変申し訳ないのですが、エラーの回避方法を教えてください。よろしくお願いいたします。

  • VB2005でExcelのシートをコピー

    VB2005Expressで開発をしています。 Excelのシートをコピーして同じbookに追加をしたいと思っています。 下記でまずExcelを使用できるようにして  Dim xlApp As New Excel.Application  Dim xlBooks As Excel.Workbooks = xlApp.Workbooks  Dim xlBook As Excel.Workbook = xlBooks.Add '新規のファイルを開く  Dim xlSheets As Excel.Sheets = xlBook.Worksheets  Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)  xlApp.Visible = True 下記で追加できると思うのですが、()内にセットするパラメータが わかりません・・・  xlBook.Worksheets.Copy() どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

専門家に質問してみよう