質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

4512閲覧

「VBAによるExcel結合セルの幅の計算結果」の修正方法

tokoro47

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/05/28 06:50

編集2020/05/28 07:04

前提・実現したいこと

結合セルの幅をVBAで取得しようとしています。
やり方はMergeAreaで列の幅を足していけばいいとわかったのですが、
以下の画像のとおり実際の値とあいません。

N21からAA21が結合セルで列幅は画像のとおりです。
合計の33.71をAC列に設定したのですが、結合セルの方が見てわかる通り大きいです。

なぜこのようなことが起きるのでしょうか?
原因と解決策を教えて頂けると幸いです。

よろしくお願い致します。

イメージ説明

VBA

1Dim i 2Dim iWidth As Double: iWidth = 0 3 4' 結合セルの幅を取得 5For i = 1 To Range(結合セル).MergeArea.Columns.Count 6 iWidth = iWidth + outputSheet.Range(cell).MergeArea.Item(i).ColumnWidth 7Next

補足情報(FW/ツールのバージョンなど)

Excel 2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/05/28 06:59

コードを掲載してください。
tokoro47

2020/05/28 07:05

コード追加しました。 よろしくお願い致します。
meg_

2020/05/28 08:18

outputSheetとcellが突然出てきて良く分かりませんが、「Range(結合セル)」と「outputSheet.Range(cell)」は同じセル(範囲)なのですよね?
tokoro47

2020/05/28 08:27

すみません。その通りです。 ただ、論点が少しずれた気がするので修正させていただきます。 主に知りたいのは原因です。 最終的にはVBAで実行するのですが、各セルの幅の取得もシート上で操作し取得しました。 原因わかりますでしょうか?
meg_

2020/05/28 08:30

自分のPCで試してみましたが、ほぼ同じ列幅で設定できました。(Excel2013) 結合セルの幅は本当に「33.71」ですか?
meg_

2020/05/28 08:33

>ただ、論点が少しずれた気がするので修正させていただきます。 >主に知りたいのは原因です。 そのためには正確なコードが必要だと思います。回答者側で検証可能なコード(パス以外はそのまま動くようなコード)がないと回答しずらいです。
tokoro47

2020/05/28 08:44

>自分のPCで試してみましたが、ほぼ同じ列幅で設定できました。(Excel2013) >結合セルの幅は本当に「33.71」ですか?  本当ですか!?  N21からAA21までのセル幅は画像の通りになっており、AC列は33,71にしてあります。  しかし、結合セルN21には「"123456789012345678901234567890123456789"」が入るのに対し  、AC21には「"123456789012345678901234567890123」までしか入りません。
tokoro47

2020/05/28 08:47

>そのためには正確なコードが必要だと思います。回答者側で検証可能なコード(パス以外はそのまま動くよ  うなコード)がないと回答しずらいです。 申し訳ありません、浅はかな考えでした。 今回は、幅の問題でVBAがなくとも検証可能なため、コードは必要ないと考えておりました。
meg_

2020/05/28 12:01

・コードに間違いがないことが明確でしたら、microsoftに問い合わせてみてはどうでしょうか?Excelの仕様上の問題かもしれませんね。(以前は問い合わせ用のサイトがありました) ・質問を読んで試したので「セル幅」のことしか確認していません。質問に書いてなかったため、文字が見切れるかどうかについては検証しておりません。
guest

回答1

0

ベストアンサー

ExcelVBA

1Option Explicit 2 3Sub test() 4 Dim rng As Range 5 Dim c As Range 6 Dim d As Double 7 8 Set rng = Range("A1").MergeArea 9 ' 結合セルの幅を取得 10 For Each c In rng.Columns 11 d = d + c.EntireColumn.ColumnWidth 12 Next 13 14 rng.Cells(1, rng.Count + 2).ColumnWidth = d + (rng.Count - 1) * 0.6125 15 16 Debug.Print rng.Width 17 Debug.Print rng.Cells(1, rng.Count + 2).Width 18End Sub

力技で微調整してみた^^;
(真面目に数式なりマクロなり考えるのがめんどくさいんで、
それっぽい値を10回位試したらなぜかそれっぽくなった^^;)
列と列の間には罫線用の間があると思われます。(罫線の太さで罫線用の幅もかわらないか不安)
ネットで検索してもその辺の情報が見つからなかった。

ぴったりあわせて何をしたいかが分かりませんが、
いずれにしてもこの辺の幅とかはエクセルはざっくりな感じなので、
あんまりこだわっても上手くいかないかもしれません。

投稿2020/05/28 08:50

編集2020/05/28 08:59
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokoro47

2020/05/28 08:58

ご回答ありがとうございます。 私もとりあえず定数足して、対応しています。 ただ、私だけだはなく、他の人も使用するものなので、バージョンの違いなどでずれが生じないかが心配です。 それで、明確な原因を知っている方がいればと思い質問させていただきました。 ちなみに何をしたいかですが、結合セルの高さの自動調整です。 自動調整のために1度結合をとき、幅を結合セルに合わせなければいけません。
mattuwan

2020/05/28 09:11

あぁ、なるほど、、、、 その件は「絶対の方法」がなさそうです。 オートフィットを使っても文字切れは起り得ます。 結合セルを一旦解除してもいいですが、 作業用のシートを用意しておいてそっちでオートフィットさせてみて値を取ってくるのが一番簡便かと思います。 高さの調整なら、セルのフォントの大きさを取ってきて、定数を足して罫線分等を微調整というのも出来るのかなぁ。。。と思ってますが、実際には試してないのでなんとも。。。 文字切れを防ぐには、画面で確認出来たら、その範囲を画像としてコピーしたら文字切れは無くなりますが、手間が面倒です><
tokoro47

2020/05/29 01:01

今回、VBAを始めて触ったのですが、そんな感じなんですね。 今回はとりあえず力技で乗り切ろうと思います。 ご回答ありがとうございました。 Excelの仕様上という形で、根本的な解決にはなりませんでしたが、原因がなんとなくわかり安心しました。 ベストアンサーとさせていただきます。
mattuwan

2020/05/29 01:11

VBAを使ったところで、手動で操作するか、VBAで遠隔操作するかの違いなので、 エクセルで出来ないことはできないです。 プロポーザルフォントは文字毎に文字の幅が違うので、 多分その辺を厳密に表示できるようにしたら、再計算とか再表示とかに時間が掛かって、 表計算ソフトという本分を果たせなくなるのではと個人的に想像してます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問