エクセルマクロ シート名称と他のファイル間の操作について

このQ&Aのポイント
  • シート名称に「NY(1)」というように、()を使っています。多分この()が原因だと思われますが、Dim sh1 As worksheet Set sh1 = worksheets("NY(1)") と定義しても、うまく作動しません。
  • コマンドボタンからシート「NY(1)」にあるプログラム(例えばコピーなど)を実行したい場合、どのような定義?構文を組めば作動するでしょうか?
  • エクセル2003、OS=XPの環境で、ブック(ブック名=NY100)から(ブック名=NY200)のデータを操作する方法を教えてください。
回答を見る
  • ベストアンサー

エクセルマクロ シート名称と他のファイル間の操作について

シート名称に、「NY(1)」というように、()を使っています。 多分この()が原因だと思われますが、 Dim sh1 As worksheet Set sh1 = worksheets("NY(1)") と定義しても、うまく作動しません。 「実行時エラー”9” インデックスが有効範囲にありません。」 というメッセージが出てしまいます。 私の要望は、sheets("データ")上のコマンドボタンから、sheets("NY(1)")にあるプログラム(例えばコピーなど)を実行したいものです。 こういった場合、どのような定義?構文を組めば作動するでしょうか? 次に、このブック(ブック名=NY100)から(ブック名=NY200)のデータを操作する場合、(前者のブックにあるデータを、後者のブックに複写して、前者のコマンドボタンを押すことによって、後者のプログラム(例えばコピーなど)を実行させる)には、どのような定義?構文を組めば作動するでしょうか? どなたか教えてください。 ちなみに、エクセル2003、OS=XPです。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

下記、 CommandButton1_Clickは、   Workbooks("NY100.xls")のWorksheets("データ")の"C3:E8"を、   同じブックのWorksheets("NY(1)")にコピーする例です。 CommandButton2_Clickは、   Workbooks("NY100.xls")のWorksheets("データ")の"C3:E8"を、   Workbooks("NY200.xls")のWorksheets("NY(2)")にコピーして、   Workbooks("NY200.xls")のWorksheets("NY(2)")を、   Workbooks("NY200.xls")のWorksheets("NY(2)COPY")にコピーする例です。    2つのブックとも開いておく必要があります。 ※「実行時エラー”9” インデックスが有効範囲にありません。」のエラーは  シート名を間違えている場合もありますが、ボタンを使ってマクロを起動している場合、  シートが選択されない(フォーカスがボタンにある)状態がよく起きます。    コードに『ActiveCell.Activate』を挿入するか、    ボタンのプロパティ『TakeFocusOnClick』をFalseにしてみて下さい。     CommandButton1、CommandButton2は、Worksheets("データ")に配置し、 下記コードはWorksheets("データ")のコードウインドウに書いています。 ご参考に。(Excel2000で確認) Private Sub CommandButton1_Click()   '// シートの定義   Dim srcWS As Worksheet   '// コピー元ワークシート   Dim desWS As Worksheet   '// コピー先ワークシート     Set srcWS = Worksheets("データ")     Set desWS = Worksheets("NY(1)")      '// セルのコピー(C3:E8をコピー先シートの同じ位置にコピーする例)   srcWS.Range("C3:E8").Copy Destination:=desWS.Range("C3") End Sub Private Sub CommandButton2_Click()   '// ブックの定義   Dim srcWB As Workbook    '// コピー元ブック   Dim desWB As Workbook   '// コピー先ブック     Set srcWB = Workbooks("NY100.xls")     Set desWB = Workbooks("NY200.xls")      '// シートの定義   Dim srcWS As Worksheet   '// コピー元ワークシート   Dim desWS1 As Worksheet   '// コピー先ワークシート1   Dim desWS2 As Worksheet   '// コピー先ワークシート2     Set srcWS = srcWB.Worksheets("データ")     Set desWS1 = desWB.Worksheets("NY(2)")     Set desWS2 = desWB.Worksheets("NY(2)COPY")      '// ブック間でセルのコピー   srcWS.Range("C3:E8").Copy Destination:=desWS1.Range("C3")      '// コピー先ブックでのセルのコピー   desWS1.Range("C3:E8").Copy Destination:=desWS2.Range("C3")    End Sub

gotetsu
質問者

補足

早速のご教示、ありがとうございました。 全く問題無く作動しました。 すみませんが、もうひとつだけ教えて欲しいのですが、 別ブック間で「セルの値のみ」コピーする構文を教えていただけないでしょうか? どうかよろしくお願いいたします。

その他の回答 (1)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>別ブック間で「セルの値のみ」コピーする構文を教えていただけないでしょうか? 値複写の場合は、回答例を書き換えると下記のようになります。 ブック間でセルのコピー の場合、   srcWS.Range("C3:E8").Copy Destination:=desWS1.Range("C3")      ↓   srcWS.Range("C3:E8").Copy   desWS1.Range("C3").PasteSpecial Paste:=xlValues

gotetsu
質問者

お礼

大変助かりました。 問題が解決して作業を次へ進めることができます。 本当にどうもありがとうございました。

関連するQ&A

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • excelでマクロシートをコピーしたとき

    excelでbook1のsheet1のセルA1に「1」を入力→プリントアウト→A1に「11」を入力→プリントアウト・・・以下「31」まで繰り返し。 というマクロが組んであります。 (ボタンにマクロが登録されています。) このシートをbook2にコピーをしたときに マクロを実行する(ボタンを押す)とbook1が開いてしまいます。 これをbook1を開かずにbook2でマクロを実行するには どのようにしたらよいでしょうか。 book2でマクロを作成し直して さらにボタンにマクロを登録していますが、 bookの数が多いのでけっこうな手間になります。 簡単な方法があれば教えて下さい。

  • エクセル ブック間コピー マクロ

    ブックA(ブック名は固定)のシートA(シート名は毎回違います)を ブックB(ブック名は固定)の一番左へコピーしたいのですがうまくいきません。 動作 :シートAでマクロを実行しブックBへシートのコピー(挿入)します。 まず第一段階のブックAのシートAをブックBへのコピーがうまくいきません。 シートAが固定シート名ならコードは Sheets("A").Select Sheets("A").Copy Before:=Workbooks("B.xls").Sheets(1) ですが・・・・ Sheets("A").SelectをWith ActiveSheet.Selectにすれば良いのですか? 申し訳ないのですが、後教授お願いします。

  • エクセル マクロ

    エクセル2000を使っています。 「申請書」、「標準事務用品」の2種のシートがあって、「申請書」のシートは定型の入力フォーム、「標準事務用品」は入力フォームに反映させたいデータの一覧表になっています。データの項目は左から、1.申請2.品物3.商品名4.品番5.メーカー名となっており、データは全部で74行あります。1.申請項目の列には各行1個づつコマンドボタンを設けました。コマンドボタンがクリックされたときに、該当行のセルの内容を入力フォームにコピーする処理が実行されるようにしたいです。 マクロの記録で記述されたコードをコマンドボタンのコードにコピーしてみましたが、エラーになってしまい修正の仕方がわかりません。 Private Sub CommandButton1_Click() Range("K30").Select Selection.Copy Sheets("申請書").Select ActiveSheet.Paste Sheets("標準事務用品").Select Range("L30").Select Application.CutCopyMode = False Selection.Copy Sheets("申請書").Select  (↓ここでエラーになってしまします。) Range("B13:G13").Select ActiveSheet.Paste Sheets("標準事務用品").Select Range("M30").Select Application.CutCopyMode = False Selection.Copy Sheets("申請書").Select Range("B15:C15").Select ActiveSheet.Paste Sheets("標準事務用品").Select Range("N30").Select Application.CutCopyMode = False Selection.Copy Sheets("申請書").Select Range("B14:G14").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub また、全部で74行あるので、全てに操作を記述するのは非効率的だろうと思います。何か良い方法はありますでしょうか。 ご助言お待ちしております。

  • EXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

    メインプログラム(EXCEL VBA)より、 他のフォルダーにあるEXCELの項目の内容を取り込みたいです。 たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。 ・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。 ・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。 ・となると次はOPEN,INPUTですか? テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。 よろしくお願いします!

  • エクセルマクロ:リストについて

    すみません、やっぱり分からなくなってしまったのでもう一度 質問させて下さい。 ボタンでマクロを実行すると、user formが開き、[ブック取得]という コマンドボタンを押すと現在開かれているブック名がリスト一覧で出てきます。 その一覧のうち一個のファイルを選択して[修正]ボタンを押すと 対象のブックにあらかじめ設定されているマクロが実行されると 言うのを作りたいと思っています。 わかりにくいかとは思いますがよろしくお願い致します。

  • エクセルで、シートを非表示のままマクロを実行するには?

    エクセル初心者です。 Sheet1で、マクロの実行ボタンがあり、Sheet2で、データを編集して、 Sheet1に結果の一覧を表示させるマクロなのですが、 Sheet2は非表示のままマクロを実行したいのですが、うまくいかず、 Sheet2を表示して、実行するとうまくいくため、 一時的にシートを表示させるようにしてみたのですが、 Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown で、アプリケーション定義・オブジェクト定義エラーになります。 どなたかご指南下さい。 Private Sub EDITSLINF() Dim rowCnt As Long Application.ScreenUpdating = False Worksheets("製造記録一覧 (edit1)").Visible = True  Sheets("Sheet2").Range("AB2:AK300").ClearContents '追加レコード抽出&コピー&ペースト Sheets("Sheet2").Range("Q1:Z300").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "AP1:AP2"), CopyToRange:=Sheets("Sheet2").Range("AB1:AK1"), Unique:=False '既存レコードコピー&ペースト rowCnt = Sheets("Sheet2").Range("O1") Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Insert Shift:=xlDown Sheets("Sheet2").Range(Cells(2, 28), Cells(rowCnt, 37)).Interior.ColorIndex = xlNone Sheets("Sheet2").Range(Cells(2, 2), Cells(rowCnt, 11)).Copy Sheets("Sheet2").Range("AB2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Worksheets("Sheet2").Visible = False 'メインシートへコピー   Application.CutCopyMode = False Sheets("Sheet2").Range("AB2:AJ300").Copy Sheets("Sheet1").Range("K4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False End Sub

  • マクロ 他のブックで使うとき保存したファイル開かな

    自分はマクロ初心者で先日初めてマクロ有効のエクセルファイルを作りました。作ってボタン(押したらマクロが実行されるもの)を用意し、満足できる出来になったのはいいのですが、そのボタンをコピーして他のブックにはりつけ、ボタンを使おうとしたら、エラーになってしまいます(○○○というブックの名前が変更されたか、消された可能性があります) その指定のブックを開いた状態でボタンを使えばうまく動きます。 どうすれば、その指定のブックを開かずともマクロ月のボタンを使えるでしょうか? ちなみにエクセルのバージョンは最新で、自分以外のパソコンでも同じことが起きるのでバグではないと思います。 宜しくお願いします。

  • エクセルのマクロについて

    エクセル97でマクロを組んで下記作業を行いたいと考えていますが(実際にやりたい事から抜粋した内容です)、不具合が起こっています。 ~やりたい事~ コマンドボタンを押すとあるシートのセルをコピーして、違うシートに貼り付ける。 ~不具合内容~ (1)普通にマクロを実行すると問題ないが、(2)コマンドボタンを使用するとエラーが起こる。 エラー内容は、 「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」 と言う内容です。 ~(1)のVB表記~ Sub Macro1() Sheets("sheet1").Select Range("A1").Select Selection.Copy Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~(2)のVB表記~ Private Sub CommandButton1_Click() Sheets("sheet1").Select Range("A1").Select (←ここでエラーが発生します) Selection.Copy  Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~質問事項~ 1)(2)の表記の何が原因でエラーが起こっているのでしょうか? 2)エラーが起きない為にはどのようにしたら良いでしょうか?

  • Excelでシートをコピーする時に「シート名が長すぎます」と表示される

    環境 OS : Win2000 SP4 Office : Excel 2000 SP1 表題の通りでシート名「P.05-2_BK(-2)」を同じブック内でコピーしようとすると「シート名が長すぎます」とメッセージが出てコピーできません。 MSのサイトではシート名は半角31文字までOKと書いてあるのですが・・・ マクロでは大丈夫かな?と思い Sub Macro1() Sheets("P.05-2_BK(-2)").Select Sheets("P.05-2_BK(-2)").Copy After:=Sheets(24) End Sub と言うマクロを実行してみましたが、2行目で同じエラーが出ます。 また、ブックが悪いのかと思い、シートを新しいブックにコピーして、その新しいブック内でコピーしようとしても同様にエラーが出てコピーできません。 何故なんでしょう??

専門家に質問してみよう