[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルの名前をシート名に。なければ自動追加』(すすめ)
こんにちわ。
下記のシートがあります。
A B C D E 1 KARUTE 2 3 取引先 4 りんご 5 パイン 6 バナナ 7 かぼちゃ 8 きゅうり 9 レタス ・・・
とあったとします。このA列の4行目からの名前にシート名を自動的に書き換えたいのですがマクロでできますか??
シート1をりんご、シート2をパイン・・・・と50個程あるのですが、
シートも自動生成されて、なおかつ自動リンクも割り当てられると嬉しいです。
ご教授下さい。
EXCEL 2007 
os   WINDOWS XP
リストのシートが一番頭(一番左)にあるとして
 Sub sample()
 Dim Scount As Integer, las As Integer
 las = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
 For i = 4 To las
    Scount = ThisWorkbook.Worksheets.Count
    Worksheets.Add after:=Sheets(Scount)
    Sheets(Scount + 1).Name = Sheets(1).Range("A" & i).Value
 Next
 End Sub
 とこんな感じではどうでしょう?
>自動リンクも割り当てられると・・・ の意味がわからずすいません。
 ごめんなさい。
 同じシート名が無ければ・・・と言う部分を忘れていました。
 Sub sample()
 Dim Scount As Integer, las As Integer, flag As Boolean
 Dim ws As Worksheet
 las = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
 For i = 4 To las
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = Sheets(1).Range("A" & i).Value Then
           flag = True
        End If
    Next
    If flag = False Then
       Scount = ThisWorkbook.Worksheets.Count
       Worksheets.Add after:=Sheets(Scount)
       Sheets(Scount + 1).Name = Sheets(1).Range("A" & i).Value
    End If
 Next
 End Sub
(すすめ)
 ごめんなさい。
 テストしないで書いたら思いっきりバグった。
 自分も素人なんで、こんなんでごめんなさい。
 Sub sample()
 Dim Scount As Integer, las As Integer, n As Integer
 Dim ws As Worksheet
 las = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
 For i = 4 To las
    n = 0
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = Sheets(1).Range("A" & i).Value Then
           n = n + 1
        End If
    Next
    If n = 0 Then
       Scount = ThisWorkbook.Worksheets.Count
       Worksheets.Add after:=Sheets(Scount)
       Sheets(Scount + 1).Name = Sheets(1).Range("A" & i).Value
    End If
 Next
 End Sub
 >セルの名前をクリックすれば、そのシートが選択されるというものです。 
 A列のリストにハイパーリンクを設定するということですね?
名無しさん(敬称付ける必要はないかな)のをもとにして。
  Sub sample()
    Dim Scount      As Integer
    Dim las         As Integer
    Dim Loop_CNT    As Integer
    Dim Add_Sheet   As Integer
    las = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
    Scount = ThisWorkbook.Worksheets.Count
    Add_Sheet = las - 3 - Scount + 1
    If Add_Sheet > 0 Then
        Worksheets.Add after:=Sheets(Scount), Count:=Add_Sheet
    End If
    With Sheets(1)
        For Loop_CNT = 4 To las
            Sheets(Loop_CNT - 2).Name = .Range("A" & Loop_CNT).Value
            .Hyperlinks.Add anchor:=.Range("A" & Loop_CNT), Address:="", SubAddress:="'" & .Range("A" & Loop_CNT).Value & "'!A1"
        Next
    End With
 End Sub
 (春日野馨)
(すすめ)
一応念のため。
シート名、ブック名につけられない文字 http://support.microsoft.com/kb/401030/ja
(シスボーベー)
もう解決ということで目に留まらないとは思うけど。
指定文字列のシートがあるかどうかについては、1つの方法がが春日野馨さんのレスのような シート名をループでなめる方法。そのほかに以下も。 (別途、シート名に使用可能な文字についてはシスボーベーさんの紹介URL等で把握しておいて)
 Sub シート有無()
    '指定シートのA1オブジェクトの有無を調べる
    '出典 k窓 http://homepage2.nifty.com/kmado/ke_m8.htm   (E00M079)
    If IsObject(Evaluate("目的のシート名!A1")) Then
        MsgBox "シートがあります"
    Else
        MsgBox "シートはありません"
    End If
    'エラー発生をチェック。個人的には感心しないと思っている方法
    Dim sh As Worksheet
    On Error Resume Next
    Set sh = Sheets("目的のシート名")
    On Error GoTo 0
    If Not sh Is Nothing Then
        MsgBox "シートがあります"
    Else
        MsgBox "シートはありません"
    End If
    Set sh = Nothing
End Sub
(ぶらっと)
 ええと、
 Sheets(Loop_CNT - 2).Name = .Range("A" & Loop_CNT).Value
 はシート名とセルの値を比較してるんじゃなくてシート名をセルの値にしてるんだけども。
(春日野馨)
>ええと、・・・・シート名をセルの値にしてるんだけども。
すんませ〜ん! シート有無のチェックのためにシート名をなめていたのは【名無し】さんでしたね。
(ぶらっと)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.