• ベストアンサー

Excelで書類を管理するマクロを組んでいます

Excelで書類を管理するマクロを組んでいます 書類を作る度にシートを増やしていく方式です sheet.count命令を使用して、For~nextで不要なシートを削除するような仕組みを作っていましたが 手で途中のシートを消した場合などにシート名を間違えて消してしまうトラブルに見舞われています コード名を連続にするとこのトラブルは起きません そこでコード名をVBAで変更する方法が知りたいのですが、検索方法が悪いのか見つかりません どなたか教えていただけないでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

既に回答が出ていますが、 >コード名をVBAで変更する方法が知りたいのですが、 出来ないとは言わないけれども、一旦、外部プログラムから、ワークブックのシートにアクセスして、CodeName(オブジェクト名)を変更するわけで、マクロ稼働中はCodeName(オブジェクト名)は変更は出来ません。 >手で途中のシートを消した場合などにシート名を間違えて消してしまうトラブルに見舞われています 具体的にどういうことでしょうか?本来は、マクロのコードを見せていただいたほうがよいです。トラブルになることと、CodeName を変更することに、特に因果関係も見出されないのです。CodeName は、VBAプログラミングでも、あまり目にすることのないプロパティのひとつなのです。 ご質問の断片から、Worksheets.Count で、Index を取って削除するなど、コードを書かなくても、ミスにつながっているはずだというのは、容易想像できます。 >コード名を連続にするとこのトラブルは起きません もしかしたら、「コード名」そのものが分かっていらっしゃらないような気がします。ご質問者さんは、CodeNameでシートを指定する処理の仕方を御存知ですか?分かっていたら、そのような質問は出るようには思えません。また、CodeName で処理するというのは、非常に特殊なマクロのひとつです。少なくとも、私が掲示板で回答している限りにおいて、そのようなコードを書いた方は一人もいませんし、私自身も公開したことは一度ぐらいしかありません。後で書くように、私のコードに中傷した人がいた時に、書いたことがあるくらいです。 コード名というのは、 VBEditor のプロジェクトウィンドウの オプジェクト名, シート名 Sheet1(Sheet1) Sheet2(Sheet2) Sheet3(Sheet3) ThisWorkbook とあって、最初にあるのが、CodeName または、オブジェクト名、カッコの中が、シート名(.Nameプロパティ)です。 今回の場合は、おそらく、実際には、マクロコードで、初歩的なミスが含まれている可能性があります。ミスは指摘されたくないという気持ちがあるのでしたら、このような掲示板を利用せずに、自分なりにVBAを勉強して極めてください。掲示板などに聞かなくても、何度も考えて調べれば分かりますから。 結論からすると、#2さんが書いた方法で十分なはずです。 ただし、大文字・小文字や全角・半角の問題が時々含まれていますから、TextCompareモードで(StrComp関数やLike演算子を利用)したほうが良い時もありますが、通常は不要です。どちらかというと、日付をシート名として手入力した時に、問題が発生することが多いようです。 私は、以前、同様な回答を書いた時に、一度、心ない人から中傷を受けたことがありますが、ユーザーが任意でシート名を替えられるから、シート名チェックのコードは意味がないと言われました。 その場合は、マニュアルでシート名の変更やシートの削除に対して、ブックの[保護]の中の[シート構成]がありますので、削除されたくないものは、それで保護します。マクロの場合は、プロテクトを変更することは可能です。ここまで来ても引き下がらない人がいました。その時に初めて、オブジェクト名(CodeName)の処理方法が可能になります。ただ、よほどのことがない限りは、そのようなコードは不要です。それに、CodeName は、オブジェクト名であって、オブジェクト・コレクションの中では融通性がありませんので、本来、それをもう一度、シート名やIndexに戻さなくてはならないという二重の操作が必要だったように記憶しています。

masakanosan
質問者

お礼

御指摘の通り、おそらく初歩的な間違いを犯していると思います ルーチンを載せたいのですが、会社のパソコンからは暗号化処理のためデーターが持ち出せず、会社からはこの掲示板に投稿できないため難しいです。 もう一度処理を考え直してみます。 ありがとうございました

その他の回答 (4)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

参考に。 消すときに単純にシートm番目からnシート分ということでしたら、途中のぬけた分後ろにズレるわけでやり方に一工夫がいるかと思われます。 連番順以外には シート並べ替える。 シート名にルールを設ける。 シート名を列挙させてから削除の確認。 等はどうでしょうか。 使えますか。 コード名とはオブジェクト名ですか?。

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

突然「コード名」と言うのが出てくるが、シート名か? 大切な個所なので、至急結果が聞きたい。後に続いてこの質問を見る人のためにも。 VBAのコードを適切に改善すると言う意味か。 Googleで「コード名」で照会してもそれらしい記事は出ない(開発コード名は別だが) 削除するシート名を確認すると言うことか。それも現状注意メッセージがでているし。 シート名ならブックのシート名による検索は1発ではできない。For NexTで探していかざるをえない。 >コード名を連続にするとこのトラブルは起きません なぜそうなのか判らない。説明を添えるべき。 >コード名をVBAで変更する方法 これとそれまでの質問の記述が結びつかない。 検索の方法でなくて、あるシートを特定する方法(=VBAのコード)はどんな方式があるか勉強しましたか。 セルーシートーブックと2番目にVBAで大切なオブジェクトなのに。 (1)名前で (2)インデックス番号 (3)Activesheet (4)Next,Previous (5)Sheet1のようなシート名 など。 この質問ではどれが相応しいのかな。 http://www.big.or.jp/~seto/vbaref/vbaref6.htm Worksheets("Sheet1").Name = "月次集計" のように左辺のシートの特定とNameプロパティと右辺の変更後の新シート名記述で変更できる。これ常識。 外の話題でシートが削除された機会(beforeで)を捉えるイベントは無いと思うが。 参考 http://soudan1.biglobe.ne.jp/qa5007983.html

回答No.2

WorksheetオブジェクトのCodeNameプロパティにコード名が入っていますが、マクロ実行中はこの値を変更できません。 また既に運用でお分かりのように、コード名とシート名は一致するとは限らず、コード名・シート名の数字部分とWorksheetsのインデックス番号も一致するとは限りません。 したがって削除したいシートの指定・参照の仕方を今とは違う方法に変えることになると思います。 VBAコードが記載されていませんので憶測になりますが、コード名を使うよりは  Worksheets("シート名")~ とか  For each ws in Worksheets   If ws.Name = "シート名" Then ~  Next のようにシート名で操作するのが無難かと思います。

masakanosan
質問者

お礼

分かりやすい解説ありがとうございました マクロ実行中にはいじれないとなると、それをいじらなくてはいけない私のマクロの組み方に問題がありそうです。 もう一度考え直してみます ありがとうございました

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

コード名? シート名なら、Worksheets(1).Name が1番目のシートのシート名なので、それを変えることでシート名を変更することができます。 > 検索方法が悪いのか見つかりません 何のキーワードで検索しましたか? vba シート名 変更 で検索すると、たくさんヒットしますよ。

関連するQ&A