正直なところ、マクロにつきましては私も初心者ですので、内容がごちゃごちゃしている上、バグが
あるかも知れませんが―― ^^;
前回のと差し替えてください。
<変更内容>
1.ハイパーリンクの設定
2.同一データがある場合は警告
3.その他
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i
On Error Resume Next
If Target.Column <> 2 Then Exit Sub
If Target.Row = 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
For i = 1 To Sheets.Count
If Sheets(i).Name = Target.Value Then
MsgBox "同じ名前のデータがあります"
Target.ClearContents
Target.Select
Exit Sub
End If
Next
Application.ScreenUpdating = False
Sheets("Form").Copy After:=Sheets(WorksheetFunction. _
CountA(Range(Cells(1, 2), Cells(Target.Row, 2))))
ActiveSheet.Name = Target.Value
ActiveSheet.Range("B3") = Target.Value
Sheets(Target.Value).Range("C3").Select
ActiveSheet.Visible = True
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", _
SubAddress:="MGR!B1", TextToDisplay:="管理表へ"
Sheets("MGR").Activate
ActiveSheet.Hyperlinks.Add Anchor:=Target, Address:="", _
SubAddress:=Target.Value & "!B3", TextToDisplay:=Target.Value
Application.ScreenUpdating = True
End Sub
--------------------------------
シートを削除するルーティンは、別プログラムでバッチ処理することにしました。
Visual Basic Editor の [挿入]-[標準モジュール] に、以下をコピーします。
'
Sub DelSheet()
Dim i, j, Chk
Sheets("MGR").Select
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Columns("B:B").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
On Error Resume Next
For i = Sheets.Count To 3 Step -1
For j = 2 To Range("B65536").End(xlUp).Row
If Sheets(i).Name = Sheets("MGR").Cells(j, 2).Value Then
Chk = 1
Exit For
End If
Next
If Chk = 0 Then Sheets(i).Delete
Chk = 0
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
任意の時点で、[ツール]-[マクロ]-[マクロ] から DelSheet を選択して実行します。
お礼
おかげさまで、できました。 ありがとうございました。