• 締切済み

VBからExcelへの指示の出し方

どのように書けばいいかわかりません。 よろしくお願いします。 VB5,Excel97で開発しています。 VB側で、複数シート選択して、選択したシートすべてを範囲として置換を行いたいのです。 1シートに対してはできたのですが、通常のExcelのように選択したシートすべてに対して一括して置換を行うには、VBからの命令をどのように記述すればいいのでしょうか。 以下のようにしています。 グローバル変数は、以下で設定 'Excel起動 Set g_xlsApp = CreateObject("Excel.Application") 'Excelワークブックを作成 Set g_xlsBook = g_xlsApp.Workbooks.Add(エクセルBOOK名) Private Sub cmdExec_Click() 'マクロ実行 Call g_xlsApp.Run(マクロ名, 引数1, 引数2) 'シート選択 wCnt = g_xlsApp.Worksheets.Count For i = 3 To wCnt g_xlsBook.Worksheets(i).Select False Next '置換 ???????????? End Sub

みんなの回答

noname#4564
noname#4564
回答No.1

  Excel 2000で試してみたところ、↓こんな感じで行けました。 Sub Macro1() Cells.Select Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Cells.Select Selection.Replace What:="置換前", Replacement:="置換後", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False Cells(1, 1).Select Sheets(1).Select End Sub このままでは問題が多いので、修正が必要だとは思いますが、参考までに。  

Taketoshi
質問者

補足

早速の回答、ありがとうございます。 Excelのマクロでは、回答のように、 Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Cells.Select Selection.Replace What:="置換前", Replacement:="置換後", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False で、OKなのですが、VBからExcelへの命令では、Cellsはどのオブジェクトになるのでしょうか。 よろしくお願いします。

関連するQ&A

  • Excelvba2000でExcelファイル間のコピーを行いたい

    現在マクロ実行中のExcelブックのシートのセルの値を、 新規作成したブックのシートのセルに値を貼り付けたいのですが、 うまくいきません。 ただし、コピーの条件として、クリップボードは使用しない Activeメソッドや、Selectメソッドも使用しないという制約があります 以前は、うまくいっていたのですが、コードの書き方を忘れてしまいました。以下の★印の行で、 「RangeクラスのCopyメソッドが失敗しました。」とエラーが出ます。 以前は、以下のコードに似た、ロジックで、問題なかったのですが、 どこか間違っていますでしょうか? Dim xlsApp As Excel.Application Dim xlsBook As Excel.Workbook Dim xlsSheet As Excel.Worksheet Set xlsApp = CreateObject("Excel.Application") Set xlsBook = xlsApp.Workbooks.Add Set xlsSheet = xlsBook.Worksheets(1) '★エラー発生 ThisWorkbook.Worksheets("Sheet1").Range("A1:D4").Copy _ Destination:=xlsBook.Worksheets("Sheet2").Range("E5")

  • VB6.0 Excel 同シートで毎回改行して書き込む方法

    こんにちは。VB6.0(SP5)、Excel2003、WindowsXPでVBの勉強をしています。 現在、VBでコマンドボタンを押した時に、Excelに押した時の時間を書き込むプログラムを作成しています。 一応プログラムを組むことができたのですが、再びコマンドボタンを押すと2回目以降書き込んだ時間を上書きするものです。 コマンドボタンを押した時、時間の書き込みを毎回次の行で行うプログラムを組みたいと思っています。 毎回改行して書き込むためには、どのようにプログラムを書くと良いでしょうか? ご指導よろしくお願いします。 組んだプログラムを下記に記します。 Private Sub Command1_Click() Dim xlsApp As Object Dim xlsBook As Object Dim xlsSheet As Object On Error Resume Next Set xlsApp = GetObject(, "Excel.Application") Set xlsBook = xlsApp.ActiveWorkbook Set xlsSheet = xlsBook.Sheets.Add If Err.Number <> 0 Then Set xlsBook = xlsApp.Workbooks.Add Set xlsSheet = xlsBook.ActiveSheet End If Call Excel(xlsBook, xlsSheet) Set xlsSheet = Nothing Set xlsBook = Nothing Set xlsApp = Nothing On Error GoTo 0 End Sub Private Sub Excel(xlsBook As Object, xlsSheet As Object) Dim hh As Single Dim mm As Single Dim ss As Single xlsSheet.Range("A1") = Format(Time, "hh:mm:ss") End Sub

  • Excelとの…

    皆さんはじめまして。早速質問です。VBからExcelを起動して、ブックを表示しました。そして、VBのからもう一度Excelのブックを表示しようとイベントを起こしたときに、ブックが既に表示されていた場合はそのブックをアクティブにしたいのですが、 Private Sub cmdXlsnew_Click() '★新規 Excel 表示 On Error Resume Next Set xlsApp = GetObject(, "Excel.Application") '★ブックがない時、又はエラーが生じた時 If Err.Number <> 0 Then Set xlsApp = CreateObject("Excel.Application") '★Excelにブック追加 xlsApp.Workbooks.Add '★コマンドライン引数取得 xlsApp.DefaultFilePath = str_path End If '★Excelを表示 xlsApp.Visible = True Set xlsApp = Nothing Err.Clear End Sub のようにしたのですが、アクティブになりません。ちなみに xlsApp.Visible = True を xlsApp.Activate にしてもなりませんでした。困っています。初めて来たにしてはずうずうしいのですが、教えてください。お願いします。

  • VBによる変数でエクセルを開く

    解る方教えて下さい。 例えば、決まったファイル名のエクセルを開く時は、 SET xlsApp = CreateObject("Excel.Application") SET xlsBook = xlsApp.Workbooks.open("C:\TEMP\テスト.xls") SET xlsSheet = xlsBook.Sheets(1)  だと思いますが、 訳あって、エクセルファイル名が入った変数(例 ZZFILE)で開きたいのですが Workbooks.open の指定方法がわかりません。 解る方、宜しくお願い致します。

  • VBで既存エクセルシートを新規ブックにコピー

    VB6,Excel2003です。 既存のエクセルシートを新規ブックにコピーする プログラムを作成してみましたが タスクバーに新規ブックのタスクバーボタンが2つできてしまいます。 どこが原因か教えてください。よろしくお願いします。 Private Sub Command1_Click() Dim xlsApp As Excel.Application Dim xlsBookTemp As Excel.Workbook 'コピー元ブック Dim xlsBookCopy As Excel.Workbook 'コピー先ブック Dim xlsSheetTemp As Excel.Worksheet 'コピー元シート Dim xlsSheetCopy As Excel.Worksheet 'コピー先シート Set xlsApp = CreateObject("Excel.Application") Set xlsBookTemp = xlsApp.Workbooks.Open("C:\Temp.xls") Set xlsSheetTemp = xlsBookTemp.Sheets(1) Set xlsBookCopy = xlsApp.Workbooks.Add Set xlsSheetCopy = xlsBookCopy.Sheets(1) xlsApp.Visible = True 'コピー元のSheet1を新規ブックにコピーする xlsSheetTemp.Copy Before:=xlsSheetCopy 'コピー元のブックは閉じる xlsBookTemp.Close '///新規ブックの編集処理/// Set xlsSheetTemp = Nothing Set xlsBookTemp = Nothing Set xlsSheetCopy = Nothing Set xlsBookCopy = Nothing Set xlsApp = Nothing End Sub

  • オブジェクトが必要です・・・・・

    オブジェクトが必要です・・・・・ すみません、判りません、丸投げです(爆)、申し訳ありませんがどなたか完成していただけませんか?;; また、この辺りをサルでも判るように解説してくれていて勉強し易いサイトがあったら教えてください・・・ Private Sub コマンド1_Click() Dim xlsApp As Excel.Application Dim xlsBook As Excel.Workbook Dim xlsSht As Excel.Worksheet Set xlsApp = CreateObject("Excel.Application") Set xlsBook = xlsApp.Workbooks.Open("■■■■■.xls") Set xlsSht = xlsWkb.Sheets(■■■■) If xlsBook.ReadOnly Then xlsBook.Close MsgBox "そのファイルは既に開かれています。" xlsApp.Quit Else xlsBook.Close End If Set wkb = Nothing: Set xls = Nothing Exit_exOpenEditC: Exit Sub Err_exOpenEditC: MsgBox Err.Number & " - " & Err.Description Resume Exit_exOpenEditC End Sub accessからexcelファイルをシートを指定して開き、重複の場合は開かない様にし、メッセージボックスを表示させたいのです・・・

  • エクセルの二重起動をやめたい

    VBからエクセルを起動する際、すでに開いているファイルは開かないようにしたく、検索をした結果 http://oshiete1.goo.ne.jp/kotaeru.php3?q=237618 の回答があり参考にしたのですが、うまくいきません。 はじめは   Dim xlsApp As Excel.Application   Dim xlsBook As Excel.Workbook がうまくいかず悩んだのですが、「オブジェクト」-「参照設定」でエクセルを選択することによって解決しましたが、   For Each xlsBook In xlsApp.Workbooks     '見つかったらループを抜ける     If StrComp(xlsBook.FullName, findBookPath, vbTextCompare) = 0 Then     Exit For    End If   Next xlsBook の部分で上手く引っ掛けることができません。 なにか設定が足りないのか? どなたか分かる方がみえましたらよろしくお願いいたします。 では

  • Excel2000で、特定のシートを新規ブックに保存したい

    マクロ実行中のブックの特定のシートを新規ブックに保存したいのです。 特定のシートは、任意で複数枚あるとします。 但し、クリップボードや、Activeメソッド、Selectメソッドなど、 マクロ実行中に、Windowsの他のアプリケーションに 影響の出る恐れがあるロジックは使用しないとします。 また、特定のシートには、罫線や色の設定なども してあり、新規ブックに書式も保存します。 以下のコードは、クリップボードを経由せず、セルをコピーしています。 Sub a() Dim xlsApp As Excel.Application Dim xlsBook As Excel.Workbook Dim xlsSheet As Excel.Worksheet Set xlsApp = CreateObject("Excel.Application") Set xlsBook = Workbooks.Add  '★1 Set xlsSheet = xlsBook.Worksheets(1) '★2 ThisWorkbook.Worksheets("Sheet1").Range("A1:D200").Copy _ Destination:=xlsBook.Worksheets("Sheet1").Range("A1:D200") xlsBook.Close xlsApp.Quit Set xlsApp = Nothing Set xlsBook = Nothing Set xlsSheet = Nothing End Sub このコードは、ちゃんと動きます。 しかし、問題があります。 xlsApp.ScreenUpdating = False xlsApp.Visible = False など上記のコードに追加すると、新規ブックの操作できません。 ★1の部分で、 Set xlsBook = Workbooks.Add  としているからです Set xlsBook = xksApp.Workbooks.Add  とすると、 xlsApp.ScreenUpdating = False xlsApp.Visible = False など、新規ブックの操作ができます。 しかし、 Set xlsBook = xksApp.Workbooks.Add  では ★2の ThisWorkbook.Worksheets("Sheet1").Range("A1:D200").Copy _ Destination:=xlsBook.Worksheets("Sheet1").Range("A1:D200") で、「RangeクラスのCopyメソッドが失敗しました。」 とエラーが発生します。 何か良い方法はありますか?

  • エクセル(マクロ)置換 結合されたセルに対しての置換

    こんばんは、 今置換用のマクロをこちらで検索して使ってましたが 使用するエクセルのフォーマットが 1セルに入力されてるのではなく、3つのセルを結合されている物に入力されているもので 下記のマクロだと、正しく置換されておりません。 置換変換用のシートと、置換したいシートがある状態で、 下記のマクロだとなぜ結合されたセル内の文字は置換えできないのでしょうか? 結合されてないセルですと、置換はちゃんとされております。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row ActiveSheet.Cells.Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub 明日の昼までに5000個のファイルを置換えするので これが出来ればなぁと思っております。 大変お手数ですが教えて頂けると助かります では、よろしくお願いいたします。

  • 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. ←これ以降がわかりません。

専門家に質問してみよう