[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルの名前をシート名に。なければ自動追加』(すすめ)
こんにちわ。
下記のシートがあります。
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.