統合セルを自動調整するVBAコード 回答する


#VBA

こんにちは。助けてください。笑

以下、状況のテンプレートがございまして、統合セル箇所を自動調整するマクロコードを追加したいと考えています。ネットでざっと調べたのですが、ピンポイントで当てはまるコードが見つからず、なかなか複雑でして・・

条件:

・シートAとシートBがあり、シートAの後にシートBが連続するページとしてPDFが1ファイル作成される
・シートA、シートB双方に自動調整したいセルがある(シートAは統合セル、シートBは非統合セル)
・シートA、シートBの自動調整するセルは、入力用のシートからデータを引っ張ってきている
・シートAの統合セルは、列・行共に複数セルを統合している

上記内容なのですが、シートA、シートBのそれぞれ自動調整が必要な複数の統合セル・非統合セルを自動調整するVBAコードをご教示頂けましたらと思います。

宜しくお願い致します。

うっしー 2019.10.22 05:37:03 418

shirohonoka 2019.10.24 16:21:22
統合セルに対してはAutofitが使えないので、なんらかの工夫が必要ですね。また回答させていただきます。

コメントする

コメントするには ログイン していただく必要があります。

回答 1

回答が遅くなり申し訳ございません。

シートB(非統合セル)

ます、シートBについてですが、こちらは非統合セルですので単純にAutoFitメソッドを利用すれば良いかと思います。
例えば、B2セルの列のサイズを自動調整したい場合は次のように行います。

Range("B2").Columns.AutoFit

行のサイズを自動調整したい場合は、ColumnsではなくRowsとします。

シートA(統合セル)

次に問題のシートAについてですが、統合セルにAutoFitを使っても期待通りにサイズが調整されないため、工夫が必要となります。

一つのやり方は、セルに含まれる文字数から必要な幅を計算して、それを結合する列数(または行数)で割った値を、それぞれの列(または行)の幅として指定する方法です。ただ、同じ文字数でも半角と全角文字では文字幅が違いますし、プロポーショナルフォント(MS Pゴシック等)の場合は文字ごとに幅が違うため、正確な幅を抽出するのは大変です。

もう一つのやり方は、非統合セルを一時的に利用する方法です。

例えば、B2とC2セルが統合したセルの列の幅を自動調整したい場合は、

  1. 使用していない非統合セル(例えばB100)から統合セル(B2)の内容を参照する
  2. B100に対してAutoFitメソッドを使用する
  3. B100が含まれる列の幅を取得する
  4. 取得した幅を2で割った値をB2セルとC2セルが含まれる列の幅としてそれぞれ設定する
  5. B100セルを削除する

とやれば良いかと思います。「使用していない非統合セル」には、対象の統合セルと同じ列のものを選ぶと、他の列への影響を減らすことができて良いと思います。

上記をコードで表現すると次のようになります。

Range("B100").Formula = "=" & Range("B2").Address
Range("B100").Columns.AutoFit
Dim w As Double: w = Range("B100").ColumnWidth
Range("B2").ColumnWidth = w / 2
Range("C2").ColumnWidth = w / 2
Range("B100").Delete

いかがでしょうか?

shirohonoka 2020.03.02 18:03:45 (2020.03.02 18:07:25 更新)

コメントする

コメントするには ログイン していただく必要があります。

回答する
質問に回答するには ログイン していただく必要があります。
一覧に戻る