![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
エクセルのセル範囲(結合セル)にいろいろな名前を定義してあります。
名前の定義されたセル範囲を変更した場合、マクロが動くようにしたいのです。
ところが、名前の定義のないセルを変更すると
「実行時エラー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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Excel VBA セルの名前があるか無いかを知るには?
Visual Basic(VBA)
-
エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?
Excel(エクセル)
-
excel vba 名前付きセルが存在しないとき
Excel(エクセル)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
Worksheet_Change、名前の定義で分岐
その他(Microsoft Office)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大学の事務に書類を渡しに行っ...
-
メルカリについて。 「本人情報...
-
郵便振込の「依頼人」欄の内容
-
定額小為替の引き換え方について
-
意見する場合、名前を名乗らな...
-
携帯電話番号から名前と住所を...
-
転居先を調べる方法を教えて下...
-
小為替
-
最近NHKから特別あて所配達とい...
-
定期を家に忘れてしまいました...
-
どこの郵便局から出したか、わ...
-
切手は余分に貼ってもいいもの...
-
満員電車で降りる時に「早く降...
-
封筒を折っても、定形郵便扱い...
-
電車で精液かけられました。 学...
-
やらかして拘置所にいる友達に...
-
退職済みの社員宛てに届く郵便...
-
さきほど電車で飲み物をこぼし...
-
高校まで電車通学で人身事故が...
-
戸籍と住民票の名前が違ってい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大学の事務に書類を渡しに行っ...
-
ネット友達に個人情報を教えて...
-
郵便振込の「依頼人」欄の内容
-
お店等で氏名・住所を書かされ...
-
社会と情報のテストで、学園祭...
-
メルカリについて。 「本人情報...
-
VBAでセル範囲の「名前の定義」...
-
高校願書の保護者欄記入につい...
-
携帯add→→住所
-
意見する場合、名前を名乗らな...
-
カードを作るのに現住所と本籍...
-
夜行バスなどのオンライン予約...
-
母方の実家宛てで宅配便を利用
-
精神科、心療内科について
-
転居先を調べる方法を教えて下...
-
携帯電話番号から名前と住所を...
-
オークションで定形外でお願い...
-
太田市明林公園について
-
小為替
-
領収書に記載する事項について
おすすめ情報