• ベストアンサー

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/17068)
回答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

  • 古いエクセルのマクロについて

    エクセルのマクロについての質問です。 Excel2000を使用しています。 昔のロータス123のマクロのようにシートに命令が書いてあって、それをVBに書き直そうと思っているのですがどうやって書いたらよいのかわからなくて困っています。 中身ですが、sheet1に数値が入っており、参照するセルは a5,c9,c18,h20,h21 です。 次に、Macroというシートがあって、その中身が 行 A列 1 OK 2 vol=10 3 ERR=0.00001 4 =FOR("COUNTER",1,50) 5 =Sheet1!$C$9-Sheet1!$H$21 6 =IF(ABS(A5)<ERR) 7 =RETURN() 8 =END.IF() 9 vol=vol+A5/Sheet1!$C$18 10 =SELECT(Sheet1!$H$20) 11 =FORMULA(vol) 12 =NEXT() 13 =RETURN() です。 マクロ名は"OK"です。 初心者なのですが、ご親切な方、教えていただけると助かります。 よろしくお願いいたします。

  • EXCELのマクロとVBAの連続実行について

    EXCELを鋭意勉強中です。 それぞれ独立したマクロとVBAのコードがあるとして これらを組み合わせ自在に連続して実行することは可能でしょうか? マクロの連続実行は Call マクロ() で出来ることは判ったのですが ここにVBAが組み合わさると、どう記述してよいのかさっぱり判りません。 わかる方、よろしくご指導をお願い致します。

  • エクセルVBAの勉強を始めました。教えてください。

     VBAの勉強中なのですが、とにかくマクロで連続印刷をしたいのです。For~Nextステートメントを使いたいのですが、以下のマクロのTo以下の意味がわかりません。どうしてTo以下が数字になっていないのですか?初心者には全くわかりません(以下は連続印刷時のマクロの一部分です)  For 伝票カウンタ 1 to _ Application.WorksheetFunction.Count(Worksheets("売掛金合計票").Range("A4:A13)) Range("B2") = 伝票カウンタ 印刷 Next 伝票カウンタ    またApplication.WorksheetFunction.とは何者ですか?? よろしくお願い致します。

  • excel、マクロについて教えてください。

    excel、マクロについて教えてください。 excelのマクロでシートを追加してシート名を変更し棚卸しに変更する内容を記録したのですが、 excelをずっと使用していてシートを追加していくとsheet1、sheet2と語尾の数字が増えていってしまい、マクロが正常に動作しません。 excelのシートを追加した際に必ずsheet1で追加する方法、若しくはマクロを記録した時はsheet1の名前を変更だったがsheet2でもsheet3でも動作するようなコードは存在しますか? 最近マクロをやり始めた初心者なので、質問が下手かもしれませんがどなたかお分かりになりましたら 教えていただけませんか?よろしくお願いします。

  • エクセルのVBAマクロで隠れシートを表示させる方法について教えて下さい

    エクセルのVBAマクロで隠れシートを表示させる方法について教えて下さい。 エクセルで”書式→シート→表示しない”を実行するとエクセルのシートを非表示にすることが出来ます。 逆に”書式→シート→表示する”にすると隠れているシートが表示出来ます。 この非表示のシートを表示させるVBAマクロの記載を教えて下さい。 但し、”Sheets(シート名).Visible = True”の様にシート名を記載すれば非表示のシートが表示されるのは知っています。今回知りたいのは、シート名の分からない全ての非表示のシートを表示させるVBAマクロの記載方法を教えて下さい。

  • Excel エクセル マクロ VBA

    エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub

  • エクセルマクロで教えてください

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • エクセル2007マクロで画像を表示

    マクロは変数やfor~nextなどを今、猛勉強中です。 アクティブシートにJpeg画像を順番に表示させるマクロを組んで、それを表示させるためのボタンを置こうとしたのですが、一応ググリながらマクロを組んでみたのですが、実行させたところ、シートは真っ白です。 ちなみに自分が組んだプロシージャは下記のものです。 根本的に、画像を表示させる命令(プロパティ?)が間違っているとは思うのですが…。 Sub 自習() Dim i As Integer For i = 1 To 8 ActiveSheet.Select getfiles = "images" & i & ".jpg" Next i End Sub あと、画像ファイルはExcelブックと同じフォルダに8枚置いてあります。 どなたか、ご教授願います。

  • EXCELのシートのマクロ操作について

    EXCELについて質問がありまして、よろしくお願いします。 複数のシートがあるブックがあり、それを、それぞれシートごとに別のブックにしたいと思っています。 マクロやVBAなどを使って簡単に出来るものでしょうか? マクロ集などのサイトを探してみましたが、上手く見つけることができませんでした。 シート名をブック名として引き継いで保存できればベターだと思っております。それが出来なくてもブックとして起こせれば大丈夫です。 何かわかられましたらお教えいただけますと幸いです。 どうぞよろしくお願いします。

  • エクセルマクロ 教えてください

    エクセルの自動記録でマクロを取り組み始めたばかりの初心者です。 本部から毎月送られてくるエクセルファイルにこちらで別のワークブックに記録したマクロを使って加工しようとしていますが方法がわかりません。 他の人がこのファイルを間単に加工出来るようマクロを使って (マクロのコードの書き換え等の作業をしないで)行えるようにしようとしています。 ※送られれくるエクセルファイルは月毎にファイル名が違います(シート名は変わりません)。 下記は自動記録の内容ですがこれを適用させる方法であります。 宜しくお願いいたします。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/9/8 ユーザー名 : ******* ' ' ActiveWindow.TabRatio = 0.819 Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")).Select Sheets("Sheet1").Activate With ActiveWindow .DisplayHeadings = False .DisplayHorizontalScrollBar = False .DisplayVerticalScrollBar = False End With Sheets(Array("Sheet6", "Sheet7", "Sheet1", "Sheet2")).Select Sheets("Sheet1").Activate ActiveWindow.Zoom = 120 End Sub

専門家に質問してみよう