2016-12-05 7 views
0

私はワークシートを作成するためのマクロを作成しようとしています。 コードは次のようにする必要があります。Excel:重複のないワークシートを作成するVBA

1)「テンプレート」ワークシートのテンプレートを使用して、マスターシートからColumnBのワークシートを作成します。

2)マスターシートのColumnBの範囲は可変ですが、これはexcel-vbaの最初の試行で、可変範囲の設定方法はわかりません。

3)ColumnB

内の各セルに名前どおり

3.1を各ワークシートの名前を変更します)ColumnBは、重複したエントリを持っているが、我々は、重複するセルのための唯一の1のワークシートを作成する必要があります。 (重複を削除することはできません)

4)ワークシートをマスターシートの列Bのセルにハイパーリンクします。

私は上記3.1の問題に直面しています。以下は私が有用であると感じた最も近いものです:私はそれを自分の要求に合わせることができますか?

Sub CreateAndNameWorksheets() 
    Dim c As Range 

    Application.ScreenUpdating = False 
     For Each c In Sheets("Master").Range("B5:B25000") 
     Sheets("Template").Copy After:=Sheets(Sheets.Count) 
     With c 
      ActiveSheet.Name = .Value 
      .Parent.Hyperlinks.Add Anchor:=c, Address:="", SubAddress:= _ 
       "'" & .Text & "'!A1", TextToDisplay:=.Text 
     End With 
    Next c 
    Application.ScreenUpdating = True 

End Sub 

ありがとう!

+1

[SheetExists]をテストするために文字列として列BからCell.Valuesを使用することができます(http ://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists)この答えの関数が役立ちます。最初にシートがすでにあるかどうかをテストし、そうであれば次のセルに移動します。 –

+0

ああ、そうですね。 –

答えて

0

ソリューション説明:Duplicate_Templateが役立ちます
サブ:
SheetExistsは真の解決策は、その
ソリューションよりも複雑になり、問題が述べられて解決するためにきちんとした近似値ですがあなたはそうする。そして、同じ操作(私はこれを "ミラー関数"と呼ぶ)をする必要があるときはいつでも呼び出す方が簡単です。

Sub Duplicate_Template(TemplateToDuplicate As String, NameNewSheet As String) 
    If SheetExists(NameNewSheet) = False Then 
    Sheets(TemplateToDuplicate).Copy After:=Sheets(Sheets.Count) 
    ActiveSheet.Name = NameNewSheet 
    End If 
End Sub 
Function SheetExists(shtName As String, Optional wb As Workbook) As Boolean 
    Dim sht As Worksheet 
    If wb Is Nothing Then Set wb = ThisWorkbook 
    On Error Resume Next 
    Set sht = wb.Sheets(shtName) 
    On Error GoTo 0 
    SheetExists = Not sht Is Nothing 
End Function 
+0

ありがとうございました!私はいつかそれを理解するためにこれを研究しなければならないでしょう。私はプログラミングに全く新しいので、これが私の最初の仕事です。ご協力ありがとうございました! –

0

非重複シートを作成するための機能の一般的なセット:

あなたは

Sub Test() 
    Call CreateNonDupeWS("Test1") 
    Call CreateNonDupeWS("Test2", "Test1") 
    Call CreateNonDupeWS("Test3", "Test1") 
    Call CreateNonDupeWS("Test1") 
End Sub 

Private Function CreateNonDupeWS(wsNew As String, Optional wsAfter As String) As Boolean 
On Error GoTo ExitSub 
    If IsMissing(wsAfter) Then wsAfter = Sheets(Sheets.Count).Name 
    If Not WorkSheetExists(wsNew) Then Worksheets.Add().Name = wsNew 
    If WorkSheetExists(wsAfter) Then Worksheets(wsNew).Move After:=Worksheets(wsAfter) 
    CreateNonDupeWS = True 
ExitSub: 
End Function 

Function WorkSheetExists(ByVal sName As String) As Boolean 
    On Error Resume Next 
    WorkSheetExists = Not ActiveWorkbook.Worksheets(sName) Is Nothing 
End Function 
+0

ありがとう!私はまだたくさんのことを理解していないし、私のために学ぶためのいくつかの新しいコマンドがあります。私はそれを勉強し、うまく働くようにします! :) –

関連する問題