• ベストアンサー

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/17068)
回答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

  • エクセルの操作について教えてください・・

    (1) Aファイルの中の1つのシートを Bファイルのシートにコピーする場合の方法 * (高さ・幅を変えることなくコピーしたい) (2) 作成したシート または ファイルに ロックをかける方法  (3)エクセルで作成した物(ア)をコピー(イ)したとき コピー前のもの(ア)に新たに追加記入したら (イ)には 内容が追加記入されますか?

  • エクセル マクロ 複数ファイルを1枚のファイルに

    お世話になります。 私の業務で、多数のエクセルシートを1つのファイルにまとめ、 その上で縦串を通して合算を出す、という作業が頻発しております。 様々な資料で同様の作業が行われますので、簡素化ができればと思い、 質問させていただきます。 [作りたいマクロ] 『元データ』のフォルダに入っているエクセルファイルの 『指定シート(仮にA2セルにシート名を指定できるものとします)』を、 当マクロの入ったエクセルファイルにシートを追加したい。 その際、全てのシート名が同一になってしまうので、 『指定したセル(仮に各シートのB2セル)』をシート名にする。 ●各シートは全て同じフォーマットですので、書式等そのままコピーでOKです ●元のファイル名はバラバラになっていることが多いです

  • Excel ファイル操作マクロ

    Excel で、[ファイル][名前を付けて保存]をマクロで行うようにしました。 新しいファイル名にはマクロで日付記号を付加してあります。 このあと、すぐにもとのファイルを開き、新しくできたファイルを閉じる操作を、マクロで行いたいのですが、どうしたらよいでしょうか。 あるいは、別名コピーという方法はあるのでしょうか。 教えて下さい。よろしくお願いします。

  • エクセルの操作について

    エクセルのセル内の表示を変更する方法について教えて下さい。 例えば、シートAで、A1に17350. B1に1699.5と入力し、C1にA1/B1の解を表示させます。答えは10.21です。シートAのC1セル内の中身は=A1/B1となり表示が10.21となります。 このシートAのC1セルをコピーして、シートBのA1に表示させます。コピーしてシートBに貼り付ける際に「形式を選択して貼り付ける」で値(V)を選択して貼り付けます。 しかし、貼り付けた後のシートBのA1の中身は10.2088849661665となっています。セルの書式設定少数点以下第2位に揃えるように設定しても、ユーザー定義から設定しても変わりません。 どうすればコピー後小数点以下第2位までしか表示させる事が出来ますか? また、何故こういう事が起きるのでしょうか?

  • エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(

    エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(A1:X365)の値を取得し、コピー元のエクセルファイル名のシートに貼付ける方法を教えて頂けないでしょうか?できればコピー元のエクセルファイルは開かずに実行させたいです。エクセルは2003を使っています。

  • エクセルで何も操作していないのに「変更を保存しますか?」と聞いてきます

    エクセルで、特定のファイルについてだけなのですが、ファイルを開いた後、何も操作しないまま、すぐに閉じようとしたのに「変更を保存しますか?」と表示されます。 シートをコピーして別のファイルに貼り付けてみたのですが、貼り付けたファイルでも同じ現象が起こります。 何かのウィルスに感染でもしているのでしょうか? わかる方おられましたら回答の程、よろしくお願いします。

  • エクセル2000の範囲名について

    エクセル2000で範囲名を参照して画像の切り替えを行おうと考えています。 個別に範囲名を変更していくことは出来るのですが、シートを追加するたびに範囲名を変更するのではなくシート名を範囲名として使用する方法が無いでしょうか? イメージとしてはAというシートのA1:B2の範囲にAという名前が指定されている場合にシートをコピーしてA(1)というシートが出来たときにA1:B2の範囲にA(1)という名前が自動でつくようにしたいのです。 何かよい方法は無いでしょうか?

  • VBAからEXCELの新規ファイルを作成する

    VB6.0 Excel2000を使用しています。 VBAからEXCELファイルを参照する方法は前回教えていただきましたが 新規にEXCELファイルを作成する方法がわからないので教えてください。 【やりたいこと】 ・ファイル名は、ダイアログボックスから入力され、フルパスで変数に  格納されています。 ・シート名は固定文字で指定します。 (↑ここまではできています) (↓ここからわかりません) ・セルの内容を編集したあと、指定のファイル名・シート名で保存したい よろしくお願いします。

  • エクセルのファイルが開かなくなっちゃいました・・・

    仕事で使っているエクセルのファイルが開かなくなりました。 クリックすると「表示形式を追加できません」というエラーが でてしまい、そのまま開かずに閉じてしまいます。 このようになった経緯は以下の通りです。 1.セルに書式設定をしていたら、「表示形式を追加できません」のエラーが出始めた。 2.一つのシートに書式設定できる限界だと解釈し、別のシートにデータを移して書式設定を続けようとする。 3.ある程度の範囲のデータをコピーして別のシートに貼り付けたところ例の「表示形式を追加できません」エラー、そしてフリーズ、そして再起動 4.帰らぬファイルとなる。 もちろんバックアップを取らずに作業していた自分がわるいのですけど、このファイルを作り直すとするとヒジョーに大変なことになるので、もしどなたかこのファイルを開く方法をご存知の方、是非お力をかしてください。 よろしくお願いします!!

  • Excelのファイルをコピーして貼り付けようとすると・・・

    Excel2000を利用しています。 あるExcelのファイルをほかのbookに「シートの移動またはコピー」しようとすると、アプリケーションエラーが発生し、開いていたほかのExcelのファイルすべてが閉じられてしまいます。 範囲を指定してコピーし、ほかのファイルに貼り付けても同様のアプリケーションエラーが発生します。 すべてのファイルがそうではなく、特定のファイルで上の操作をすると発生し、PCの再起動をしたところでは変化はありません。 ファイル自体壊れてしまっているのでしょうか。 どうしたら作業できるようになるんでしょう?