[[20040930180016]] 『セルの内容をシートタグに反映させるには』(bun565)  >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの内容をシートタグに反映させるには』(bun565)

[シート内セルの内容をシートタグに反映させるには]

すみません。何方か教えてください。
以前シートタグの内容をシート内セルに反映させる方法を教えていただきましたが)シート内セルの内容をシートタグに反映させる方法を教えてください。


 一般的に言ってセルの中身を変更するとシート名が変わるというのは、
 どうも納得できないですね。

 (kazu)


 なにもしてないから駄目な時もあるよ。
シートの見出しを右くりっく
コードを表示させてそこに貼り付けます。
v(=∩_∩=)v
(SoulMan)
Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Name = Target.Value
End Sub


 SoulManさんのコードをほんの少し改良

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Target.Row = 1 Then
        Me.Name = Target.Value
    End If
 End Sub

 A1セルに入力したものがシート名になります。但し、クリアしたり/を使ったりするとエラーに。(純丸)


 シート名がすでに存在したらエラーとかしないと
 危なくって、使えないっす。
 (kazu)


 おっしゃる通りですね。エラー処理がたくさん必要そう。結局、シートのデータからシート名を
 変化させるのは実用的ではないのかも。(純丸)


 >エラー処理がたくさん
 on error resume next 
 だけで対応できると思います。

  (INA)


 > on error resume ... だけで対応できると思います。
 このエラーはこうですときちんとユーザーに示さないと、
 次は[エクセル質問ボード]で

 「変わるはずのシート名がかわらないんです」

 とか聞かれるかも知れないですね。
 (kazu)


 ちょっと軽率にコードを書いてしまったので↓でどうでしょう?
でも、あまり賛成はできませんがぁ、、(^^;; ヒヤアセ
v(=∩_∩=)v
(SoulMan)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
    On Error GoTo ErrorHandler:
        Me.Name = Target.Value
    Exit Sub
ErrorHandler:
        MsgBox "予測出来ないエラーが発生しました。" & Chr(13) & Chr(13) & _
        "Error Number=" & Err.Number & Chr(13) & _
        "Error Message=" & Err.Description, vbCritical
End Sub


皆様大変有難うございました。
以下か最後のSoulMan様のものを使用させて頂きます。
 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 And Target.Row = 1 Then
        Me.Name = Target.Value
    on error resume next 
    End If
 End Sub
(bun565)


 ↑
 この書き方では、on error resume next の意味がありませんよ。

  (INA)


 はい、衝突しました。INAさんと同じ指摘ですが…

 シート名変更の是非云々はともかく…
 >    on error resume next 
は、
 >        Me.Name = Target.Value
よりも前に記述しないと、これではエラー発生時に普通にとまってしまいます。
「エラーが発生したらこういう風に動きなさい」という命令を「エラー発生後」に指示しても、時すでに遅しって事です。
エラーが発生した時にマクロの実行をとめたいなら、
元々 On Error Resume Next を記述すべきではありません。
VBAのエラーメッセージ見れば原因も解るっちゃ解るし。少々乱暴だけど。
Resume NextするくらいならSoulManさんの示したコードの方がまだ良いとは思う。
(ご近所PG)


 > このエラーはこうですときちんとユーザーに示さないと、
 >次は[エクセル質問ボード]で
 >「変わるはずのシート名がかわらないんです」
 >とか聞かれるかも知れないですね。

 行数の短いコードのときは GoTo も便利ですが、  
 行数の長いコードのときは、可読性や処理の分岐を考慮すると
 Resume Next を用いて、エラーナンバーを判定するのが良いかと思います。

 自分でちょっと使うだけなら大げさですが・・

  Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) <> "A1" Then Exit Sub
    If Range("A1").Value = "" Then Exit Sub

    On Error Resume Next
    Me.Name = Range("A1").Value

    If Err.Number <> 0 Then '=1004
        Err.Clear

        Application.EnableEvents = False
            Range("A1").ClearContents
        Application.EnableEvents = True

        MsgBox "シート名が不正です。", vbExclamation, "エラー"
    End If

    On Error GoTo 0
    Range("A1").Activate
 End Sub

   (INA)


 INAさんの上↑のコードで私の心配の半分は解決していますが。
 [bun565]さんがなぜ シート名を変えたい と考えるのか知りたいですネ。
 (kazu)


 〜個人的にはこんな場面〜
 
月報等を1シート単位で管理している。
とあるセルにはタイトルとして「2004年10月」と言った値を入れている。
シート名も同様だ。
月が変わった場合はシートコピーして新しい月のシートとしている。
「タイトルセルとシート名の両方を変更するのめんどいなぁ…
 シート名がそのセルの値と同じに勝手に連動して変わると便利カモ」
 
なんて。
「シート名が変わった時イベント」があればそっちのが適してそうだけど。
 
 >[bun565]さんがなぜ シート名を変えたい と考えるのか知りたいですネ。
確かにちょっと興味ありますネ。
(ご近所PG)


取り急ぎ、自分だけで使い、よければ課内に使ってもらおうと思っています。
シート名を変えたい理由ですが・・
あるフォーマットのシートを複製していき、フォーマット内の製品名と日付をシートタグに反映したいためです。
(bun565)


 シート複製マクロを作った方が良かったのか・・・(--;)

  (INA)


 セルフ突っ込み
 >「タイトルセルとシート名の両方を変更するのめんどいなぁ…
 > シート名がそのセルの値と同じに勝手に連動して変わると便利カモ」
シート名を取得してセルに表示する関数を書けば良いじゃん。
自己解決&私頭鈍い。
(ご近所PG)


 > あるフォーマットのシートを複製していき、
 > フォーマット内の製品名と日付をシートタグに反映したい...
 うーむ、やはり多量コピーしたあとにシート名変更が大変なのですね、

 だったら、

 [INA] > シート複製マクロを作った方が良かった...
 で一括の方がもっともっと便利になる可能性があります。

 そういう意味で なんで? という疑問を持つことが大事だと思います。

 (kazu)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.