• ベストアンサー

VBAワーク シート名前を付けて作成

エクセルVBAにて 原紙とゆう名前のワークシートをコピー処理して 入力フォームにテキストボックス1と2があり コピーした原紙とゆうワークシート名から テキストボックス1と2に入力した項目が 合わさってワークシート名に変更する方法はあるのでしょうか? 例)テキストボックス1に 123   テキストボックス2に 456 コマンドボタン1をクリックすることによって ワークシート名が123456となるようにしたいのですが? 宜しくお願いいたします。

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

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

こんにちは。 #2の回答者です。気に入るかどうか分かりませんが、 ひとつのアイデアなのです、単に、シート名に入れられない文字列ではじくよりも、今のコードのままで、その「/」を抜くという方法がありますね。 特に、日付という前提ではないのですが、11/09 などの日付の、「/」を取り去るシートエラーチェックはいかがでしょうか?ただし、今回は、「/(半角)」も「/(全角)」も同じに扱いますから、これらの文字がある限りは、取り去ってしまいます。 以下のコードを、そのまま置き換えてくださるか、 ByRef ShName As String の ByRef (参照渡し)を入れ、 For Each ~ Next v の間を入れ替えてくだされば可能です。 --------------------------------------------------------------- Private Function ShNameCheck(ByRef ShName As String) As Boolean 'シート名のエラーチェック   Dim v As Variant   Dim i As Integer   Dim sh As Object   If Len(ShName) > 30 Then ShNameCheck = False: Exit Function   buf = ShName   For Each v In Array(":", "\", "/", "?", "*", "(", ")", " ")     buf = Replace(buf, v, "", , , vbTextCompare) '変更点   Next v   ShName = buf   For Each sh In ActiveWorkbook.Sheets     If StrComp(sh.Name, ShName, vbTextCompare) = 0 Then ShNameCheck = False: Exit Function    Next sh   ShNameCheck = True End Function ---------------------------------------------------------------

77TAKETAKA
質問者

お礼

お手数をかけてすみません。 本当にありがとうございます。 思っていたとうりに動きます。 まだまだ、勉強不足で知らないことばかりですが 上記のわからない場所の意味を理解しておきます。

その他の回答 (2)

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

こんばんは。 エラーフリーになるように、作ってみましたが、他にも問題が出るかもしれません。 --------------------------------- UserForm1 TextBox1, TextBox2 CommandButton1 --------------------------------- 'ユーザーフォーム・モジュール Private Sub CommandButton1_Click()   Dim ShName As String   If TextBox1.Text <> "" Then '少なくとも片方のテキストボックスに入力     ShName = TextBox1.Text & TextBox2.Text     If ShNameCheck(ShName) Then       With ActiveWorkbook         .Worksheets("原紙").Copy After:=.Worksheets(Worksheets.Count)         ActiveSheet.Name = ShName       End With     Else       MsgBox "その名前はふさわしくありません: " & ShName, 48       TextBox1.Text = "": TextBox2.Text = ""     End If   End If End Sub Private Function ShNameCheck(ShName As String) As Boolean 'シート名のエラーチェック   Dim v As Variant   Dim i As Integer   Dim sh As Object   If Len(ShName) > 30 Then ShNameCheck = False: Exit Function   For Each v In Array(":", "\", "/", "?", "*", "(", ")", " ")     i = InStr(1, ShName, v, vbBinaryCompare)     If i > 0 Then ShNameCheck = False: Exit Function   Next v   For Each sh In ActiveWorkbook.Sheets     If StrComp(sh.Name, ShName, vbTextCompare) = 0 Then ShNameCheck = False: Exit Function    Next sh   ShNameCheck = True End Function

77TAKETAKA
質問者

補足

ありがとうございます。 エラーチェックまで考えていただき感謝です。 誠にすみません、もうひとつお願いがあります。 テキストボックス1に 11/09 などの日付を 入れる場合があるのですが、この場合 テキストボックス2に 1 を入れた場合 ワークシート名は 11091 にしたいのですが 出来ますでしょうか? すみません。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

シートをコピーし、シート名を変更する作業をマクロの自動記録 してみてください。 生成されたコードを若干改造すればお望みの形になると思います。