• 締切済み

エクセルVBAを利用してワークシート名を変更するには

エクセルVBAを利用してワークシート名を変更するには Sub ~~() Worksheets("sheet1").Name = "新しい名前" End Sub と文献にはあるのですが ワークシート上の名前変更のための コマンドボタンをクリックしたら ある場所のセルの値が名前になるように設定したいのですが どのようにすればいいのでしょうか?? いちおうわからないなりに予想したのは Sub シートの名前変更() ActiveSheets.Name = Range("Z3").Value End Sub これでZ3の値を名前に設定できるのではと思ったのですが うまくいきませんでした

noname#64918
noname#64918

みんなの回答

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

選択しているシートにコマンドボタンが設置されていて オブジェクト名がデフォルトのCommandButton1の場合、 以下でどうですか? Private Sub CommandButton1_Click()  ActiveSheet.Name = Range("Z3").Value End Sub

noname#64918
質問者

お礼

>ka_na_deさん オブジェクト名とclickをきちんと設定し セルを入力してボタンをクリックしたところ うまく変更なったようです どうもありがとうございます

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

そんなにたやすくないのではないですか。 ーー 下記の要素が質問では明確に説明されていない。 意識されているのか疑問。下記(1)-(3)を固定した質問なら初頭解説書どおりで簡単だが。 (1)変更後の名前のあるシート これは1つ決まっている。 (2)変更後のシート名のあるセル。Sheet1にあることは決まっている。 (3)変更後のシートの選択 コマンドボタンは、全シートには無いので、(3)からは操作を始められない。 またイベント相互のつながりをつけるのは難しいものと思う。 パブリック変数で切り抜けたが私は満足してない。 ーー 準備・コード作成など Sheet1にコマンドボタンを1つ貼り付ける クリックイベントには Private Sub CommandButton1_Click() Set a = Application.InputBox("シート名のあるセル=", Type:=8) MsgBox "この後シート名を変更するシートのタブをクリックのこと" flg = "y" End Sub ーーー 変更後のシート名のセルを入力して置く。 ーー 標準モジュールに Public a Public flg ーー Thisworkbookのイベントで Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name <> "Sheet1" And flg = "y" Then Sh.Name = a flg = "n" End If End Sub ーーー 操作 Sheet1を選択 コマンドボタンをクリック 変更後シート名のあるセルをクリックーOK 変更したいシートのタブをクリック ソノシートの名前が変更された。 一連の処理終了。

noname#64918
質問者

お礼

>imogasiさん 教えていただいたコードは変数などまだそのレベルに達していませんが プリントアウトして勉強したいと思います どうもありがとうございました

noname#64918
質問者

補足

雛形のページにコマンドボタンはすべて配置していまして その中のワークシートのコピーボタンを押してワークシートを コピーしてから内容を入力しその内容のあるセル(Z3)から シートの名前変更ボタンをクリックして名前を変更したいと 算段しておりました

  • project-a
  • ベストアンサー率54% (107/195)
回答No.1

× ActiveSheets.Name ○ ActiveSheet.Name です。

noname#64918
質問者

お礼

project-aさん 回答いただきありがとうございます 複数形とかで間違うこともあるので注意して作りたいと思います そういえばカレンダーコントロールも calenderかcalendarなのかでうまくいかなかったこともありました・・

関連するQ&A

  • シートを増やすVBA

    フィルタで隠れている場合もある列の値を シート名として増やしていくVBAで以下のようなものをつくりました (値は重複している場合もある) 雛型シートがありそれをシート名だけ増やしていくというものです Sub シートを増やす() Dim target As Range Dim h As Range On Error Resume Next Set target = Worksheets("一覧シート").Range("E10:E" & Worksheets("一覧シート").Range("E65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible) If target Is Nothing Then Exit Sub 'シートを増やしていく For Each h In target On Error GoTo errhandle Worksheets(h.Value).Select On Error GoTo 0 Next Sheets("一覧シート").Select Exit Sub errhandle: Worksheets("雛型").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = h.Value Resume End Sub そうすると、実行エラー1004 ”シートの名前をほかのシート、Visual Basicで参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。” というエラーがたまにおきます(シート名が数字の場合におきるようです) 解決方法及び理由をご教授ください

  • EXCEL VBAにてのワークシート作成

    エクセルのVBAにてワークシートを作成することで困っています。 自分で書き込んだのは Private Sub CommandButton1_Click() Worksheets("原紙").Copy ActiveSheet.Name = TextBox1 Worksheets.Add After:=Worksheets(2) End Sub Private Sub UserForm_Initialize() TextBox1 = Format(Date, "yy.mm.dd") End Sub 実行したいことはCommandButton1クリック時に 左から2番目にあるワークシート 原紙を テキストボックス1に入力されている(日付) 名前を付けて左から3番目に新規で作成したいのですが 思うように動かずエラーが出てしまいます。 どの様に修正すれば宜しいでしょうか? またクリック時にすでにテキストボックス1と同じ 名前のワークシートが存在した場合はそのワークシートを Activeにしたいのですがどの様に書き込めば宜しいでしょうか? 重ね重ねですが宜しくお願いいたします。

  • セルをコピーしてシート名を取得 【VBA】

    こんばんわ。 エクセルのVBAについて、どうしてもわからなくなったので質問させて下さい。 マクロの内容は 1.一番前のシート(名前はSheet1ではありません。)のボタン35をクリック 2.シートをコピーして3番目に置く。 3.値にする。 4.シート名をセルの"DE16"に入っている値にする。 5.ボタンを消す。 以下の内容になりましたが、名前のところでデバックがおこります。 Sub ボタン35_Click() Worksheets(1).Select Worksheets(1).Copy After:=Sheets(3) Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Worksheets(3).Select Worksheets(3).Name = Range("DE16").Value ActiveSheet.Shapes("Button 11").Select Selection.Delete Application.CutCopyMode = False End Sub どなたかお知恵を貸して下さい。

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • vba ワークシートを変数を用いて開くには

    初歩的な質問ですが、 ワークシートの書式が新しくなったことで、書き換えをすることになりました。 現在のエクセルファイルから、新しいエクセルファイルへ、セルの値を参照しながら VBAにて作業をしたいのですが、 Sub changesheet() Dim iname As String Dim wbname As String iname = InputBox("ブック名を入力", "対象ブックを入力") wbname = "シート2012(" & iname & ").xls" ActiveSheet.Range("P4").Value = Workbooks(wbname).Worksheets("Sheet1").Range("P4").Value End Sub この記載で実行すると、インデックスが有効範囲にありません とエラーになってしまいます。 変数(inputbox)を用いたセルの参照はどのように記述すればよろしいでしょうか? よろしくお願いします。

  • エクセルのフォームのVBAについて

    VBAがまったくわからないのに参考書を見て高度な事に挑戦しています フォームは作れてフォームをクリックやら入力やらして作ったOKボタンを押すと シート2のA1B1C1‥の列に入力文字だけが羅列されます。 しかし次にやろうとするとA2B2C2‥と下に行かず又A1B1C1‥の列の文字が変更になり続きません。何がいけないのでしょうか? Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row .Range("A" & LastRow).Value = Worksheets("sheet1").Range("A5").Value .Range("B" & LastRow).Value = Worksheets("sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("A10").Value End With End Sub と参考書とおりいれたのですが‥。教えて下さい。

  • セルの値をシート名にするエクセルVBA

    件名のVBAを以下のように書きました B列の4からずっと下までのセルの値を次々とシート「ひな型」をコピーし増やしていくものです。 Sub テスト() ' ' Macro ' ' Dim target As Range Dim h As Range '見えてるセルを取得する。「全部隠れていた」場合も考える。 On Error Resume Next Set target = Worksheets("Sheet1").Range("B4:B" & Worksheets("Sheet1").Range("B65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible) If target Is Nothing Then Exit Sub 'シートを増やしていく For Each h In target On Error GoTo errhandle Worksheets(CStr(h.Value)).Select On Error GoTo 0 Next Sheets("Sheet1").Select Exit Sub errhandle: Worksheets("ひな型").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = h.Value Resume End Sub これだと、一応思った通りにはなるのですが B列のセルに複数同じ名前があった時に、既に作ったシートの名前がある場合 それは無視するという風に実行したいです お知恵をお貸しくださいませ

  • エクセルのシート名変更で重複した時の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 これに付け加えるか全然違ってもかまいません。 何かよい方法を教えてください。 説明が不十分かもしれませんが、よろしくお願いします。

  • Excel VBAシートの同一番地のセルのリスト化

    別々のシートの同一番地のセルの値をリスト化するのにこのようなVBAを見つけました。 シートは追加せず、既存のシートを指定したくて、色々と書き換えをチャレンジしましたがうまくいきません。 既存のシートを指定し、この作業を行うにはどうしたらよいのでしょうか? ご教示いただけますと幸甚です。 Sub Test1() Dim TmpSheet As Worksheet, i As Integer i = Worksheets.Count Set TmpSheet = Worksheets.Add(After:=Sheets(Sheets.Count)) With TmpSheet For i = 1 To i .Cells(i, 1).Value = Worksheets(i).Name .Cells(i, 2).Value = Worksheets(i).Range("E5").Value Next End With End Sub

  • ワークシート上のセルの値を変更したらVBAを実行させる。

    Excelでシートの任意の箇所(FORM)を変更したらVBAを走らせたいのですがやり方がわかりません。 シート上の任意の箇所に「FORM」という名前をつけました。 その中でセルの値を変更したらVBAを走らせるために、以下のテストを作成しました。 ですが、入力したセルの値は消えて、さらに無限ループのようにいくつも値をみて、メッセージボックスも複数表示されます。 実際は無限ループではないので、フリーズはせずかえってくるのですが。 どのように変更したらいいのでしょうか? Private Sub Worksheet_Change(ByVal TARGET As Range) TARGET = Range("FORM") MsgBox Range("条件1") End Sub

専門家に質問してみよう