• ベストアンサー

Excelファイルの操作

COMコンポーネントを用いた以下2点のExcelファイルの操作方法が分からず困っています。 1.指定されたシートを同一Excelファイル内にコピー追加する方法。 2.指定されたシートのシート名を変更する方法。 以上よろしくお願いします。

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

  • ベストアンサー
回答No.2

お世話になります。 VB.NET(.NET Framework 2.0 及び Excel 2003 で動作確認) から操作したい場合です。 1) 参照設定の追加 ソリューションエクスプローラから 該当するプロジェクトを選択し、右クリックして「参照の追加」を選ぶ。 表示されたダイアログで、COM を選択して、 Microsoft Excel x.x Object Library を選択して、OK を押下。 2) コーディング Imports Microsoft.Office.Interop Public Class Form1   ' デザイナで Button を張りつけてある   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     ' 必要な変数は Try の外で宣言する     Dim xlApplication As Excel.Application     Dim saveFileName As String = "D:\" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".xls"     ' COM オブジェクトの解放を保証するために Try ~ Finally を使用する     Try       xlApplication = New Excel.Application()       xlApplication.Visible = True       ' 警告メッセージなどを表示しないようにする       xlApplication.DisplayAlerts = False       Dim xlBooks As Excel.Workbooks = xlApplication.Workbooks       Try         ' 新規にファイルを開く場合         Dim xlBook As Excel.Workbook = xlBooks.Add()         ' 既存ファイルを開く場合         'Dim xlBook As Excel.Workbook = xlBooks.Open(Filename:="xlsファイルのパス")         Try           Dim xlSheets As Excel.Sheets = xlBook.Worksheets           Try             Dim xlSheet As Excel.Worksheet = DirectCast(xlSheets(1), Excel.Worksheet)             '' 最初のシートの名前を変える             xlSheet.Name = "aaa"             '' 最初のシートをコピーする             xlSheet.Copy(After:=xlSheet)           Finally             If Not xlSheets Is Nothing Then               System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets)             End If           End Try         Finally           If Not xlBook Is Nothing Then             Try               xlBook.SaveAs(Filename:=saveFileName)               xlBook.Close()             Finally               System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)             End Try           End If         End Try       Finally         If Not xlBooks Is Nothing Then           System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)         End If       End Try     Finally       If Not xlApplication Is Nothing Then         Try           xlApplication.Quit()         Finally           System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApplication)         End Try       End If     End Try     MessageBox.Show(saveFileName & "に保存しました")   End Sub End Class 上記コードを実行し、Button をクリックすると aaa というシートがコピーされて D:\yyyyMMddHHmmss.xls に 保存されるはずです。 COM を扱う場合の注意点についてはこちらをどうぞ。 http://jeanne.wankuma.com/tips/programing/releasecom.html VB6 から Excel を扱う場合はこちらを参考にして下さい。 http://naoko.wankuma.com/tips/tips_0001_vb6excel.html

OKbokuzyo
質問者

お礼

環境を付け忘れましたが、VB2005を用いています。 また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。 すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

<第1ステップ> エクセルで、マクロの記録モード(ツールーマリロー新しいマクロの記録)にして、質問の1.、2.の操作をしてください。 それでエクセルVBAのコードはどんなものになるか分かります。 操作は (1)シートコピー 問題のコピー元のシートのシートタブ部で右クリック 「異動またはコピー」を選ぶ。 「コピーを作成する」にチェックを入れること (2)シート名変更 問題のシートのシートタブ部で右クリック 「名前の変更」を選択。 シートタブ部で新の名前を入力 ーー 以上で記録されたコードを変数とかで相対化するのはできるでしょう。 >COMコンポーネントを用いた、とおっしゃっているレベルだから。 ーーー <第2ステップ> エクセルのアプリケーションオブジェクトをつかむ Set xlApp = CreateObject("Excel.Application") それを頭につけて、順次、ブック、シートのオブジェクトをつかむ。   Set xlBook = xlApp.Workbooks.Add   Set xlSheet = xlBook.Worksheets(1) そしてエクセルVBAのDefaltに頼ったコードの書き方でなく、 サブおオブジェクトには親(上位)オブジェクト名を必ず先頭にかぶせる。 そのようにマクロの記録のコードを改良してください。 参考 http://www.bcap.co.jp/hanafusa/VBHLP/excel1.htm

OKbokuzyo
質問者

お礼

環境を付け忘れましたが、VB2005を用いています。 また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。 すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。 ありがとうございました。

関連するQ&A