エクセルVBAでシートをコピーする方法とシートを指定する方法

このQ&Aのポイント
  • エクセルVBAでシートをコピーする際、新しいシートを指定する方法が知りたいです。現在は元のシートをコピーして、番号を増やし、データを消去する方法を使っていますが、新しいシートを指定して番号を増やし、データを消去したいです。
  • 現在のVBAコードでは、指定したシートをコピーして、新しいシートを作成し、番号を増やし、データを消去しています。しかし、シート名には内訳の番号(1、2、3...)が表示されるので、新しいシートを指定して番号を増やし、データを消去したいと思っています。
  • 今のVBAコードでは、シートをコピーして新しいシートを作成し、番号を増やし、データを消去していますが、新しいシートを指定して番号を増やし、データを消去する方法が知りたいです。現在は元のシートの前にコピーを作成し、番号を増やし、データを消去しているので、シート名には内訳の番号が表示されます。
回答を見る
  • ベストアンサー

エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほう

エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほうを指定する言葉を知りたい。 コマンドボタンにて、(1)内訳用シートをコピーで増やす。(2)新しいシートの番号を連番になるよう1増やす。(3)新しいシートのほうは入力しやすいよう、入力欄を消去する。シート名も1.2.3...とふえていくようにしたい。 新しくコピーされたほうのシートを指定したい場合はどのようなVBA用語になりますか? いまは、元のシート指定方法しかわからないため、元シートの前にコピー作成し、元シートのNoを1増やし、データ消去で対応していますが、これだと、シート名に表示される内訳(1)(2)・・という番号になるので、できれば、コピーしたほうのシートを指定して、Noを1増やし、データ消去できれば解決するとおもうので。。いま、使ってるVBAはこんな式です。 ちなみにK6はシートNo、("B10:H30")("J10:K30")は入力欄です。 Private Sub CommandButton1_Click() ActiveSheet.Copy Before:=ActiveSheet Range("K6").Value = Range("K6").Value + 1 Range("B10:H30").ClearContents Range("J10:K30").ClearContents ActiveSheet.Select ActiveSheet.Name = Range("K6").Value End Sub

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.3

一番最後尾にデータの入っていないシートを 連番とダブらないような名前で作っておいて Private Sub CommandButton1_Click() Sheets(Sheets.Count).Copy Before:=Sheets(Sheets.Count) NEWWS = Sheets.Count - 1 Sheets(Sheets.Count - 1).Name = NEWWS End Sub というのはどうでしょうか。

a_nyan
質問者

お礼

質問内容文がわかりにくかったのに、意図をくみとってくださりありがとうございます。 いままでのVBAだとシート名の番号が実際と逆転するのがネックだったのですが・・・。 最終シートはシート名も「内訳最終」と言う感じにして、 ActiveSheet.Name = "内訳" & "【" & (Range("K6").Value - 1) & "】" Sheets("内訳最終").Select とすることでうまくいきました。ありがとうございました。

その他の回答 (2)

  • air300p
  • ベストアンサー率15% (9/60)
回答No.2

誤)Sheets(cnt).Range("a1")>Value = 1 正)Sheets(cnt).Range("a1").Value = 1

a_nyan
質問者

お礼

回答ありがとうございます。今回はNo3さんの方法でいきましたが、また参考にしたいとおもいます。ありがとうございました。

  • air300p
  • ベストアンサー率15% (9/60)
回答No.1

新しいシートは右か左のはじっこになるので(After、Beforによる) Dim cnt As Integer cnt = Worksheets.Count Sheets(cnt).Range("a1")>Value = 1 または Sheets(1).Range("a1").Value=1 みたいな感じで指定すればどうでしょうか?

関連するQ&A

  • エクセルVBAでコピーすると行の高さが低くなる

    いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。

  • エクセル VBA シートのコピーが上手く出来ない

    原因が分かりません。宜しくお願いします。 エクセルVBAで、フィルターを掛けたシートを別シートへコピーしています。 問題なく出来ていたルーチンでしたが、他の作業の影響か、 気がついたらコピー出来なくなっていました。 他のシートでも同じ方法でコピーを行っていますが、問題ありません。 問題のコーディングは以下のとおりです。 Worksheets("work2").Unprotect Worksheets("work2").Range("A:Z").ClearContents Worksheets("コピー元").Range("A5").AutoFilter Field:=6, Criteria1:=フィルタ請求年1, Operator:=xlOr, Criteria2:=フィルタ請求年2, VISIBLEDROPDOWN:=True Worksheets("コピー元").Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("work2").Range("A1") Worksheets("work2").Protect Worksheets("コピー元").Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("work2").Range("A1") の箇所では、エラーメッセージもでませんが、コピーもされていないことを確認しています。 どのような原因が考えられるでしょうか? または、どのような方法で原因追求が出来るでしょうか? ご回答お待ちしています。

  • 【VBA】シートのコピー ~ 値に直す

    大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

  • エクセルで、D6からK6のセルにある文字列をそのままシート名にしたいで

    エクセルで、D6からK6のセルにある文字列をそのままシート名にしたいですがうまくいきません。型が違いますとのエラー表示ですが意味がわかりません。 Sub 内訳明細シート名に現場名反映() ActiveSheet.Name = ActiveSheet.Range("D6:K6").Value End Sub この式をどう修正したらよいでしょうか?

  • VBAのシートコピーで時間が・・・

    VBAにてシートコピーのことについて悩んでいます。 行き詰ってしまったためお助け願えないでしょうか? シートをコピーしていくコードを書いてあるものなのですがやたらとコピーに時間を要してしまいます。 私の施した処置としては当たり前かもしれませんが自動再計算の処理をしないと画面の更新を止めました。実績として全てのコピーが終わるのに1時間近くかかったものが10分くらいまで短縮できました・・・のですがやはり自分の欲としては5分以下に短縮をしたいのです。 他に良い方法はあるのでしょうか? シートの内容としてはかなり多くの数式が入った物を8枚程度コピーするものです。あまり時間が無いので大幅な改良は出来ません。 申し訳ありませんがよろしくお願いします。 時に下記のコードを追加したらすごい遅くなりました・・・ 代替案はどうしたらよいでしょうか? Private Sub CommandButton1_Click() With ActiveSheet .Protect Sheets("Piquet" & Right(.Name, 4)).Range("A1").Value = 1 Sheets("Piquet" & Right(.Name, 4)).Calculate Sheets("Piquet" & Right(.Name, 4)).Range("A1").Value = 9 Sheets("Piquet" & Right(.Name, 4)).Calculate Sheets("Piquet" & Right(.Name, 4)).Select End With End Sub

  • EXCEL 別シートのコピー(3)

    こんにちは。 こちらで以前こちらで質問をさせていただき、EXCELの別ブックのシートからコピーをしています。 元のブックのコピーを作り、そこに入力してもらい、元のブックにコピーをしています。(同じフォルダに入れて) Private Sub CommandButton1_Click() Dim myBook As Workbook Set myBook = Workbooks.Open(ThisWorkbook.Path & "\コピー元ブック.xls")  with workbooks("コピー元ブック.xls").worksheets("シート名").usedrange workbooks("貼り付け先ブック.xls").worksheets("シート名").range(.address).value = .value end with end sub ここでブックがない場合、そのブックを飛ばしてあるブックだけコピーしたい場合は、どうしたらいいでしょうか。いろいろやってみましたが、コピーできませんでした。 教えてください。

  • エクセルVBAで画像を貼り付ける座標設定方法は?

    Sheets("Sheet1")に貼り付けたJ-pegの画像(=シンボルマーク)を別なシートに貼り付けるのは下記のVBAで出来ました。ただ、これでは貼り付け先のシートのセルK12が、貼り付け元のK12と同じ位置でないと思った場所に張り付きません。 そこでセルで場所を指定するのではなく、座標のようなもので指定する方法はないものかと考えた次第です。 オートシェイプなどは座標指定で作成できるのですが、J-pegのような画像はどうすればいいのでしょうか? Sub TEST() Sheets("FACE").Shapes("シンボルマーク").Copy ActiveSheet.Range("K12").Select ActiveSheet.Paste End Sub

  • Excel VBA 構文をすっきりさせたい

    いつもお世話になっています。 次のような構文を使って、データを別シートに転送するVBAを作成しました。 転送するデータが多い場合、構文が延々続くことになります。 もっとすっきりと記述する方法がありましたらぜひ教えてください。 お力添え、よろしくお願いします。 Sub データ() With ActiveSheet Dim last last = ActiveSheet.Range("b" & Rows.Count).End(xlUp).Row + 1 .Range("b" & last).Value = Worksheets(2).Range("b2").Value .Range("c" & last).Value = Worksheets(2).Range("c2").Value .Range("d" & last).Value = Worksheets(2).Range("d2").Value     以下同様に続く・・・・ End With End Sub

  • EXCEL VBA オートフィルタの値コピー2

    たびたびすいませんよろしくお願いします。 EXCEL VBA オートフィルタの値コピーの追加質問です http://okwave.jp/qa4803815.html?ans_count_asc=20 オートフィルタ後、1日当たり行は10~15行あります、そのうちH列からM列まで、ある1行にデータがありますそのデータをH列から順番にSheet1のM20とM28までコピーしたいのです、ただ日によってその列は空欄の時やM列だけの時もありますもあります。さらにN列からP列まで同じようにデータがある時(H列からM列と行が違うときがあり)、上にある行からSheet1のM20とM28に上詰めでコピーしたいのです。 もっと簡単にいいますとH列からP列まである値を上の行からさらにH列から順番に上詰めでSheet1のM20とM28にコピーしたいのです。 なにとぞよろしくお願いします。 Sub データコピー() Range("AB17") = Format(Sheet3.Range("A3").Value, "yy") Range("AE17") = Format(Sheet3.Range("A3").Value, "mm") Range("AH17") = Format(Sheet3.Range("A3").Value, "dd") Range("AK17") = Format(Sheet3.Range("A3").Value, "aaa") Range("D22") = Sheet4.Range("D3").Value Range("D25") = Sheet4.Range("E3").Value Range("H22") = Sheet4.Range("F3").Value Range("D22") = Sheet4.Range("G3").Value Range("L22") = Sheet4.Range("K3").Value Range("Q22") = Sheet4.Range("L3").Value Range("U22") = Sheet4.Range("M3").Value .   .   . End Sub

  • Excel VBA

    いつもお世話になっております。 ExcelのVBAの処理にてお聞きしたいのですが… Ret = MsgBox("項目を全て削除しますが、よろしいですか?", vbYesNo, "削除") If Ret = vbYes Then Worksheets("入力").Select Range("C10:I59").ClearContents Range("L10:R59").ClearContents Range("W10:Y59").ClearContents Range("AB10:AH59").ClearContents Range("AM10:AO59").ClearContents Range("AR10:AX59").ClearContents Range("BC10:BE59").ClearContents   ・   ・   ・ と長々しく書いているのですが、これをもっとスマートに 書く方法はありますか?? それから、こういったことが出来るなら教えて頂きたい のですが、、、 あるExcelのシート(1枚)を、所定のディレクトリに入って いるExcelファイル(数十ファイル)のシートの先頭に全て挿入して いくといったものなのですが、VBAで出来ますか?? 出来なくとも、近い感じの処理または、参考文献などあったら 教えて下さい。 宜しくお願い致します。

専門家に質問してみよう