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

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

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

No.2085080と同じことで悩んでいたので、回答者:EL-SURさんの回答の通りコードをコピーしました。 http://okwave.jp/qa2085080.html 成功はしたのですが、私の場合は2つのドロップダウンリストが それぞれ、結合されているのです。 ですから、       ◆範囲を変更する場合は、2行目       Range("A2:A10") の範囲を変更してみても、 「実行時エラー1004 結合されたセルの一部を変更できません」 と表示されうまくできません。 セルの結合は周りのデータの都合上どうしても解除したくないので なんとか結合したまま参照する方法はないでしょうか? ちなみにセルの結合範囲は  ・ドロップダウンリストA  C30:L55 ・ドロップダウンリストB  M30:V55 です。 よろしくお願いします。

  • mmjgr
  • お礼率71% (38/53)

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

  • ベストアンサー
  • 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

  • エクセル 結合セルでも関数は使える?

    セルA1,B1,C1を1つに結合したセルにデータの入力規則を設定しドロップダウンリストから任意の項目を選択できるようにしました。このあと、ドロップダウンリストから例えばAという項目を選択したら、aという文字が隣のセルに表示されるようにしたいのですがどういう関数を使用すればよいですか?又この隣のセルというのもD1,E1,F1までのセルを結合していますが、関数は使えるのでしょうか?

  • 結合したセルの左上以外のセルから値を参照したい

    エクセルで、セルA1:C3を結合しています。 =A1 として参照する場合には、結合セルの値を参照できますが、 =B1とか=A2とかのように参照すると、0が表示されてしまいます。 B1やA2のセルを指定した場合にも、結合セルの値を参照できるような シート関数はないのでしょうか。 =KANSU(B1)とか=KANSU(A2)とした場合に、 結合セルの値を得られるシート関数を教えてください!

  • エクセルにて結合セルの範囲を参照するには?

       A B C D E F 1 |フォード| 2 |BMW | 3 |ホンダ | 各行A列~C列3つを結合入力 4 |ルノー | 5 |DFR  | 6 |ベンツ |  上記のようなエンジンメーカー表にて、A1~C1,A6~C6間にF1へエンジンを供給しているメーカー名がA~Cの3つのセルを結合して入力されているとします。  このような表を用いて別のワークシートから、このエンジンメーカーの入力セルの文字列を参照したいのですが、  フォードの場合ですと、=’エンジンメーカー表’!A1:C1と表示され、エラー値VAULEが返され、参照したい文字列が返りません。  結合されている3セルに範囲名をつけてINDIRECT関数で参照すれば出来るのですが、結合セルの項目が多過ぎて、いちいち、名前をつけていられないのです。  また、表のセル結合を崩せないのです。(同じフォーマットで作られている表が多数存在のため) このような単一セルでなく、複数のセル範囲を結合して入力されている文字列を簡単に=で参照する方法は無いでしょうか?

  • 結合したセルのセル参照

    http://oshiete1.goo.ne.jp/qa2144305.html http://oshiete1.goo.ne.jp/qa1315043.html 上記の二つの質問を見ましたが、疑問が取れないので質問します。 知識が乏しいので、言葉の使い方がおかしかったらすみません。 ----- 別シート(シート名は漢字を使った和名に変更済)の 結合したセルにセル参照したい時のエラー(?)です。 ツールバーの「=」ボタン、もしくはキーボードから「=」を入力し カーソルで参照先のセルをクリックすると  ='シート名'!A1:B1 と入力されてしまい、エラーになります。 また、それと同じ操作をしているはずなのに  ='シート名'!A1 となる場合もあります。前者ではもちろんセル参照できませんので 後者のようにしたいのですが、何か設定があるのでしょうか? 前者のようになってしまうのは仕方がないことですか? 毎回「:B1」の部分を消すのは大変手間がかかります。 それとも、そもそもカーソルでセル参照をするやり方が悪いのでしょうか?

  • エクセル セルを結合させてドロップダウンリストを作りたい

    Office2003を使用しています。 エクセルで、結合させたセルの列を一つの列とみなしてドロップダウンリストを作成したいのですがうまくできません。 言葉が足りずにわかりにくいかもしれませんが、例えば1行目のA列とB列、2行目のA列とB列、3行目のA列とB列・・というようにセルを結合させていき、その列にドロップダウンリストを作成したいのです。 結合させた後に範囲を指定してドロップダウンリストを作成しようとすると、A列とB列の2列にドロップダウンリストを作成するように出来上がってしまいます。 何か方法はありますでしょうか? 宜しくお願いします。

  • 結合したセルに参照式を・・・

    伝わりにくいかもしれませんが、ご容赦下さい。 sheet1にA1:A4を結合したセルを作って、そこにsheet2のA1を参照するように =sheet2!A1と式を入れます。 A5:A8の結合セルは、sheet2のA2、A9:A12の結合セルは、sheet2のA3を参照・・・ としたいので、A1:A4の結合セルを選択して、下方向にドラッグさせたのですが、A5:A8の セルの参照式が=sheet2!A5になってしまいます。 どうやらA2:A4もカウントしてしまっているように思います。 一つ一つ手入力で入れて行けば問題なくできますが、ここにこれから何百データと入れて行くので、 手入力は非常に面倒で避けたいです。 ドラッグでA5:A8はsheet2のA2、A9:A12はsheet2のA3・・・とさせる方法はないでしょうか? (要は、結合した中の最段以外の行はカウントしないように)

  • EXCEL セル結合したセルを参照したい!

    Sheet1 A1:B3 セル結合して「5」が入力されている Sheet2 A1:B3 セル結合して「5」が入力されている Sheet3 A1セルに上記の合計を出したい =Sheet1!A1:B3+Sheet2!A1:B3 となってしまって答えが#VALUEとなってしまいます。 結合されているセルはセル参照の計算は不可能なのでしょうか? 説明が下手ですいません。 おわかりの方教えてくださーい!

  • Excelで(セルを結合して中央揃え)した後の 結合された方のセルを参照した場合

    Excelで(セルを結合して中央揃え)した後の 結合された方のセルを参照した場合 全然参照されてきません。 わかりやすく例をだすと (1)A1とB1を(セルを結合して中央揃え)します。 (2)そこに文字を打ちます。 (3)他のシートのセルに  ="『"&Sheet1!A1&""』" とするとA1に入っていたものはそのままコピーされます。 (4)ですが  ="『"&Sheet1!A2&""』" とするとまったくコピーされません。 なんとか結合されたA2の方を参照したとしてもコピーできる方法はないでしょうか?困っています。どなたか助けてください。

  • セルの入力規制で、別ブックにあるデータから参照する。

    セルの入力規制で、別ブックにあるデータから参照する。 セルの入力規制で、別ブックにあるデータからA1の結果によりA2にドロップダウンリストを表示させたいのですが。 例えば、下記のデータがブックAにあるとします   A   B   C 1 三菱 日産 日野 2 FU  CW  FH 3 FK  CM  FD 4 FC  MK  FB ブックBのセルA1で、ドロップダウンリストから 三菱 日産 日野 のいずれかを選択すると ブックBのセルA2では、三菱 日産 日野の列に対応した(三菱だったらFU FK FC、日産だったらCW CM MK)ドロップダウンリストを表示させたいのですが、どうすれば良いのでしょうか? 別ブックからはINDIRECTで可能なのと、同ブックからのA1の結果によるA2のドロップダウンリスト表示は「選択範囲から名前を作成」で可能なことは分かったのですが、二つをどのように組み合わせれば良いのか分かりません。

  • VBA 結合セルの

    EXCELにて結合セルを含む表の白紙化をしようとおもいます。しかしなぜか結合セルの部分はうまくいきません。 どうすればよいでしょうか。 range("A1:A6").clearcontents A1からA9に結合セル3つ含んでいます。

専門家に質問してみよう