« Ping送信先の追加登録。 | トップページ | USB2.0 と USB2.0 High-Speed? »

[エクセル] 結合セルを解除+同じ値をセット。

指定されたセル範囲内の結合セルを解除して、その解除したところには、結合セルだった時と同じデータをセットする方法。
普通に、解除しただけでは、左上以外は全部空白のままなのです。
結合セルのVBAでの扱い方です。


まず、基本的な話。まとめ。

結合セル

 結合セル=単一セル範囲 ではありません。
 セルを結合した場合、結合セルの一番左上(=cells(1,1))に値がセットされ、それ以外は削除されます。
 つまり、結合セルの一番左上の値をセット/取得で結合セル全体の値を操作できます。

MergeCells プロパティ

 ヘルプに記載の "バリアント型 (Variant) の値を使用します。" がポイントです。
 設定/取得可能は、True/False/Null の3種類。
 対象は、Rangeオブジェクト。複数セルでも単一セルでもOK。

 複数セルの場合、そのセルすべてが結合セルじゃなければ、False。1つでも結合セルがあれば、Null。
 単一セルの場合、結合セルなら、True。以外は、False。Nullはありえません。

MergeArea プロパティ

 ヘルプの記載 "単一セル範囲でのみ機能します。"は間違い? 実験結果では、単一セルでのみ機能。
 対象は、Rangeオブジェクト。かえってくるのも、Rangeオブジェクト。Areasコレクションではない。


で、どうするか。流れ。

1. 対象の単一セルをセット。=(A)
2. (A)のMergeCellsプロパティを見る。
3. 結合セルなら、MergeAreaプロパティで結合セルを取得。=(B)
4. (B)の左上の値を保存。=(C)
5. (B)の結合セルを解除
6. (B)だった範囲に(C)をセット
7. ループ

単一セルに対して、処理していくのが重要です。でないと、MergeCells で Null になったり、MergeArea が「アプリケーション定義またはオブジェクト定義のエラーです。」になったりします。

ソースファイル

ということで、サンプル。きれいじゃないです。

文字コード Shfit_JIS(シフトJIS) です。
ブラウザで見る場合、右クリックでエンコードを切り替えてください。
初期状態でほぼ100%化けてると思います。

「UnMergeAndSetData.txt」をダウンロード

|

« Ping送信先の追加登録。 | トップページ | USB2.0 と USB2.0 High-Speed? »

「VBA」カテゴリの記事

「エクセル」カテゴリの記事

「パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/44406/1332434

この記事へのトラックバック一覧です: [エクセル] 結合セルを解除+同じ値をセット。:

« Ping送信先の追加登録。 | トップページ | USB2.0 と USB2.0 High-Speed? »