• ベストアンサー

エクセルで、セルの日付をシート名にしたい

セルA1に、別のブックのセルから=の式で引張って来た日付表示のデータ(H19.10.10)が入っています。 その日付を常にそのシート名に反映させるにはどうしたら良いでしょうか?宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >参照元のデータが更新されると同時にシート名も変わるといいのですが・・・。 もちろん、こういう方法もできますが、イベントというのは、常に、マクロを待機状態にしているわけですから、負担が大きくなります。おまけに、こういう大元のオブジェクトのプロパティを頻繁に、シート名を換えるような内容は、ブックを壊す原因にもなりますから、できる限り気をつけて扱ってください。 本来は、自分が明示的に行う、一般プロシージャのほうがよいです。 自動的に行うのは、リスクが高いです。 ThisWorkbook に貼り付けてください。 Application.Undo '設定を戻す は、不要だったら抜いてください。 単独にこのプロシージャだけでよいです。 以下のマクロの日付値は、ワークシートに Text 関数はお使いにはならないでください。シリアル値を入れ、書式で設定してください。 二つのマクロは、絶対に同時に使わないでください。片方だけにしてください。無限ループになる可能性があります。 --------------------------------------------------------------- Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)   Dim myDate As String   If Target.Address <> "$A$1" Then Exit Sub   On Error GoTo ErrHandler   If IsDate(Target.Text) Then     myDate = Format$(Target.Value, "GEE.M.D")     If Sh.Name <> myDate Then       Sh.Name = myDate     End If   End If   Exit Sub ErrHandler:   MsgBox Sh.Name & "のシート名の変更はできませんでした。", 32   Application.Undo '設定を戻す End Sub ----------------------------------------------------------------- トラブルに責任は持ちませんが、以下のようにすれば可能です。 こちらは、ActiveWindow になっていなくとも設定されますから、エラーを吐きません。シート名が変わらない場合は、シート名が同じかエラーが発生しています。 Private Sub Workbook_SheetCalculate(ByVal Sh As Object)   Dim myDate As String   Dim sht As Worksheet   On Error Resume Next   Application.EnableEvents = False   For Each sht In ThisWorkbook.Worksheets     If IsDate(sht.Range("A1").Text) Then       myDate = Format$(sht.Range("A1").Value, "GEE.M.D")       If sht.Name <> myDate Then         sht.Name = myDate       End If     End If   Next sht   Application.EnableEvents = True   On Error GoTo 0 End Sub

sno29
質問者

お礼

おばんでございます。 Wendy02様、ありがとうございます。 お力を頂き、お陰様で仕事を完成させて頂きました。 非常に丁寧にお教え下さったご説明、超初心者の私にとりましては難しく、 今回は、そのままコピーさせて頂きましたが、これからよく勉強させて頂きたく存じます。 この度初めて、教えて!gooさんに質問させて頂いたのですが、 見ず知らずの私のような者に、こんなに親切丁寧にして頂けたこと、ものすごく感激しています。お会いして直接お礼を申し上げたい気持ちで一杯です。本当にありがとうございました。 蛇足ですが(失礼な話になりますが)亡くした愛犬Wendyと同じお名前でしたことも・・・。本当にありがとうございました。感謝多謝。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>A1が計算式の形になっているため参照元のブックのデータ変更と同時にシート名が変わってくれません。 コード(プログラム)が解らないので、文面だけでは何とも言えません。 エラーが表示されるなら、エラー内容も記載して下さい。 また、他のブックが更新された事を知るためのイベントも無いので、自動的に変化を知ることは不可能だと思います。 シート名には、"/"等の一部の記号が使えないので、別の文字にするなどの工夫が必要です。 With Sheets("Sheet1") .Name = Format(.Range("A1"), "yyyy-mm-dd") End With

sno29
質問者

お礼

回答頂き誠にありがとうございます。 VBAは全く初心者で、急な必要に迫られコードは探してコピーして作りました。 日付の表示の仕方は、H19-10-10 のようにしているため、 エラーはおっしゃる通り使えない記号を使っていることへの指摘でした。(実行時エラー1004)ただし、TEXTで文字列にしてからは出ていません。 文字列でもかまわないので、参照元のデータが更新されると同時にシート名も変わるといいのですが・・・。 すみません。イベントのやり方もわかりません。 下記が現在のコードです。 宜しくお願い申し上げます。 Option Explicit Function CheckName(AName As String) As Boolean Dim i As Long CheckName = True For i = 1 To ThisWorkbook.Sheets.Count If AName = Sheets(i).Name Then CheckName = False Exit Function End If Next End Function Private Sub Workbook_SheetChange(ByVal Sh As Object, _ ByVal Source As Range) If Source.Row = 1 And Source.Column = 1 Then If Sh.Range("A1") <> "" And CheckName(Sh.Range("A1")) Then Sh.Name = Sh.Range("A1") End If End If End Sub

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

自動で書き換えるにはマクロ(VBA)で行うしかありません。

sno29
質問者

お礼

ThisWorkbookにVBAで文字列であれぱシート名にさせるところまでは出来ました。しかし、日付表示のままだとうまく行きません。 又、A1の式にTEXT関数を加えて文字列表示にしてなんとか見た目は日付表示にしたのですが、A1が計算式の形になっているため参照元のブックのデータ変更と同時にシート名が変わってくれません。 アドバイスお願いできますでしょうか?

関連するQ&A

専門家に質問してみよう