エクセルのセル範囲(結合セル)にいろいろな名前を定義してあります。
名前の定義されたセル範囲を変更した場合、マクロが動くようにしたいのです。
ところが、名前の定義のないセルを変更すると
「実行時エラー1004、アプリケーション定義またはオブジェクトの定義のエラーです」
になってしまいます。
一応、下記のような方法で解決はできましたが、エラーで判断するのではなく、名前の定義の有無を取得して分岐させるのが正しい?やりかたなのではと思います。
ご教示いただけましたら幸いです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As String
On Error Resume Next
x = Target.Cells(1).Name.Name
On Error GoTo 0
If x = "" Then Exit Sub
Select Case Target.Cells(1).Name.Name
Case "住所"
Range("送付先住所").Value = Target.Value
Case "氏名"
Range("送付先氏名").Value = Target.Value
End Select
End Sub
No.1ベストアンサー
- 回答日時:
エラーで判断するのが正しいやり方ではないなどとは言えないと思います。
それで安全に動けばいいのではないですか。
nameを調べるなら、全部のnameにあたるしかないでしょう。
次のようなコードでどうでしょう。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As String, ad As String, lad As Integer
ad = Target.Address
lad = Len(ad)
For Each nm In ActiveWorkbook.Names
If ad = Right(nm.RefersTo, lad) Then
x = Target.Name
End If
Next
If x = "" Then Exit Sub
Select Case Target.Name.Name
Case "住所"
Range("送付先住所").Value = Target.Value
Case "氏名"
Range("送付先氏名").Value = Target.Value
End Select
End Sub
さっそくありがとうございます。
全部の「名前の定義」に総当りしなければいけないということは、ある任意のセルに名前が定義されているかどうかを直接取得する方法はないということなのでしょうか。
No.4
- 回答日時:
>「名前の定義」の有無を取得
するわけではないですが、提示の例題に限って言えば、
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
Select Case True
Case Not Intersect(.Item(1), Range("住所")) Is Nothing
Range("送付先住所").Value = .Value
Case Not Intersect(.Item(1), Range("氏名")) Is Nothing
Range("送付先氏名").Value = .Value
End Select
End With
Application.EnableEvents = True
End Sub
このように、とにかくIntersectメソッド実行してNothing判定という方法もあるかもしれません。
ただ、
Range("住所")とRange("氏名")を含めたセル範囲を同時に選択してクリアしたり、
などはどういう対応になりますか?
そのケースも考慮するなら、
それぞれIntersectメソッドの結果を取得して処理する必要があります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Application.EnableEvents = False
Set r = Intersect(Target, Range("住所"))
If Not r Is Nothing Then
Range("送付先住所").Value = r.Value
End If
Set r = Intersect(Target, Range("氏名"))
If Not r Is Nothing Then
Range("送付先氏名").Value = r.Value
End If
Application.EnableEvents = True
End Sub
でも提示のケースはあくまで例題なのですよね?
それだけの用途なら関数をセットしておくほうが簡単な気がします。
No.2
- 回答日時:
以下の様な記述でもいいです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As String
Dim N As Name
For Each N In ActiveWorkbook.Names
If Not Intersect(Target, Range(N.RefersToLocal)) Is Nothing Then
x = N.Name
Exit For
End If
Next N
If x = "" Then Exit Sub
Select Case x
Case "住所"
Range("送付先住所").Value = Target.Value
Case "氏名"
Range("送付先氏名").Value = Target.Value
End Select
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
Excel VBA セルの名前があるか無いかを知るには?
Visual Basic(VBA)
-
エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?
Excel(エクセル)
-
excel vba 名前付きセルが存在しないとき
Excel(エクセル)
-
-
4
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
エクセルVBA 「名前の定義」について
Excel(エクセル)
-
8
Worksheet_Change、名前の定義で分岐
その他(Microsoft Office)
-
9
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大学の事務に書類を渡しに行っ...
-
VBAでセル範囲の「名前の定義」...
-
郵便振込の「依頼人」欄の内容
-
ネット友達に個人情報を教えて...
-
領収書に記載する事項について
-
母方の実家宛てで宅配便を利用
-
カードを作るのに現住所と本籍...
-
社会と情報のテストで、学園祭...
-
オークションで定形外でお願い...
-
この中で、求職中の人に質問で...
-
どこの郵便局から出したか、わ...
-
切手は余分に貼ってもいいもの...
-
満員電車で降りる時に「早く降...
-
メルカリで商品IDを書きたくあ...
-
転送届けを出した状態で転送不...
-
改札を通らず乗車駅まで戻って...
-
最近NHKから特別あて所配達とい...
-
定期を家に忘れてしまいました...
-
切手を料金より多く貼って郵便...
-
友達へ手紙を送りたいのですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ネット友達に個人情報を教えて...
-
郵便振込の「依頼人」欄の内容
-
大学の事務に書類を渡しに行っ...
-
高校願書の保護者欄記入につい...
-
お店等で氏名・住所を書かされ...
-
メルカリについて。 「本人情報...
-
VBAでセル範囲の「名前の定義」...
-
オークションで定形外でお願い...
-
母方の実家宛てで宅配便を利用
-
社会と情報のテストで、学園祭...
-
領収書に記載する事項について
-
太田市明林公園について
-
最近NHKから特別あて所配達とい...
-
通学定期は途中の区間まででも...
-
切手は余分に貼ってもいいもの...
-
満員電車で降りる時に「早く降...
-
どこの郵便局から出したか、わ...
-
メルカリで商品IDを書きたくあ...
-
定期を家に忘れてしまいました...
-
改札を通らず乗車駅まで戻って...
おすすめ情報