- ベストアンサー
Excel VBA 結合セルがある時に1列だけ選択
A1からD1までの4つのセルが結合されている時に C列をクリックするとC列だけを選択できます。 これをVBAで記述するには どのように記述すればよいでしょうか。 マクロの記録では Columns("C:C").Select というコードが生成されるのですが マクロ記録時にC列だけが選択されていたのに 実行するとAからDの4列が選択されます。 読み込んだファイルを処理するので 結合セルの存在やセルは不定です。 よろしくお願いします。(Windows7,Excel2010)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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 もお望みの通りに機能します。 お試しくださいませ。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
下記はダメでしょうか。役立たないとか幼稚でしたらすみません。 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 など参考に。 ーー そもそもセル結合が使われるといろんなところに、要対処箇所・事項が出てきて、決して 便利な仕組みばかりではないと思う。質問などでは、結合セルはないものとの前提で回答したりするが。
お礼
結合されているとわかっている場合、または、検出して このような方法で対処できるということですね。 今後の参考にさせていただきます。 ありがとうございました。
- Chiquilin
- ベストアンサー率30% (94/306)
マクロの処理に「選択」なんてほとんどの場合必要ないはずですが 何をしようとなさっているのですか?
お礼
これから処理するデータ(セルや列)を選択して ユーザーにこのデータでよいかの確認(OKボタンなど) を取らせるためと、このデータ(選択したセルや列)に対して、 VBAで処理(コピーなど)を続行させるためです。
お礼
□□□□□□□□□□□.Select Selection.○○○○○ を □□□□□□□□□□□.○○○○○ というようにSelectを使わなくても 記述することができるということですね。 ありがとうございました。