- ベストアンサー
Excelファイルの操作
COMコンポーネントを用いた以下2点のExcelファイルの操作方法が分からず困っています。 1.指定されたシートを同一Excelファイル内にコピー追加する方法。 2.指定されたシートのシート名を変更する方法。 以上よろしくお願いします。
- OKbokuzyo
- お礼率71% (84/118)
- Visual Basic
- 回答数2
- ありがとう数2
- みんなの回答 (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
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17068)
<第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
お礼
環境を付け忘れましたが、VB2005を用いています。 また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。 すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。 ありがとうございました。
関連するQ&A
- エクセルの操作について教えてください・・
(1) Aファイルの中の1つのシートを Bファイルのシートにコピーする場合の方法 * (高さ・幅を変えることなくコピーしたい) (2) 作成したシート または ファイルに ロックをかける方法 (3)エクセルで作成した物(ア)をコピー(イ)したとき コピー前のもの(ア)に新たに追加記入したら (イ)には 内容が追加記入されますか?
- ベストアンサー
- その他(ソフトウェア)
- エクセル マクロ 複数ファイルを1枚のファイルに
お世話になります。 私の業務で、多数のエクセルシートを1つのファイルにまとめ、 その上で縦串を通して合算を出す、という作業が頻発しております。 様々な資料で同様の作業が行われますので、簡素化ができればと思い、 質問させていただきます。 [作りたいマクロ] 『元データ』のフォルダに入っているエクセルファイルの 『指定シート(仮にA2セルにシート名を指定できるものとします)』を、 当マクロの入ったエクセルファイルにシートを追加したい。 その際、全てのシート名が同一になってしまうので、 『指定したセル(仮に各シートのB2セル)』をシート名にする。 ●各シートは全て同じフォーマットですので、書式等そのままコピーでOKです ●元のファイル名はバラバラになっていることが多いです
- 締切済み
- Visual Basic
- 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を使っています。
- ベストアンサー
- Visual Basic
- エクセルで何も操作していないのに「変更を保存しますか?」と聞いてきます
エクセルで、特定のファイルについてだけなのですが、ファイルを開いた後、何も操作しないまま、すぐに閉じようとしたのに「変更を保存しますか?」と表示されます。 シートをコピーして別のファイルに貼り付けてみたのですが、貼り付けたファイルでも同じ現象が起こります。 何かのウィルスに感染でもしているのでしょうか? わかる方おられましたら回答の程、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル2000の範囲名について
エクセル2000で範囲名を参照して画像の切り替えを行おうと考えています。 個別に範囲名を変更していくことは出来るのですが、シートを追加するたびに範囲名を変更するのではなくシート名を範囲名として使用する方法が無いでしょうか? イメージとしてはAというシートのA1:B2の範囲にAという名前が指定されている場合にシートをコピーしてA(1)というシートが出来たときにA1:B2の範囲にA(1)という名前が自動でつくようにしたいのです。 何かよい方法は無いでしょうか?
- 締切済み
- Excel(エクセル)
- VBAからEXCELの新規ファイルを作成する
VB6.0 Excel2000を使用しています。 VBAからEXCELファイルを参照する方法は前回教えていただきましたが 新規にEXCELファイルを作成する方法がわからないので教えてください。 【やりたいこと】 ・ファイル名は、ダイアログボックスから入力され、フルパスで変数に 格納されています。 ・シート名は固定文字で指定します。 (↑ここまではできています) (↓ここからわかりません) ・セルの内容を編集したあと、指定のファイル名・シート名で保存したい よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルのファイルが開かなくなっちゃいました・・・
仕事で使っているエクセルのファイルが開かなくなりました。 クリックすると「表示形式を追加できません」というエラーが でてしまい、そのまま開かずに閉じてしまいます。 このようになった経緯は以下の通りです。 1.セルに書式設定をしていたら、「表示形式を追加できません」のエラーが出始めた。 2.一つのシートに書式設定できる限界だと解釈し、別のシートにデータを移して書式設定を続けようとする。 3.ある程度の範囲のデータをコピーして別のシートに貼り付けたところ例の「表示形式を追加できません」エラー、そしてフリーズ、そして再起動 4.帰らぬファイルとなる。 もちろんバックアップを取らずに作業していた自分がわるいのですけど、このファイルを作り直すとするとヒジョーに大変なことになるので、もしどなたかこのファイルを開く方法をご存知の方、是非お力をかしてください。 よろしくお願いします!!
- 締切済み
- オフィス系ソフト
- Excelのファイルをコピーして貼り付けようとすると・・・
Excel2000を利用しています。 あるExcelのファイルをほかのbookに「シートの移動またはコピー」しようとすると、アプリケーションエラーが発生し、開いていたほかのExcelのファイルすべてが閉じられてしまいます。 範囲を指定してコピーし、ほかのファイルに貼り付けても同様のアプリケーションエラーが発生します。 すべてのファイルがそうではなく、特定のファイルで上の操作をすると発生し、PCの再起動をしたところでは変化はありません。 ファイル自体壊れてしまっているのでしょうか。 どうしたら作業できるようになるんでしょう?
- ベストアンサー
- オフィス系ソフト
お礼
環境を付け忘れましたが、VB2005を用いています。 また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。 すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。 ありがとうございました。