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