• ベストアンサー

excelで新規作成されるシート名をリセット

excelのVBAで、シートを作成、シート名を設定という動作をさせています。for nextで必要な数のシートを 作成して、 シートの新規作成×10枚 新規作成"sheet1"→"個人情報1"に名称変更 新規作成"sheet2"→"個人情報2"に名称変更 ・・・・・・ 新規作成"sheet10"→"個人情報10"に名称変更 という動作をさせた場合、あと5枚足りないという場合、 次に作成されるシートの名称は、"sheet11"からになりますよね? この場合sheet1から名称変更する命令なので、一旦ファイルをとじて、もう一度開かなくてはなりません。 作業中に、新規作成するシート名をsheet1にリセット する方法は、ないものでしょうか? また、オートシェイブの"circle1"とかも できないもんでしょうか? 宜しくお願い致します。

  • nappa
  • お礼率60% (12/20)

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

  • ベストアンサー
  • Raistlin
  • ベストアンサー率63% (65/102)
回答No.2

こんなアプローチではどうでしょうか。 たぶんやろうとされていることは実現できると思うのですが。 1.現在あるシート/オートシェイプの数をカウント。 2.シート/オートシェイプを追加、同時に変数に代入。 3.先ほど追加したシート/オートシェイプの名前を[名前の固定値]+連番に変更(2で代入した変数を対象)。 コードにするとこんな感じで Sub makeSht() Dim ShtNum As Integer Dim ShtName As String Dim NewSht As Object ShtNum = ActiveWorkbook.Sheets.Count ShtName = "顧客情報" & ShtNum + 1 Set NewSht = Sheets.Add(after:=Worksheets(Worksheets.Count)) NewSht.Name = ShtName End Sub Sub AddAtShp() Dim AtShpNum As Integer Dim AtShpName As String Dim NewAtShp As Object With ActiveSheet AtShpNum = .DrawingObjects.Count AtShpName = "図形" & AtShpNum + 1 Set NewAtShp = .Shapes.AddShape(msoShapeDonut, 70 + AtShpNum * 10, 32.25, 39, 39) NewAtShp.Name = AtShpName End With End Sub (Excel97にて確認)

その他の回答 (1)

  • ykymtkt
  • ベストアンサー率51% (14/27)
回答No.1

現在ワークシート等を指定されるときに ( Worksheets("Sheet1")  ) というような指定をしておられると思いますが、 その部分を Indexで指定されると良いと思います ( Worksheets(1) 記述で) そうすると11枚目のワークシートを追加した場合でも Worksheets(11) という記述で指定できます。

nappa
質問者

お礼

有り難うございました。早速やってみます。

関連するQ&A

  • EXCELの現在シート名の変更

    いつもお世話になっております。 excelで、現在開いているシート名をVBAで変更しようとしているのですが、なかなかうまく行きません。 と言うのも、シート名がわかれば、名称変更は簡単なんですが・・・アバウトに 「現在選択されているシート名をAAAに変更する」 といったことは可能なんでしょうか? 宜しくお願い致します。

  • VBAを使用した、シートの自動作成とシート名付与

    お世話になります。 VBA初心者です。 この度、1ファイル30~50名の生徒名簿(頭文字毎に計10ファイルあります)を元にして 既存のテンプレートを元に個人シートを作成することになりました。 シート名は対象個人がわかるよう、「生徒番号_個人名」にしたいのです。 自動的にテンプレートをコピーして個人シートを作成したいのですが どのように行えばよろしいでしょうか。 ファイル名:生徒名簿 シート名:名簿 A列…A4:タイトル「生徒番号」 A5より6ケタの生徒番号 E列…E4:タイトル「氏名」 E5より生徒氏名 テンプレートシート名:【テンプレート】生徒No._氏名  ※シート名が「生徒No._氏名」に変更されると、シート内の該当箇所にそれぞれの情報が入るように、   また生徒番号を元に付随する情報を参照関数で拾うようになっています。 お手数ですがお教え頂けると助かります。

  • エクセルのシート名を変更したのですが受け付けません。

    エクセルのシート名を変更したのですが、そのとき文字を確定する前に文字が反転し、.xls]という文字が前に自動的について、そのあと変えたい文字に変わりました。しかし、いざ確定しようとすると、よくある「シート名が正しくない」というエラーが表示されました。使用してはいけない文字や31文字以内など、そこには規定が書いてありますが、その規定に反しない名前にしてあります。何度か違う名称にかえてみたりしてチャレンジしたのですが、どれも名称として受け付けない状態です。 エクセル97を使っています。Win98です。 今エクセルを終了できないのでそのままの状態です。 名称に空白なども無いかどうか、デリートボタンを何度か押してみたりして、それから名称を入力してみてもダメです。 何が原因かわかりません。解決手段をご存知の方がおりましたら教えてください。 また、エクセルをこのまま終了しても良いのでしょうか?その場合は強制終了でパソコンを再起動したいのですが、リセットボタンを押しても大丈夫でしょうか? 普通にエクセルが終了できる解決策があればそれにこしたことはありません。 ちょっと不安です。どうかよろしくお願いいたします。

  • 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 --------------------------

  • シート名を変更してもVBAでエラーにならないように

    VBA初心者です。 VBAで複数のシートを選択するという動作を行う時、シート名を変更するとエラーになってしまうのですが、どうすれば回避できるのでしょうか?オブジェクト名?が使用できるらしいのですが、エラーになってうまく動作しません。指定の仕方を変える必要があるのでしょうか? 例えば、  Sheets(Array("第1週", "第2週", "第3週", "第4週", "第5週")).Select  Sheets("第1週").Activate と記述してあって、シート名の"第1週"を"9月1日"とかに変更したら、当然エラーになりますが、 左のプロジェクトエクスプローラにある、Sheet1(第1週)の名前の変わらないオブジェクト名"Sheet1"の方で指定したいと思うのですが、単純に名前を置き換えても動作しません。どのように指定すればよいのでしょうか?

  • エクセルのシート名をリスト化したい

    エクセルで一つのファイルを作成しました。 ファイル内には複数のシートが存在しています。 最後のページに印刷用のシートを作成させ、各シートからデータを抽出させて印刷できるようにしました。 方法としてはA1にシート名を入力して、各セルに=INDIRECT($A$1&"!L8")のようなリンクを張りました。 今度はA1に打ち込むシート名をリストで選べないかと思いましたが、方法はありますか? シートの数は30ほどあり、シート名は変更がでます。そのたびにリストを変更するのは手間なので、何かいい方法はありますか?よろしくお願いします。

  • Excel 複数 シートコピー 同時に名前も・・・

    Excelのシートコピーを複数つくるVBAを探しています。 Sheet1を10シートコピーする場合に方法はありますでしょうか? 本当は、それの名前もVBAで変更できればよいと考えているのですが、とりあえずシート名の変更は、以下のVBAでできました。 Sub シート名変更() Const OrgSh = "Sheet2" Dim Rw As Long Dim Cnt As Integer Sheets(OrgSh).Move Before:=Sheets(1) For Cnt = 2 To Sheets.Count Sheets(Cnt).Name = "Tentative" & Cnt Next For Cnt = 2 To Sheets.Count Sheets(Cnt).Name = Cells(Cnt, 1).Value Next End Sub なので、最初にシートをコピーして、名前を変更する、2段構えの覚悟はできています。 シートコピーのみでもよいので、だれか教えていただけませんか?

  • エクセルでシート名でソート

    エクセルのシートをシート名でソートしたいのですが、VBAで以下の様な条件で出来るのでしょうか。 ・シートは必ず5枚以上で、最大70枚です。 ・シート名は、半角英数字、漢字を使用しています。 ・ソートの順は、1文字の「0~9」→「A~Z」→「0_0~9_Z」→「A_1~Z_Z」の順になります。 ・シートの一番左端と右端3シートは並び替えしない(漢字名シート)。 例(ソートするシート) 0→4→5→F→0_1→0_9→4_1→5_4→5_5→F_5 「シートの並び替え」で検索してみましたら以下のサンプルが 有りましたので少し変更してみました。 ********************* Sub MoveSamp1() Dim i As Long Dim j As Long For i = 2 To Sheets.Count - 3 '---最初から最後の3つ前のシートまで For j = i + 1 To Sheets.Count '---i番め以降のシート全て If Sheets(i).Name > Sheets(j).Name Then '---シート名の比較 Sheets(j).Move Before:=Sheets(i) '---(1)シートの移動 End If Next j Next i End Sub ********************************************************** 結果 0→0_1→0_9→4→4_1→5→5_4→5_5→F→F_5 上手くいきませんでした。 他の方法として   ブック追加、シート名をセルに書き出し、セルとシート名比較、シート移動、ブック削除 なども試してみましたがダメでした。 シート名が数字ならば行くようですが。  エクセルは2003~2010で考えています。 すみませんが良いお知恵をお貸しくださいませんか。

  • エクセルマクロでファイル名やシート名変更できない

    エクセルは初心者なのでマクロを自動記録して作成しています。 少しづつ動作を小分けにして記録して、まとめてボタンで連続実行させるようにしました。 (1)作成途中で失敗したら最初からの作業になると思い、 ある程度進んだら何度かファイルのコピーを作成して進めていました。 ある程度完成した時点でファイル名が「○○○4~コピー~」の様な名前だったので、正式に名前を決めて変更したらマクロの実行が出来なくなりました。(元の名前に戻すと実行可能) (2)またシートも複数のシートに跨って参照するようなマクロです。 シート名を分かりやすい名前に変更したらこの場合もマクロ実行できなくなりました。 (3)コピーしたファイルもマクロ実行できないものがあります。 コピーしたファイルはマクロ実行できないのでしょうか? (4)ファイル作成途中で何かの変更が生じて列や行の挿入を行った場合、 特定のセルを参照して計算するマクロは実行できなくなるのでしょうか? その場合、簡単に修正する方法はありますか? 初心者にも分かるような回答をよろしくお願いいたします。

  • エクセルのシート名変更で重複した時のvbaの処理

    こんにちは。vba初心者です。 セルのA1を参照してシート名を変更するとき 名前が重複したら、A1に入力されている文字列の後に(2)とつけたいのですが、 その重複したときの処理ができません。 シート名を変更するところまではできました。 以下のvbaです。 Sub test() Dim aSheet As Worksheet For Each aSheet In Worksheets aSheet.Select aSheet.Name = Range("A1") On Error Resume Next Next aSheet End Sub これに付け加えるか全然違ってもかまいません。 何かよい方法を教えてください。 説明が不十分かもしれませんが、よろしくお願いします。

専門家に質問してみよう