• ベストアンサー

Excel VBA 結合セルがある時に1列だけ選択

A1からD1までの4つのセルが結合されている時に C列をクリックするとC列だけを選択できます。 これをVBAで記述するには どのように記述すればよいでしょうか。 マクロの記録では Columns("C:C").Select というコードが生成されるのですが マクロ記録時にC列だけが選択されていたのに 実行するとAからDの4列が選択されます。 読み込んだファイルを処理するので 結合セルの存在やセルは不定です。 よろしくお願いします。(Windows7,Excel2010)

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

  • ベストアンサー
回答No.2

VBAにその機能は無いようですよ。 記憶にある範囲では、エクセル95の時代から度々話題になる、というくらい。 その時代から話題になりつつ改良されないということは、 マイクロソフト社の開発陣も「要らね」と思っている用件なのでしょう。 というのが結論。 で、1番さんに同意した上で、その補足に対し。 そのタイミングであれば、.Selectは必ずしも要るとは思えません。 たとえば一度、セルに色を塗り     columns("C:C").interior.color=rgb(0,0,0) ユーザーに選択させたのちに     columns("C:C").interior.pattern=xlnone 色塗りを元に戻してやれば代用可能です。 コピーについては     columns(3).copy で事足ります。 その他諸々において、.Selectが活躍するタイミングはごくわずかです。 なので、冒頭の結論に続きます。 ご自身が「読み込むファイル」を作るわけではなさそうですから 根本的な対応とは言えませんが・・ 「セルを結合して中央揃え」とは別に 「選択範囲で中央揃え」という文字の配置があるのはご存知ですか? セルの書式設定から横位置で設定可能です。 VBAならたとえば     Range("A1:D1").HorizontalAlignment = xlCenterAcrossSelection で可能です。 これならお望みの     Columns("C:C").Select もお望みの通りに機能します。 お試しくださいませ。

yam2012
質問者

お礼

□□□□□□□□□□□.Select Selection.○○○○○ を □□□□□□□□□□□.○○○○○ というようにSelectを使わなくても 記述することができるということですね。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

下記はダメでしょうか。役立たないとか幼稚でしたらすみません。 A1:D1が結合されているとわかった場合は、回避策(弥縫策)として C列のC2:C100を選択するとして Sub test01() ’Range("c1:c10").Resize(100, 1).Select  ->はA1:D100を選択するのでダメ Range("c2").Resize(99, 1).Select End Sub ただ結合セルを探す方法は https://okwave.jp/qa/q4357242.html など参考に。 ーー そもそもセル結合が使われるといろんなところに、要対処箇所・事項が出てきて、決して 便利な仕組みばかりではないと思う。質問などでは、結合セルはないものとの前提で回答したりするが。

yam2012
質問者

お礼

結合されているとわかっている場合、または、検出して このような方法で対処できるということですね。 今後の参考にさせていただきます。 ありがとうございました。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.1

マクロの処理に「選択」なんてほとんどの場合必要ないはずですが 何をしようとなさっているのですか?

yam2012
質問者

お礼

これから処理するデータ(セルや列)を選択して ユーザーにこのデータでよいかの確認(OKボタンなど) を取らせるためと、このデータ(選択したセルや列)に対して、 VBAで処理(コピーなど)を続行させるためです。