
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
おばんでございます。
Wendy02様、ありがとうございます。
お力を頂き、お陰様で仕事を完成させて頂きました。
非常に丁寧にお教え下さったご説明、超初心者の私にとりましては難しく、
今回は、そのままコピーさせて頂きましたが、これからよく勉強させて頂きたく存じます。
この度初めて、教えて!gooさんに質問させて頂いたのですが、
見ず知らずの私のような者に、こんなに親切丁寧にして頂けたこと、ものすごく感激しています。お会いして直接お礼を申し上げたい気持ちで一杯です。本当にありがとうございました。
蛇足ですが(失礼な話になりますが)亡くした愛犬Wendyと同じお名前でしたことも・・・。本当にありがとうございました。感謝多謝。
No.2
- 回答日時:
>A1が計算式の形になっているため参照元のブックのデータ変更と同時にシート名が変わってくれません。
コード(プログラム)が解らないので、文面だけでは何とも言えません。
エラーが表示されるなら、エラー内容も記載して下さい。
また、他のブックが更新された事を知るためのイベントも無いので、自動的に変化を知ることは不可能だと思います。
シート名には、"/"等の一部の記号が使えないので、別の文字にするなどの工夫が必要です。
With Sheets("Sheet1")
.Name = Format(.Range("A1"), "yyyy-mm-dd")
End With
回答頂き誠にありがとうございます。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAで集計をしたい
-
vba テキストボックスとリフト...
-
【画像あり】【関数】指定した...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
【マクロ】【配列】3つのシー...
-
エクセルに写真が貼れない(フ...
-
エクセルでフィルターした値を...
-
【マクロ】【相談】Excelブック...
-
【マクロ】数式を入力したい。...
-
【マクロ】元データと同じお客...
-
エクセルのライセンスが分かり...
-
エクセルシートの見出しの文字...
-
セルにぴったし写真を挿入
-
Excelに貼ったXのURLのリンク...
-
【関数】=EXACT(a1,b1) a1とb1...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報