• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:結合されているセルの参照の仕方)

結合されているセルの参照の仕方

このQ&Aのポイント
  • 結合されたセルの参照方法についての質問です。ドロップダウンリストが結合されており、範囲を変更しようとするとエラーが発生します。
  • 結合されたセルの参照方法についての質問です。ドロップダウンリストが結合されており、範囲を変更すると「結合されたセルの一部を変更できません」というエラーが発生します。
  • 結合されたセルの参照方法についての質問です。ドロップダウンリストが結合されたまま参照する方法はあるのかという疑問です。

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

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

こんにちは。 >C30・C32・C34・C36  と  O30・O32・O34・O36に C30 -> O30 C32 -> O32 C34 -> O34 C36 -> O36 それぞれが対応しているということですね。 しかし、C30 と C32 自体は、独立しているということになりそうですね。 ご自身で直せるように、簡単な解説を付けておきます。 --------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C30,C32,C34,C36")) Is Nothing Then Exit Sub Application.EnableEvents = False  'O列の該当する行を消去する  Cells(Target.Row, "O").MergeArea.ClearContents Application.EnableEvents = True End Sub ---------------------------------------------- 解説: このようなマクロを、私は「イベント・ドリブン型」と呼んでいます。 1. Private Sub Worksheet_Change(ByVal Target As Range) ワークシートが変化したら、マクロを動かしなさいということです。 ByVal Target As Range は、Range(セルの範囲のオブジェクト)として、引数、Target を、引き受けます。 なお、Target というのは、入力したセルのことで、予め、決まった名前のことです。 2. 前回:If Target.Address <> "$C$30" Then Exit Sub     ↓ If Intersect(Target,Range("C30,C32,C34,C36")) Is Nothing Then Exit Sub Intersect をつかいます。(交差するという意味です) 「交差」しなかったら、マクロは動かないで、Sub の 外(Exit) に出る、ということです。 このような書き方が決まっているわけではありません。一般的に、流通しているというだけです。 3.  Cells(Target.Row, "O").MergeArea.ClearContents Cells(該当する行, 列名) Target.Row は、変化したところのセルの行数 MeargeArea は、その繋がっている結合セルの範囲 ClearContents は、値を消去しなさい ということです。 4. Application.EnableEvents = False   ~ Application.EnableEvents = True これは、もしかしたら、不要かもしれません。マクロが動かなくなるようなことがあったら、以下のコードは削除してしまってください。その原因は、イベント・ドリブン型の信号を受け取らないように、Offにしています。Off と On の間で、エラー値を受け取る、マクロがとまってしまうからです。そのままになると、イベント・ドリブン型マクロは動かなくなることがあります。 そこで、Off の状態を戻すのは、 Sub ReGain  Application.EnableEvents = True End Sub とするか、Excelを再起動すれば戻ります。 これを使う場合は、マクロが走って、信号を受け取ると、また再び、自分のところに返ることを「再帰」といいます。Worksheet_Change は、自分のセル(Target-選択したセル)を変化させたときだけ、「再帰」は起こらないのですが、他のセルを変化させると、多くは、「再帰」してしまいます。そうすると、何度も何度も、繰り返しマクロが走ってしまうことがあります。それを防ぐためですが、念のために入れているだけで、今回は、あまり意味がありません。

mmjgr
質問者

お礼

ありがとうございます。 思っていた通りの操作ができるようになりました。 大変助かり感謝しております。 何回もお手数をおかけしました。 しっかりご説明をいただき、解決しましたので ポイントを付与させていただきたいので、質問を締め切ろうかと思います。 大変ご親切にしていただきまして、本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

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

こんばんは。 >C30やO30のように結合されているセルをいくつか下に増やす場合も同じようなコードでセルの範囲を変えるだけでよろしいのでしょうか? ご心配にはいりません。 MergeArea というのは、そのセルとそれに繋がる結合セル全体を指しています。 ただし、セル自体は、C30, O30 が名目上のセル・アドレスになります。 もし、何かあったりしたらいけないので、しばらく、ここを締めないで置いておいてください。もし、まったく違うスタイルになったら、また、ここの「お礼側」につけて連絡してくれれば、私のほうに直接メールが届きます。私のほうも、一応、終わったと思っても、ここを忘れないようにしておきます。

mmjgr
質問者

お礼

大変ご親切にありがとうございます。 早速お聞きしたいのですが、C30や030と同じようなセルを下に3つ追加しました。 C30・C32・C34・C36  と  O30・O32・O34・O36に 同様の操作を行いたいのですが、このような場合コードをどのように変更したらよいのでしょうか? 何度もお手数をおかけしますが、よろしくお願いします。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 #1 の回答者です。 それは、なるほど、問題点は良く分かりました。確かに、マクロの処理にしても、前提がはっきりしないと話が分かりませんね。前の内容と同じなのか、違うなのか、私は分からないのですが、以下のようにしてみたらいかがですか? もう、理解できましたので、もし以下のようなスタイルでなかったら、「違う」と、遠慮なくおっしゃってください。ただ、他に方法があったような気がしますが、ずいぶん前の話なので、忘れてしまいました。 一応、マクロのコードの内容は、 C30の「1 のドロップダウン」を選択すると、2のドロップダウンのセルの値のみがクリアされるというものです。ものすごく簡単なことで、要するに、セル一つなら、セルを指定すればよいのですが、結合セルの場合は、MergeArea というプロパティを付けてあげればよいということです。 シートモジュール(要領はお分かりだと思います) -------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$30" Then Exit Sub Application.EnableEvents = False  Range("O30").MergeArea.ClearContents Application.EnableEvents = True End Sub

mmjgr
質問者

補足

ありがとうございます。 思っていたとおりできました。 もしも、C30やO30のように結合されているセルをいくつか下に増やす場合も同じようなコードでセルの範囲を変えるだけでよろしいのでしょうか? その場合はまた違うコードになるのでしょうか? 何度も申し訳ありませんが、ご教示ください。 よろしくお願いします。

すると、全ての回答が全文表示されます。
  • kawajisan
  • ベストアンサー率30% (53/171)
回答No.2

>結合されているセルの参照の仕方 ここだけ 結合セルではリスト参照できない。 結合セルをべつにコピーし(結合無し)ここを参照対象とする。 まとはずれなら、無視して。

mmjgr
質問者

お礼

ありがとうございます。 今回は解決いたしましたので、また他のときに参考にさせていただきます。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 一体、どのようにしたいのか、改めて補足に書いていただけませんか? 元の質問は、私も以前読んだ覚えがありますが、元の考え方自体が、裏技的で、その上にマクロ自体もトリッキーな方法ですから、個人的には手が付けられませんでした。 私個人としては、これは、最初から、質問を含めて、改めてマクロを含めて考え直したほうが良いような気がします。 それに、解決して問題のない他人のマクロを直すというのは、したくありません。これは、他の方も一般的なマナー感覚を持った人なら同様だと思います。 なお、「実行時エラー1004」というのはワークシートの問題であって、本質的には、VBAの問題ではないから、解決は付きません。詳しい事情を書いていただかないと分からないのです。VBAの問題で解決すると思い込んでいる方が多いので、最近、そのワークシートの状態を教えてください、と書いても応じてくれないケースが目立ち、せっかくレスを付けても、本当に、困ってしまいます。 >ちなみにセルの結合範囲は >・ドロップダウンリストA  C30:L55 >・ドロップダウンリストB  M30:V55 >です。 元のマクロでは、そのようなエラーに関わる部分とは関係がありません。 一体、どこで結合されているのでしょうか? 何をどうするときに、エラーが発生するのでしょうか? 結合範囲と、ドロップダウンリストと、どういうつながりがあるのですか? その参照範囲が結合範囲では、意味が分かりません。

mmjgr
質問者

補足

説明不足で申し訳ありません。 それでは、以前の質問とは関係なく私のしたい内容を書かせていただきます。 入力規則を使用したドロップダウンリスト「1」と「2」があります。 「2」の方は元の値にINDIRECT関数を使い、「1」で選択した内容によって「2」で表示されるドロップダウンリストの内容が変わるように設定してあります。 「1」「2」両方のセルともドロップダウンリストで選択をしてある状態で 「1」の内容をドロップダウンリストから再選択し直した場合、 「2」のセルは以前の内容が表示されたままになってしまいます。 これを、「1」で選択しなおした場合は「2」の内容がクリアされ、 再度「2」の内容を選択し直したいのです。 ドロップダウンリストの入力規則が設定されてあるセルは 質問をしてから、少し修正したので以前と変わってしまったのですが 「1」がC30:N31  「2」がO30:V31   で、それぞれ結合してあります。 何か良い方法がありましたら、教えてください。 お願いします。

すると、全ての回答が全文表示されます。

関連するQ&A