• 締切済み

【VBA】シート名をセルに入力すると、そのシートのコピーを実行させるには?

【条件】 1.仮に「合計」というシートに、追加されるシートのあるデータをコピーしたい。 2.別シートに一定のフォームの集計データが入っているので、このシート名を変更して「A」という名前に変更する。そして、「合計」の入っているブックに移動する。 3.「合計」のA1のセルに「A」という入力をしマクロを実行すれば、「A」のシートの一定のRangeから、合計の任意の場所にコピーをするマクロをつくりたい。 4.このフォームは年間同じフォームで20回発生するがそのたびに、同じような作業が必要となります。 (シートにコピーする作業は、やめて、ブックの別ファイルのあるシートから、ある一定のRangeをコピー元として、「合計」にコピーするでも問題ないです)。 If ~ Elseif ~、myRange = A1で作っても、そのmyRange = A, Elseif = B、と延々につくらなければならない(=たぶんこれは原始的なのだと自認しています)のがはがゆく、 シート名が”文字列(または数字)”の場合、その”文字列(または数字)”をもつ、ブックまたはシートから、コピーを実行というコードをつくりたいのです。 よろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問の書き方がごたごたしていると思う。 また論点を絞れるのに(下記必要スキル参照)、課題を丸投げしただけ。丸投げに近い。 コードはかかず、参考事項にとどめます。 ーー 関係するのは、2つのブックのシート。 (あ)XフォルダのAブックの(集計シート)C (い)YフォルダのBブックの合計シートD    このシートのA1セルにシート名文字列 E を入れてVBAを実行。 ーー 作業の流れ (1)(あ)のシート名CをEに変える (2)(あ)のシートE(元の名C)をコピー (3)(い)のシートDの最終行の次に、コピーしたシートEのデータを貼り付け こういうことではないのか。 ーーー 必要スキル(部分的にブレークダウンすると、どういう型のコード作成になるか) (A)シート名変更 (B)他ブックの参照(捉える方法) (C)シートの最終行を捉える (D) コピーし貼り付け ーー (A)は Sub Macro1() Sheets("Sheet2").Name = "追加データ1" End Sub を参考。これなどマクロの記録でわかるよ。 (C)は VBAを使うものには常識。 Sub test02() d = Range("A65536").End(xlUp).Row MsgBox d End Sub Range("A" &(d+1))行以下に貼り付け。 (B)はGOOGLEで「エクセル VBA 他ブック参照」で商会すれば記事がたくさん出る。 http://konko.hinodetown.net/denno/sample/book.htm Set b = Workbooks("c:\data2.xls").Worksheets("A")のようなのがよかろう。 ーー 1つ気になるのが、毎回(年20回?)出来るシート(名)が変わるようだが(それとも毎月同一シートを使いまわしか?余りありえない)、この名前をプログラム側で捉えないといけないが、どうするつもりなんだろう。 これが捉えられれば、質問のシート名のリネームは必要ないのではと思いだしたが、おかしいかな。 A1セルに入れるシート名の必要性は。 毎回決った同一シートの下部分に次々累積すればよいのでしょう?

関連するQ&A

  • VBAでsheetのコピー

    ご回答有難う御座いました。補足説明を致します。動作するとこまでは、出来たのですが、一点変更しました。:=のコピーの所でデバッグすると、エラーになるので、=だけにしました。すると動作するのですが、新しいsheetの名前が、コピー元のsheet名になります。そして、MsgBoxを入れると、エラーになります。また、1sheetだけがコピーされます。大変恐縮ですが、もう一度ご教授願います。補足説明なりますが、やりたい事は、拡張子がxlsmの中に名前のついた10個のsheetがあります。この10個のsheetを拡張子がxlsxのBookにコピーしたいのですが、このBook1のsheetをVBAから新に作成しBook2のsheet1に纏めたいのですが、纏め方は、Book2のsheet1の下から上に10sheetをコピーして、条件としてBook2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだ4行目以降をコピーしたいのですが、また、コピーしたいsheetの範囲に列は、A1~AFで列は3~62までです。マクロはご教授頂いた、下記通りです。 Sub macro1() Dim i As Long Dim w0 As Workbook Dim s As Worksheet Set w0 = ActiveWorkbook '1枚目シートから貼り付け先のブックを作る w0.Worksheets(1).Copy Set s = ActiveSheet '2枚目以降のデータをコピーする For i = 2 To w0.Worksheets.count With w0.Worksheets(i) .Range("A4:AF" & .Range("A65536").End(xlUp).Row).Copy Destination = s.Range("A65536").End(xlUp).Offset(1) End With Next i End Sub これを先ほど書きました、マクロを教えて頂けませんでしょうか?何せ、マクロ初心者なので、msm相談箱がたよりです。何卒マクロを教えて頂きたく宜しくお願い申し上げます。

  • Excel VBA 他のシートからセル範囲をコピー

    宜しくお願いします。 Excel2003でVBAを利用しています。 他のブック内にある(sheet1)のセル範囲(B9:D64)の値を 現在開いているブック内の(sheet8)の指定した位置に貼り付けたいと 思っています。 コピーしたセルはB,C,Dと3列あるのですが、 B列を(sheet8)のB列に、C列を(sheet8)のF列に、 D列を(sheet8)のJ列のそれぞれ12行目を頭にして 貼り付ける、という作業をしたいのです。 上記のようなコピー作業が、列や行がばらばらで50箇所くらい あります。 マクロ記録で、2,3箇所試しにやってみたのですが、 1列づつ、クリップボードを経由して行わなければならず、 冗長なコードになってしまい、もっと良い方法があるのでは ないかと思い、書込みしました。 現在のコードです。 workbook(1).Activate 'コピー元のセルを選択してクリップボードへ Worksheets(sheet1).Range("B9:B64").Copy '1枚目 日付列 '現在のブックを選択して貼り付け ThisWorkbook.Activate Range("B12").Select '1枚目 日付列 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '形式を選択して値を貼り付け 上記のように、1列づつコピーしては貼り付けている状態です。 もっとスマートな方法がありましたら教えてください。 宜しくお願いします。

  • 【マクロ】シート名を参照してのシートコピー

    当方マクロ初心者です。 同じブックの中にシートが 1-A、1-B、2-A、2-B、3-A、3-B・・・ という規則のシート名で並んでいます。 "-A"から同じ数字の"-B"へそれぞれシートをコピーしたいのですが、どのようなマクロを組んだらよいのでしょうか。 もう少し具体的に申し上げますと、  ・1-Aのシートから1-Bのシートへコピー  ・2-Aのシートから2-Bのシートへコピー  ・3-Aのシートから3-Bのシートへコピー ・・・・ という事をやりたいです。 もしくは、最初は"-A"のシートだけあって、 それぞれ新たにコピーでシートを作り、その名前を"-B"に変えるという方法でも良いです。 最終的には”1-A、1-B、2-A、2-B、3-A、3-B・・・”というシートが並んでいて、 数字が同じシートは全く同じ内容、というブックを作りたいです。 皆様の知恵を拝借させてください。 よろしくお願い致します。

  • Excel シートを自動作成、セル値をシート名に 

    エクセルのマクロの自動記録で作業の効率化を図りたいのですがうまく出来ません、ご教示いただけ無いでしょうか。 (VBAは初心者です。本とネットを検索しながら作成していたのですが、 急きょファイルを作成しなければいけない状況になりました。) ■Excel2010 ■ブック詳細 ・Sheet"企業一覧" → 行ごとに企業名、シート名が記載された表があります。   A列 企業名   B列 シート名 ・Sheet"マスタ" → 見積書のフォーマットがあります。   A4 企業名  ■希望作業 シート「企業一覧」の企業ごとにボタンを作り、ボタンを押すと 1."マスタ(Sheet)"のコピーが作成され、 2.コピーされたシートのA4セルに"企業一覧(Sheet)"A列の企業名が記載され、 3.コピーされたシート名に"企業一覧(Sheet)"のB列のシート名が記載され、 4."企業一覧(Sheet)"のB列のシート名に新しいシートへのハイパーリンクを付け 5."企業一覧(Sheet)"に戻る ※下記作業ができません。 ・コピーされた新しいシートに、シート名が付けられない。 ・"企業一覧(Sheet)"のシート名にコピーされた新しいシートへのハイパーリンクを付けられない。 ※シートのコピーは可能なら"企業一覧(Sheet)"の企業名表記順に作成したいと思っています。 ※各企業行ごとにボタンを作るのは面倒なのですが、 企業名/シート名の表記がよく変更になるため、入力と同時にマクロが実行されるのではなく、 何かワンクッションを置きたいと思っています。 ※シートのコピー作成、企業名の記載までは出来たのですが、 その他の作業ができません。よろしくお願いいたします。 --------------------------- Sub Sheet作成() ' ' Sheet作成 Macro ' ' Sheets("マスタ").Select Sheets("マスタ").Copy After:=Sheets("マスタ") Range("A4:B4").Select ActiveCell.FormulaR1C1 = "=企業一覧!R8C1" Range("C4").Select Exit Sub End Sub --------------------------

  • 複数のセルをコピーし、別シートの任意のセルへペーストをするためのマクロ

    ブック(1)のシート(1)にある複数の離れたセル(A1,B2,C3,D4:F4)をコピーし、別ブックのシート(1)のセル(E1,F2,G3,B4:F4)へリンク貼り付けを実行するためのマクロを教えてください。 なお、ブック(1)とブック(2)は同一階層に置いてあります。 このブック(1)とブック(2)の表のフォーマットが違っており、ブック(1)のセルA1をコピーして ブック(2)のセルE1へ貼り付けし、 また同様にブック(1)のセルB2をコピーして ブック(2)のセルF2へ貼り付けをしていきます。 (A1→E1、B2→F2、C3→G3、D4:F4→B4:F4 へ貼り付ける) この作業をマクロを使って自動実行させたいと思っています。 御手数お掛け致しますが、何卒よろしくお願いいたします。

  • シートコピーと値の転記 シート名変更マクロを

    エクセル2010で マクロのご教授をお願いいたします。 BOOK1の Sheet1 A1~A10に 数値1000が入力されているとして Sheet1のシートのコピーを作成 Sheet1にもどり A1~A3の値だけコピーして 作業列C1に 値を貼り付け A1~A10 をクリアーにしたのちに  ※↓が うまくいきません。 A1の値→ A8 A2の値→ A9 A3の値→ A10 に入力 させるマクロは どうなるでしょうか? マクロの記録で いろいろと やってみましたが どうも ※の部分が うまくいきません どう考えてもエクセルに対しての 理解不足だと思われますが、ご教授のほどお願いします。 おこなった自動マクロの記録は↓です。 マクロの記録開始する 名前 シートコピー Sheet1を右クリックして移動またコピー コピーを作成にチェックをいれ OK コピーシートが作成される。 Sheet1をクリックしなおして A1からA3をコピー  作業列として C1に 形式を選択して貼り付け 値 A1~A10を delete でクリア C1~C3を選択 コピー A8に 形式を選択して貼り付け 値 マクロの記録終了。 あと Sheet1をコピーするさいに シート名を前日の日付に自動的に変更できればと いいなと 考えておりますが できるのでしょうか? 例えば、本日でいえば シート名→ 0112 のような シート名を変更できればすてきだと おもいます。 どうぞ よろしくお願いします。

  • マクロでセルに式を入力したい

    当方エクセル2002を使用しています。 F列からAJ列までの合計の式をSUMでAK列に入力したいのです。 そこで以下のマクロを書いてみたのですが実行時エラー438が でてしまい、「オブジェクトはこのプロパティまたは メゾットをサポートしていません」と出てしまいました。 どこか問題があるのでしょうか?教えてください。 iは変数です。 Set myRange = Range(Cells(i, 6), Cells(i, 36)) Cells(i, 37) = "=SUM(" & myRange.Adderss & ")"

  • VBA シートの違う特定のセルの値をコピーする

    エクセルVBA初心者です。 シート1の(A,1)にデジカメと表記があり、同じ行のB~Hの列にそれぞれの数字が入っていたとします。 それをシート2のA列の適当な行(例えばA,15)にデジカメという表記があった場合に、シート1の(B,1)~(H,1)の値をシート2の(B,15)~(H,15)にコピーする方法をご存じな方、教えて下さい。 単純なコピー&ペーストは「マクロの記録」で可能かと思いますが、シート2に「デジカメ」の項目があった場合に、シート1の元データから同じ「デジカメ」の項目を探しだし、コピーしたいのです。 なにぶん、初心者で勉強中なものですから、表記等適切でないものがありましたら申し訳ありません。

  • EXCEL VBA オートフィルで別シートへコピー

    EXCEL VBA オートフィルで別シートへコピー しようとしたら、うまくいきません 別々に書くとうまくいくのですが コードを一緒にするとうまくいきません? コード *********************************************** Sub 抽出別シート() Worksheets("時間合計VB").Select ' 時間合計VBのシートを選択 Range("A1").AutoFilter field:=8, Criteria1:="<=1" '1時間以下の8列目のをフィルター end sub sub カレントで別シートへコピー() Range("A1").CurrentRegion.Copy Sheets("1hdown").Range("A1")   'それをカレントして別シートのA1へコピー Range("A1").AutoFilter End Sub *********************************************** このように書くとうまくいくのですが これを一緒に書くと別シートへコピーがうまくいきません。 全てコピーされてしまいます +++++++++++++++++++++++++++++++++++++++++++++++ 一緒にしたコードです +++++++++++++++++++++++++++++++++++++++++++++++ *********************************************** Sub 抽出別シート() '1h以下をを抽出別シートへコピー Worksheets("時間合計VB").Select ' 時間合計VBのシートを選択 Range("A1").AutoFilter field:=8, Criteria1:="<=1"    '1時間以下の8列目のをフィルター Range("A1").CurrentRegion.Copy Sheets("1hdown").Range("A1")    'それをカレントして別シートのA1へコピー Range("A1").AutoFilter End Sub *********************************************** 意味が分かりませんどなたかおしえていただけませんでしょうか? よろしくお願いいたします

  • シートのコピーとMsgbox無効化

    VBAを使い、レポートを作成しようと考えています。 レポートを作成するに当たり、 今まで作成しておいたフォームを利用し、 新しいシートを作成していきます。 ※実行するにあたり、フォームで実行される  メッセージボックスが邪魔です… 例) 作成されたシート名    出荷数    累計    レベル    効果    ランク そして、そのシートを 新しいブックにコピーしようと考えています。 コピーしたいブックは、 レベル・効果・ランク のみになります。 最初は、ブックをコピーして保存し、 シートを削除してく方向を考えましたが ブックごとコピーしてしまったために、マクロまでコピーされてしまいました。 マクロは必要ありません。 シートの作成、コピーを色々考えていくうちに 良くわからなくなってしまったため、質問いたしました。 できれば、そのシートのみコピーしたいと思っています。 (新規作成したときのSheet1,Sheet2などは要らないです) 上のほうで書いた、メッセージボックスが邪魔という件ですが、 これは改善方法があれば回答いただけるとうれしいです。 (調べたところ、そういった情報はありませんでした) 回答よろしくお願いいたします!

専門家に質問してみよう