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

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

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

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

Q&A

解決済

2回答

1603閲覧

マクロで文字数比較、セル行高調整

chaaan43

総合スコア1

VBA

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

0グッド

0クリップ

投稿2020/09/24 15:23

編集2020/09/25 01:24

マクロについてご指導いただければと思い質問投稿いたしました。

内容
①A1とB1セル内の文字数を比較し、 文字数が多い方に合わせてautofitで行高を統一する。 ②文字が入っている行全てを①のように行う。

文字数比較の意図として、 autofitにて、1行の中で最も文字数の多いセルに合わせて行高を調整したかったのですが、文字が入っている行全てを範囲として行うことができませんでした。 そのため上記内容にてできないかと考えました。

上記の内容でできない場合、ほかにどのような方法がありますでしょうか。

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


わかりにくく申し訳ございません。
5行目のA列に10文字、B列に15文字
6行目のA列に10文字、B列に5文字

最終行のA列に15文字、B列に20文字
といった形になっております。
結合セルや意図的な改行はなく、
文字が並んでいる形です。

今回行いたい内容は以下です。
・1行目〜4行目まではそのままの状態
・5行目〜文字が入っている最終行までセル幅は変えず、セルの高さだけで文字全体を表示させる

マクロ初心者で知識不足のため、
if A5の文字数>B5の文字数 then 〜などでできるかと考えましたが、文字数カウント方法や最終行までの繰り返し方がうまく組めませんでした。
ifや他の方法で上記内容を達成できる方法はありますでしょうか。
とてもお恥ずかしいのですが、
以下のように作成しております。

dim a As String,b As String
dim i as integer

for i = 5 to cells(Rows.count,5).end(xlUp).Row

a=cells(i,"A").value
b=cells(i,"B").value

if Len(a)>Len(b) then
Rows("A").Rows.Autofit

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

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

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

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

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

satokei

2020/09/24 16:24 編集

やりたいことが分からないのですが、 文字が入っているすべての行が、最大行高と同じ高さになればいいのですか? > 文字が入っている行全てを範囲として行うことができませんでした 仕様なのか不明ですが、そのコードには問題がなかったのですか? できればコードを提示した方がいいのではないかと。
ttyp03

2020/09/25 00:07

もう少しシートの情報を詳しくお願いします。 文字数と言っているのに行の高さと言うのは、セル内で改行されている、もしくは複数行ということでしょうか? 改行の場合、意図的(Alt+Enter)な改行なのか、自動改行なのか。 結合セルの有無など。
ttyp03

2020/09/25 01:30

改行のこと・結合のことについて回答してもらえないので再質問です。 対象のセルはセルの書式で「折り返して全体を表示する」になっているのか(当然そうなっていないと実現はできません) その前提で要は行間をダブルクリックした時と同じ動作でよいのでしょうか?
chaaan43

2020/09/25 02:30

失礼いたしました。 対象セルは「折り返して全体を表示する」となっております。 行間をダブルクリックした時と同じ動作をしたいと考えております。
guest

回答2

0

ベストアンサー

行間をダブルクリックした時と同じ動作をしたいと考えております。

ということであれば、文字数とか関係なく以下でよいのでは?

1行目を調整したい場合。

VBA

1Rows(1).AutoFit

投稿2020/09/25 02:52

ttyp03

総合スコア16998

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

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

chaaan43

2020/09/25 03:17

ありがとうございます。 ご教示いただた内容で実行したところ、少し文字が隠れてしまっているのですが、微調整できるものでしょうか。 また、文字が入っている最終行まで行う場合、 Rows(1: cells(Rows.count,1).end(xlUp).Row).Autofit という認識で良いでしょうか。 たびたびの質問申し訳ございません。
ttyp03

2020/09/25 04:09

> 少し文字が隠れてしまっているのですが、微調整できるものでしょうか。 行ごとに設定すればできますが、隠れてしまう場合の条件が分からない限りは自動でどうにかすることはできません。 全ての行に対して行高さを多少多めに設定するとかなら可能です。 > Rows(1: cells(Rows.count,1).end(xlUp).Row).Autofit これでできたのでしょうか? できたのならいいと思いますが、構文が違うのでエラー出ますよね? たぶんこうじゃないでしょうか。 Rows("1:" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFit むしろ全行に対してでよいのなら、以下でもよいです。 Rows.AutoFit
chaaan43

2020/09/25 04:31

ご返信ありがとうございます。 >全ての行に対して行高さを多少多めに設定するとかなら可能です。 多少多めに行高さを設定するというやり方、よろしければご教授いただけますでしょうか。(たびたびで申し訳ございません。) 1〜4行目まではそのままにしたいので、こちらを使わせていただきます! Rows("5:" & Cells(Rows.Count, 1).End(xlUp).Row).AutoFit 今後全行設定する場合 Rows.AutoFitで設定してみます。
ttyp03

2020/09/25 04:38 編集

> 多少多めに行高さを設定するというやり方 こんな感じですかね。 1行ずつ行うと時間がかかるので、実行中は画面更新をオフにしています。 以下の例ではAutoFitした行高にプラス10ポイントしています。 Dim r As Long Application.ScreenUpdating = False For r = 5 To Cells(Rows.Count, 1).End(xlUp).Row Rows(r).AutoFit Rows(r).RowHeight = Rows(r).RowHeight + 10 Next Application.ScreenUpdating = True
chaaan43

2020/09/25 05:53

ご教授いただきありがとうございます。 Rows(r).AutoFit Rows(r).RowHeight = Rows(r).RowHeight + 10 という流れについて、とても勉強になりました。  上記にて、私のやりたい内容を達成することができました。 私の知識不足で、大変お騒がせしてしまい申し訳ございませんでした。 今後も少しずつ勉強していこうと思います。 ありがとうございました。
guest

0

ソースの提示がないのでコードが書けませんが

文字数が多い方
行高

この場合列の幅、行の高さどちらか判りませんが

列幅でしたら、
セルから一番文字数が多い行を選択(セルに複数行入っている事も考慮して検索)して
autofitすればサイズは合いますよ。

行幅は同じ検索をして対象の1行だけautofitしてから行の高さを取得
あとは残りの行すべてに取得した行の高さを設定すれば良いだけです。

投稿2020/09/24 23:09

kuma_kuma_

総合スコア2506

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問