• 締切済み

VBA(マクロ初心者)シート名の重複エラーの回避

マクロ初心者です。 test.xlsmというファイルにて マクロを編集し、  ActiveSheet.Name = "コーヒー当番表" で、シート名に名前を"コーヒー当番表"とつけています。 しかし、test_2.xlsというファイルでシート名に既に "コーヒー当番表"と名前がつけられていた場合、 test.xlsmとtest_2.xlsを開いた状態で、 test.xlsmのマクロを実行すると シート名の重複のせいか、実行エラーしてしまいます。 回避するためには、どのようなコードを記述したら良いでしょうか。 御助言ください。

みんなの回答

  • utun01
  • ベストアンサー率40% (110/270)
回答No.4

マクロの内容が分からないとなんとも言えない感じですが、 test_2.xlsのシートをtest.xlsmにコピーしているのではないでしょうか? もしこういった操作が途中に入っている様でしたら、 test_2.xls内でシートを別名で複製し、 複製した方をtest.xlsmに移動させるようにすれば解決するかもしれません。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2でおっしゃてるように、私も質問がおかしいと思います。 Aブック Bブック があって、何かの業務上の関連がある場合、 (1)Bブックでは、Aブックのシート名と同じシート名は使いたくない のか (2)Aブック(やBブック)の中では、同じシート名は避けたい。 同じシート名を指定すると、実行したときにエラーになり、VBAコードでエラーが出て止まるのだが、止めない手当てをして、別のシート名を指定して、実行を続けたい のが (3)その他 なのか、はっきりして、再(別)質問のこと。 読者が普通なら、どう考えるかとか、想像が必要だ。よくあるケースではないなら、よくあるケースではないことを注記して質問するものだ。 ーー エクセルのバージョンも注記のこと。2007以後形式と2003までの形式のファイルと混合している(両者を1つの実行VBAで扱っている)のか?

全文を見る
すると、全ての回答が全文表示されます。
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

回避策ではないですが、 ブックが違うとシート名重複にはならないと思います。 もっと違うところに原因があるのでは。

全文を見る
すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

エラーがでても処理を続けるにはエラーハンドリング という技法を使います。 On Error GoTo ラベル または On Error Resume Next という構文です。 サンプル On Error Resume Next ActiveSheet.Name = "コーヒー当番表" If Err.Number Then    MsgBox "既に表が存在します"    ThisWorkbook.Worksheets("コーヒー当番表").Select End If On Error GoTo 0 On Error GoTo 0 はエラーハンドリングを 終了させるステートメントです。 Errオブジェクトはエラーの内容を持つもので、 Numberプロパティはエラーコードです。 これが0なら正常、0以外はエラーです。 If Err.Number <> vbNormal Then としても OKです。(vbNormalは0) 古い習慣で0は偽、0以外は真なので、 サンプルのように「 <> 0 」を書かなくても 0以外ならThen節に制御が移ります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA アクティブなセルのシート名を取得したい

    エクセル2010使用です。 VBAで、アクティブなセルのあるシート名を取得する方法を教えてください。  マクロ.xls (マクロシートA1) ←今回のマクロを書き込んだファイル  参照.xls (参照シートA1)  入力.xls (入力シートF3) この3つのエクセルファイルを開きます。 ( )内はそれぞれの前面にあるシート名と選択されたセルです。 入力シートのF3にカーソルをおいて下記マクロを実行すると   MsgBox ActiveSheet.Name & ActiveCell.Address 「マクロシート F3」と返されます・・・ ほしい結果は「入力シート F3」なんです。 このような場合にアクティブセルのあるシート名を取得する方法があれば教えてください。 よろしくお願いいたします。

  • Excel マクロ アクティブシートの指定について

    こんにちは。Excelでマクロを作成しています。あるファイルを開きマクロを実行すると、日々エクスポートしているExcelファイルのシートが開き、自動的にそのシートにピボットテーブルを実行し集計するマクロを作成しています。ファイルの指定はファイル名が毎日日付のファイル名(例:02-12等)になるので、[ファイルを開く]ダイアログを表示させ、そこから指定することにしました。ただ、シート名もファイル名と同じなのですが、どうしてもそのシート名でしか作成できません。現在アクティブなシートにピボットを実行するようにするには、どうすればいいでしょうか。 下記に作成したVBを記載しておきます。 Fname = Application.GetOpenFilename(FileFilter:="Excel ファイル (*.xls), *.xls") ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'02-12'!R1C1:R91C23").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル3", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル3").AddFields RowFields:=Array("所属名", _ "受付担当者") ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("状況").Orientation = _ xlDataField ・・・ 上記の02-12の部分がシート名になるのですが、このシート名は毎日変化していきます(次の日は、02-13 など)。どのように作成すればいいでしょうか。 よろしくお願いします。

  • VBAでシートコピー後、シート名が重複している時の処理

    今日からVBAを勉強し始めました初心者です。会社である作業をしており、VBAでの作業がうまくいかなくて困っております。 「実績」というシートを11/5に作ったとします。 このシートを、11/9にマクロを実行した時に、   ・11/5のシートをコピーし複製を作る(この時点ではシート名は「実績(2)」)   ・この時、シート名は「11-05」となるように設定済み    (実績シートの「G1」セルから、日付を取得しファイル名とする) としています。 この時、まれに同じ日に間違ってマクロを動かす為、同じシート名となりエラーが出てしまいます。 利用者が不慣れなため、エラーの対処方法を教えることでは対処が難しい状態で、できればマクロで対応しようと思っています。 以下、シート名が重複しない場合のみ利用可能なデータです。 '前回作成した「実績」のコピー&リネーム Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("実績") mySheet.Copy after:=Worksheets("実績")   '実績sheetの後ろにコピー ActiveSheet.Name = Format(Range("G1").Value, "m-dd") ' シート名を変更する 他の質問を検索しましたが、コピーしたファイルをリネームし、 そのリネーム結果が重複している場合の記述方法がよくかわりませんでした。 重複している場合は、できればメッセージボックスで「yesno」の選択で上書きの選択ができればと思っています。 (VBAでは一度削除してから新規に作るようですが、上の重複のからみで、よくわからなくなっています) よろしくお願いします。

  • XCELのVBAマクロで次のことが実行できますか。

    XCELのVBAマクロで次のことが実行できますか。 (前提)WINDOWSで (1)MYDOCのフォルダAにExcelファイルA1.xlsからA9.xlsまで9個のファイルと、もう一つマクロBBの入ったExcelファイルB.xlsがあります。 (2)各Ai.xlsには、Aisheet(i=1カラ9)と名前のsheetが1つのみあります。 (処理したいこと) A1.xlsを開き、A1sheetを、B.xlsへcopyし、そのシートに対してマクロBBという処理を実行します。 続いて同様にA2.xlsを開き、A1sheetを、B.xlsへcopyし、そのシートに対してマクロBBという処理を実行します。 以下A9まで実行したい。 (質問)Bのマクロに新たにCCというマクロを作り、CCを実行することで、自動的に(処理したいこと)を実行してしまうようなものを作れますか。 また作るとしたらおおよそどんな風に作ればいいでしょうか。 ご回答よろしくお願いします。

  • Excel2007VBAシートコピーとマクロ保存

    ●質問の主旨 複数のシートのファイルにおいて最終シートだけをコピーし、 かつそのファイルの標準モジュールも含んだファイルを保存するには、 下記のコードをどのように書き換えたらいいでしょうか? ご存知のかたご教示願います。 ●コード Sub 保存() Dim flname As String flname = "D:\医療週報\VBA試作\" & Format(Date, "yyyy年mm月") & ".xlsx" ActiveSheet.Copy ActiveWorkbook.SaveAs flname ActiveWorkbook.Close End Sub ●質問の補足 1)マクロで「保存」を実行するときは手作業で必ず最終ページを開いています(アクティブにします)。 2)上記コードのうち".xlsx"では最終シートだけをコピーできますが、 マクロの保存ができません。また".xlsm"にするとエラーが出ます。 ".xls"にすると複数のシートが全てコピーされた上に、マクロの保存ができていません。 3)私はVBA初心者です。

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

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

  • エクセルマクロ ファイル名を変更したとき

    マクロ初心者です。 データファイルからシートを複写挿入するマクロです。 コピー先ファイル名を都度変更したいのですが、その場合マクロにコピー先ファイル名が入っているのでエラーになります。名前が変わっても実行できるようにするにはどうしたらよいのでしょう? なお、複写元のデータファイルは複写後に閉じます。 Workbooks.Open Filename:="データファイル.xls" Sheets("Sheet1").Copy Before:=Workbooks("コピー先ファイル名.xls").Sheets(1)

  • マクロ 現在アクティブになっているシート名・・・

    いつも回答して頂きありがとうございます。 こんなマクロでも通用するシート名を所得する記述を教えて下さい。 シートを数枚挿入した後に、マクロ実行画面のシートをアクティブにしたい。 この時のマクロ実行画面のシートをマクロの中で色々使おうと思うのですが、マクロ実行画面の名前が日にちになっており、コロコロ変わるので、どうすればよいのか分かりません。宜しくお願い致します。

  • Excel2000マクロ_大量のシート名を楽に変更するマクロ

    何方か、回答を宜しくお願いします。 deta.xls(多数のシートが有る)シート名変換.xls(マクロが書いてある) 上記の2つのファイルが有りますが、やりたいことはdeta.xlsがアクティブの 時にショートカットでマクロAを起動して、シート名変換.xlsの「シート名」と いうシートのA1から下方向にdeta.xlsのシート名を所得する。 そして、マクロ終了後所得したシート名を変えて。 deta.xlsがアクティブの時にマクロBを起動して、「シート名」のA1から下方向に deta.xlsのシート名を変更する。 宜しくお願いします。 下記参考 Sub マクロA() Dim i As Worksheet ThisWorkbook.Worksheets("「シート名」").Columns("A:A").ClearContents '書き込む前にA列のデータをクリア Dim WS As Worksheet For Each WS In Worksheets

  • シート単体の時のみマクロを有効に。

    メニュー画面となる「menu.xls」ファイルと、コードごとの管理の為の「コード.xls」ファイルがあります。 「menu.xls」はシート「メニュー」・「リスト」・「フォーマット」の構成で、この「フォーマット」シートにコードの名前をつけて保存したものが、「コード.xls」となっています。 「フォーマット」シートにはいくつかのVBAを施してあるんですが、これを 「menu.xls」として開くときには実行させず(無効化)、「コード.xls」として開くときには実行(有効化)させたいのです。 現在、「コード.xls」としてシート「フォーマット」を開いた時はマクロがWorkbook_Openで動作してくれて構わないのですが、「menu.xls」として開いた時もシート「フォーマット」のWorkbook_Openが動作してしまい、エラーが出てきてしまいます。 「フォーマット」シートに実行判定を付ければいいのでしょうか? どうしたらいいか全くわかりませんので、ご教授頂きたくお願い申し上げます。

このQ&Aのポイント
  • 新しいパソコンで筆まめVer.30をインストールした際、アップデートが失敗する問題が発生しました。起動時にエラーメッセージが表示されるため、正常に起動する方法を教えてください。
  • パソコンを入れ替えて筆まめVer.30をインストールしましたが、アップデート時にエラーが発生し、起動に失敗します。解決策を教えてください。
  • 筆まめVer.30を新しいパソコンにインストールした際に、アップデートができずに起動できない問題が発生しています。対処方法を教えてください。
回答を見る