
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Excel(エクセル) 前の(左隣の)シートを連続参照するように、あとから変更したい 1 2023/02/22 00:51
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) エクセル関数について 2 2022/04/13 18:25
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) エクセルのことで教えてください。 A1セルに、 別シートのA1セルが1のときは「A」、2のときは「B 4 2023/02/24 23:08
- Excel(エクセル) エクセルの表示形式について教えてください あるセルの「A」という値と、別のセルの「B」という値を組み 4 2023/02/21 21:55
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでセルに入っている日付をシート名にする
Excel(エクセル)
-
EXCELで1ヶ月分の連続した日付をシート名+セルに表示させたい
Excel(エクセル)
-
Excel VBA シート名変更時、重複していたら連番を付けたい
その他(Microsoft Office)
-
-
4
InputBoxに入力した言葉をシート名にしたい!
Excel(エクセル)
-
5
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
6
エクセルのシート名変更で重複した時のvbaの処理
Visual Basic(VBA)
-
7
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
8
EXCELで条件付き書式で空白セルの時は塗りつぶし無しにする方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのVBAで集計をしたい
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセルのdatedif関数を使って...
-
【画像あり】オートフィルター...
-
【マクロ】アクティブセルの時...
-
【マクロ】列を折りたたみ非表...
-
他のシートの検索
-
【マクロ】3行に上から下に並...
-
【条件付き書式】シートの中で...
-
ページが変なふうに切れる
-
【マクロ】実行時エラー '424':...
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】【相談】Excelブック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報