• 締切済み

VBでエクセルのデータを取り込む方法

VB2010にエクセル(2003)のデータを取り込みたいのですが、うまくいきません。 どうすればよいのでしょうか。 外部アプリなので、Public Class Form1の前にImports Excel = Microsoft.Office.Interop.Excel と記入、dim xlapp as excel.apllcation dim xlbook as exce.book dim xlsheets as excel.sheets と記入してみますがこの時点でコードエラーとなります。(ネットで調べこのように記述しました) どうすればいいでしょうか。 すみません。vb初心者なので詳しく教えていただくとたすかります。 よろしくお願いします。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

VBは6止まりでVB2010を扱ったことがないけど。 「プロジェクトの参照設定」が必要なのでは?

関連するQ&A

  • 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() どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • VB2005でのEXCEL制御について

    いつもお世話になってます。 私はVB入門者です。 VBからシートを選択して値を入れることは出来たのですが 範囲選択→格子罫線をひく、といったような操作について 調べたところ、マクロをつくりコピーアンドペーストでスムーズに いくということがわかったので、試したところうまくいきませんでした。 又、質問ナンバー QNo.3575919 に [Visual Basic2005でExcelに罫線を描く]とあり 「CreateObject("Excel.Application")」はソースに入っているか という部分がポイントのようなので、少しいじってはみたのですが うまくかけませんでした。 と、いうよりも理解できませんでした。 下記のコードでは選択範囲を指定する部分まで成功したものです。 アドバイスよろしくお願いします。 Sub excel_app() Dim xlApp As Excel.Application = Nothing Dim xlBooks As Excel.Workbooks = Nothing Dim xlBook As Excel.Workbook = Nothing Dim xlSheets As Excel.Sheets = Nothing Dim xlSheet As Excel.Worksheet = Nothing xlApp = New Excel.Application() xlBooks = xlApp.Workbooks xlBook = xlBooks.Open("C:\hoge.xls") xlSheets = xlBook.Worksheets xlBook.Worksheets(1).Range("A31:Y55").Select() xlBook.Worksheets(1).Range.Borders. ←これ以降がわかりません。

  • VB2010でExcelの行をコピーして挿入する

    いつもお世話になります。 VB2010を使用してExcelのある1行をコピーして、コピーしたものを同じシートに挿入したいのですが方法がわかりません。 画像のように、35と36の行をコピーして、37と38に全く同じ物を挿入したいです。 サイトをしらみつぶしに探しましたが、私に理解できるサイトがヒットしませんでしたので、できればサンプルコードを教えていただけると嬉しいです。 下記のようにコードを書きましたが、コピペ状態でほとんど理解していません。 Imports Microsoft.Office.Interop Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Shown Me.Visible = False Dim xlApp As New Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet 'Excelブックを起動 xlBook = xlApp.Workbooks.Open("C:\test1.xls") 'Excelを表示 xlApp.Visible = False 'シートを指定 xlSheet = DirectCast(xlBook.Worksheets(1), Excel.Worksheet) xlSheet.Activate() 'ここから ' ' ' ' 'ここまでがわかりません ' xlBook.Save() '上書き保存 xlBook.SaveAs("c:\test2.xls") '名前をつけて保存 xlBook.Close() xlApp.Quit() '終了処理 xlSheet = Nothing xlBook = Nothing xlApp = Nothing 'テストが完了したらループ処理に変更する Dim p() As Process = Process.GetProcessesByName("Excel") p(0).Kill() End Sub End Class エクセルのバージョンはExcel 2003です。 お手数おかけしますがよろしくお願いします。

  • エクセルの開放

    VB2008でエクセルを操作しているのですが、エクセルのプロセスが残ってしまってどうやって解放すればいいのかわかりません。 サンプルプログラム-------------- 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) Dim xlobj As Object '開放用 xlobj = xlSheet.Range("A1:C3") xlobj.Value = "TEST" MRComObject(xlobj) MRComObject(xlSheet) MRComObject(xlSheets) xlBook.Close(False) MRComObject(xlBook) MRComObject(xlBooks) xlApp.Quit() MRComObject(xlApp) MRComObjectでCOM オブジェクトへの参照を解放しています。 このプログラムでは特に問題ないのですが、 xlobj = xlApp.Worksheets("Sheet2") xlobj2 = xlobj.Range("A1:C2") xlobj2.Value = "TEST" のようにワークシートを指定すると解放できません。 xlSheet = xlBook.Worksheets("Sheet2") としてもプロセスが残ります。 またVB6.0では可能だった xlApp.Worksheets("Sheet2").Select() のようにワークシートを切り替えるときもVB2008ではプロセスが残ってしまいます。 これはどのようにしたら解決するのでしょうか?

  • 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 よろしくお願い致します。  

  • Excelのセルの値を取得

    VB2005Expressにて開発しています。 Excelのセルの値を取得するにはどうしたらいいのでしょうか。 下記でExcelは起動出来るのですが、値の取得ができません。 また、Rangeで範囲を指定して一括取得して、1データずつ配列化した 変数にセットすることは可能なのでしょうか。 Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlFilePath As String = "C:\excel_test.xls" Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) xlApp.Visible = True どなたかご存知の方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

  • VB2005でのEXCEL操作

    いつもお世話になってます。 VBレスキュー花ちゃんを参考にやってみたのですがうまくいかないのでアドバイス頂きたいと思います。 下記のコードにてセル内にテキストを書き、罫線をつけたあと 文字を中央揃えにする場合は、どのようにすればいいのでしょうか。 エクセルにてマクロ記録を行い、開いたところ Range("B1").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With と、ありましたがHorizontalAlignment = xlCenterを xlBook.Worksheets(1).Range("A1")以降に貼り付けても xlCenterが宣言されていない、とエラーが出てしまいました。 又、空白セルであるE1,F1,G1及びE2,F2,G2、E3,F3,G3は"選択セルの中央揃え"とする場合 HorizontalAlignment = xlCenterAcrossSelection はどのように転載すればいいのでしょうか。 EXCELとの連携について全然理解できていないことが原因なのですが VB6を対象としているサイトでもVB2005にそのまま参考となるのでしょうか。 EXCEL操作については基礎の部分から学びたいので、もし私のように 入門者向けに解説を行っているサイトがありましたら教えてください。 Sub excel2() Dim xlApp As Excel.Application = Nothing Dim xlBooks As Excel.Workbooks = Nothing Dim xlBook As Excel.Workbook = Nothing Dim xlSheets As Excel.Sheets = Nothing Dim xlSheet As Excel.Worksheet = Nothing Dim xlRange As Excel.Range = Nothing Dim xlBorders As Excel.Borders = Nothing Dim xlBorder As Excel.Border = Nothing Try ' 必要な変数は Try の中でインスタンス化する xlApp = New Excel.Application() xlBooks = xlApp.Workbooks xlBook = xlBooks.Open("C:\test.xls") xlSheets = xlBook.Worksheets xlApp.Visible = True xlBook.Worksheets(1).Range("A1") = "No." xlBook.Worksheets(1).Range("B1") = "HOGEHOGE" xlBook.Worksheets(1).Range("B2") = "番号" xlBook.Worksheets(1).Range("C1") = "honyarara" xlBook.Worksheets(1).Range("C2") = "番号" xlBook.Worksheets(1).Range("D1") = "SAMPLE" xlBook.Worksheets(1).Range("E4") = "X" xlBook.Worksheets(1).Range("F4") = "Y" xlBook.Worksheets(1).Range("G4") = "Z" '外枠罫線のコードは省略しました xlApp.Quit()

  • VB.NETからEXCELの起動が、うまくいかない

    3回目の同じ質問になってしまうのですがよろしくお願いいたします。 下記のようなソースで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) Dim xlRange As Excel.Range Dim xlCells As Excel.Range = xlSheet.Cells xlRange = xlCells(1, 10) xlRange.Value = "--" xlRange = xlCells(1, 5) xlCells.EntireColumn.AutoFit() xlBook.SaveAs(sPath & "\" & sFileName, Excel.XlFileFormat.xlWorkbookNormal) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlCells) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlRange) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlSheets) xlCells = Nothing xlRange = Nothing xlSheet = Nothing xlSheets = Nothing xlBook.Close() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBook) System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlBooks) xlBook = Nothing xlBooks = Nothing xlApp.Quit() System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp) xlApp = Nothing GC.Collect() System.Diagnostics.Process.Start(sPath & "\" & sFileName) ある特定のPCでのみEXCELのメニューバーとステータスバーのみしか表示されない状態です。 起動部分(Process.Start)をコメントアウトして確認したところ GC.COLLECTでEXCELが終了することなく、アプリの終了時にEXCELが終了する 状態にあります。 これはオブジェクトの開放がうまくいっていないのでしょうか? よろしくお願いいたします。

  • datagridviewからエクセルへ出力する際のエラーについて

    datagridviewからエクセルへ出力する際のエラーについて いつもお世話になります。 datagridviewに表示されたデータをエクセルへ出力したく以下のコードを書きました。 Imports System.IO Imports System.Data Imports System.Data.SqlClient Imports Microsoft.Office.Interop Public Class form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As OleDb.OleDbConnection _ = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\VB2008\コピー ~ 社会保険計算.mdb;") End Sub Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click Dim xlapp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet 'Excelを開く xlapp = CreateObject("Excel.Application") xlapp.Visible = True xlapp.Workbooks.Add() xlBook = xlapp.ActiveWorkbook xlSheet = xlBook.ActiveSheet 'シートの編集 ☆ xlSheet.Cells(1, 1).Value = DataGridView1(1, 1).Value.ToString  xlSheet.Cells(2, 1).Value = DataGridView1(2, 1).Value.ToString xlBook.Close() xlapp.Quit() xlBook = Nothing xlapp = Nothing End Sub ☆マークで止まってしまいます。 argumentoutofrangeexceptionがハンドルされませんでした。 インデックスが範囲を超えています。負でない値でコレクションのサイズよりも小さくなければなりません。 パラメータ名:index と表示されます。 環境は、VB.NET2008     XP(SP3)     Excel2007 になります。 上記のエラーで止まり、エクセルも立ち上がりぱなしです。 お忙しい所お手数をお掛けしますが、ご教授下さい。

  • VB2005でエクセルの機能を使うには

    VB2005でエクセルに数値を貼り付けた後自動的に エクセルの機能を使ってA列で並び替えをしたいのですが可能でしょうか。 今のソース s1()の配列に数値がはいっている。 exp s1(1)="1.0,2.0,3.0,4.0......" Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlFilePath As String = Application.StartupPath & "\aaa.xls" Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) ':::::::::::::::::::::::::::::::::::::::::::::::sheet1 '-----貼り付け開始 Dim xlRange As Excel.Range Dim xlCells As Excel.Range Dim xlRange1 As Excel.Range xlCells = xlSheet.Cells Dim j Dim Col As String For i = 1 To irec - 1 temp = Split(s1(i), ",") For j = 0 To 12 xlRange1 = xlCells(3 + i, 1 + j) Col = xlRange1.Address(False, False) xlRange = xlSheet.Range(Col) xlRange.Value = temp(j) Next j Next i ここで並び替えしたいのですが。