• ベストアンサー

エクセルVBAでシート追加

merlionXXの回答

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> また、シートは一番最後に追加したいです。 これを忘れてました。 Sub test01() x = InputBox("シート名") If LenB(x) > 31 Then MsgBox "名前が長すぎます。" Exit Sub End If For Each st In Worksheets If st.Name = x Then MsgBox "すでに同名のシートがあります。" Exit Sub End If Next On Error GoTo line Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count)) ws.Name = x Set ws = Nothing Exit Sub line: MsgBox "名前に不適切な文字があります。" End Sub

noname#31512
質問者

お礼

ありがとうございます お手数をおかけ致しました。 出来ました!! 感謝です。 何から何まで本当にありがとうございました。

関連するQ&A

  • シート番号追加VBA

    watabe007さま 大変お世話になりました 前にシートのセルにページ番号を追加するVBAをこちらで教えて頂きまして、本当に有難うございます 前回に下記の内容を教えて頂き、大変有難く使わせていただいております Sub pageA()   Dim i As Long   For i = 1 To Worksheets.Count      If Worksheets(i).Name = "Sheet3" Then       Worksheets(i).Range("G2") = "'" & i & "/" & Worksheets.Count     ElseIf Worksheets(i).Name = "Sheet4" Then       Worksheets(i).Range("G3") = "'" & i & "/" & Worksheets.Count     Else       Worksheets(i).Range("G1") = "'" & i & "/" & Worksheets.Count     End If   Next End Sub それで、今回はどのシート名にも属さないシートはページカウントとしてカウントしない、という方法がありましたらお教え頂きたいのですが、方法はありますでしょうか? お忙しいかと思いますが、アドバイス頂けますますと嬉しいです

  • エクセルVBAでSheet1.ActivateとSheet(n).Activate

    エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。

  • Excel VBAである特定文字列を含むシート名例えば「りんご(1)」

    Excel VBAである特定文字列を含むシート名例えば「りんご(1)」「みかん(1)」「みかん(2)」「いちご(1)」のシート名があるファイルに対して「みかん*」で検索を行い、一致したシート(複数Sheet)=「みかん(1)」「みかん(2)」に対して処理を行う方法はありますでしょうか。 宜しくお願いいたします。 完全一致するファイルは下記のようなのですが、Scheck = 0の部分が理解でいません。 型は何にすればよいのでしょうか。 Sub Sheet_Add5() Scheck = 0 For Each sheet_name In Worksheets If sheet_name.Name = ("検索シート名") Then Scheck = 1 Exit For End If Next If Scheck = 0 Then Sheets.Add.Name = "検索シート名" End If End Sub

  • VBAで初歩的な質問ですシートのコピーについて

    Sub SheetCopy() For i=1 to 31 WorkSheets.Add.Move after:=WorkSheets(workSheets.Count) シート名=i ActiveSheet.Name=シート名 Next End Sub と、シートをコピーするプロシージャを作りました。本当は、シート名を7月1日から、7月31日の31枚を作りたいのですが、どのように書けばよいのでしょうか? よろしくお願いします。

  • excel  vba  シートの取り扱い

    Sub   aaa() Worksheets.Add ActiveSheet.Name = "Namefile" ((質問)ここへ適当なコードを追加することによって 以下のThisWorkbook.Sheets(1)というのを、上で追加した Namefileシートを処理することとしたい。 つまり  Namefileシート=ThisWorkbook.Sheets(1) どうすればいいか。よろしくお願いします。) ThisWorkbook.Sheets(1).UsedRange ThisWorkbook.Sheets(1).UsedRange.Delete ThisWorkbook.Sheets(1).Range("B2") = "ファイル名" ThisWorkbook.Sheets(1).Range("C2") = "最終更新日" End Sub

  • vba エクセルシートの追加、名前の変更について

    エクセルvbaについて教えてください 新しいシートを一番右に作成し、その新規作成したシートの名前を変えたいです Sub Sample() Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = "結果1" End Sub と作成しました マクロを実行したら、「結果1」という名のシートが一番右に作成されます その後、実行をしたら「結果2」、さらに実行したら「結果3」といった感じにどんどん「結果+数字」のシートを作成したのですが、今のままでは「結果1」というシートしか作成されません 「結果2」、「結果3」、・・・・エンドレスに作成するようにするにはどうしたらよいのでしょうか ―――――――――――――――――――――――――――――――――――― なぜこのようなことをしているかといいますと、AdvancedFilterでxlFilterCopyを利用し、抽出した結果を新しいシートに作成するようにするのが最終目標です それで、まずAdvancedFilterでデータを反映させる新しいシートを作成することに取り組んでいるところです もし分かる方がいましたら、AdvancedFilterでxlFilterCopyする際、上で説明しました新しいシートが作成できた場合、CopyToRangeをどのように記載すればいいのか分かればそれも教えていただけると助かります よろしくお願いします

  • VBA シート名重複した場合削除する

    教えてください。 VBAに関しての質問です。 全くの知識がないので教えていただきたいです。 エクセルワークシートに以下の機能を追加している状態です。 For Each ws In Worksheets If ws.Name = "データ" Then wsChkflg = True End If Next If wsChkflg = True Then ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" Else ThisWorkbook.Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "データ" End If Set wsNew = ThisWorkbook.Worksheets("データ") 「データ」というシートが作成、追加されるのですが、同じシート名で新規作成した時に エラーが出てしまいます。そのエラーを出さないようにすため、ダイアログ等も出さずに既存のシートを強制的に削除する機能を追加したいのです。 VBAの知識がなくて困っています。 何か良い方法がわかる方いらっしゃいましたらお力を貸してください。 よろしくお願いいたします。

  • エクセルVBA シート名の部分一致検索について エクセル2007

    VBAでエクセルの全シート名を部分一致で検索したいと考えています。 そこで以下のコードを書いたのですが、 インプットボックスにどんな文字列を入力しても全てのシート名を 取得してしまって途方にくれています。 どなたかお助けください。 Sub test01() Dim name As String Dim ws As Worksheet shn = InputBox("検索文字列を入力") For Each ws In ThisWorkbook.Worksheets If ws.Name Like " * " & name & " * " Then ws.Activate MsgBox ws.Name End If Next ws 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

  • 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にしたいのですがどの様に書き込めば宜しいでしょうか? 重ね重ねですが宜しくお願いいたします。