【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

COMコンポーネントを用いた以下2点のExcelファイルの操作方法が分からず困っています。

1.指定されたシートを同一Excelファイル内にコピー追加する方法。

2.指定されたシートのシート名を変更する方法。

以上よろしくお願いします。

A 回答 (2件)

<第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
    • good
    • 0
この回答へのお礼

環境を付け忘れましたが、VB2005を用いています。
また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。

すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。

ありがとうございました。

お礼日時:2007/08/29 01:40

お世話になります。



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/releas …

VB6 から Excel を扱う場合はこちらを参考にして下さい。
http://naoko.wankuma.com/tips/tips_0001_vb6excel …
    • good
    • 0
この回答へのお礼

環境を付け忘れましたが、VB2005を用いています。
また、MSDNをよく探すと詳しい情報が出ており自己解決致しました。

すぐに質問文を消したかったのですが、24時間経たないと消せないようなので放っておいた次第です。

ありがとうございました。

お礼日時:2007/08/29 01:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!