- ベストアンサー
エクセルでフォントサイズを自動で変更する方法
- エクセルでインデックスラベルを作成する際、文字数によってフォントサイズを自動で変更したいです。
- 現在は手動でサイズ変更をしているため、時間がかかっています。
- もし不可能な場合は、ショートカットキーを使ってサイズ変更する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
条件にしたがってマクロを修正してみました。 以下のマクロに置きかえていただけますか? 1シート目のB列、F列、J列、N列の偶数行のセルに文字を入力したとき、1シート目と2シート目の両方のセルのサイズを変更するようにしています。最後から3行目の"Sheet2"のところだけを、実際の2シート目のシート名に変えてください。 3シート目と4シート目も同様です。シート名だけを変更すれば多分うまくいくかと思います。 Private Sub Worksheet_Change(ByVal Target As Range) Dim T As Range, S As Integer Set T = Target.Cells(1, 1) If T.Row Mod 2 <> 0 Then Exit Sub Select Case T.Column Case 2, 6, 10, 14 'B列、F列、J列、N列 Select Case Len(T.Value) Case Is <= 3 S = 11 Case 4 S = 10 Case 5 S = 9 Case Else S = 8 End Select T.Font.Size = S Worksheets("Sheet2").Range(T.Address).Font.Size = S End Select End Sub
その他の回答 (4)
- ham_kamo
- ベストアンサー率55% (659/1197)
No.2です。まず最初に確認しておきたいのですが、3シート~4シートというのは入力するシートでしょうか。それとも印刷するシートでしょうか。それによって、その他の質問の回答内容、マクロの内容も変わってくるので、それを教えていただけますか? それでは改めて、 > 他のどのセルも対応するようにするにはどのようにすればいいのでしょうか? ですが、罫線つきのシートと印刷するシートで対応するセルが1組、というのでなく、複数あるわけですよね。 そうなるとちょっと処理は複雑になりますが、1シート目のセルと2シート目のセルに規則性があれば割と簡単にできると思います。(例えば同じセル番地だとか、1シート目の3つ右のセルだとか) とりあえず、 ・入力する1シート目のセル番地(全て、あるいは規則性があるならその規則) ・それに対応する2シート目のセル番地(上記のセル番地と何らかの規則性があるなら、その規則) を教えていただけますか? (ここで上に出てくる3シート目、4シート目というのが上のどちらになるかで処理は変わってきます。3シート目、4シート目がからんでくるのであれば、1シート目、2シート目との関連も補足願えますか?) それから、 > それから、入力したシートの文字も変えることはできますか というのは、入力したシートの文字の大きさも同じ大きさに変える、ということでしょうか。 それはもちろんできますが、マクロに手が入るので、上記の事項を補足していただいてから、入力したシートの変更も含めてマクロを修正し、一緒に回答しようかと思います。(先ほど回答したマクロを修正しても、多分再度修正し直す必要がでてきそうなので)
補足
お手数をおかけする聞き方をしてしまいすいません。 >とりあえず、 >・入力する1シート目のセル番地(全て、あるいは規則性があるならその規則) 入力セルは[B2][F2][J2][N2]そして[B4][F4]・・・という風に B,F,J,Nの偶数行という感じで続いていきます。 >・それに対応する2シート目のセル番地(上記のセル番地と何らかの規則性があるなら、その規則)を教えていただけますか? 2シート目はすべて1シートと同じセル番地になります。 > それから、入力したシートの文字も変えることはできますか >というのは、入力したシートの文字の大きさも同じ大きさに変える、ということでしょうか。 はい。1シート目に入力して出来上がりのラベルを確認して、その中の文字のみが2シート目に反映されて、枠付のラベルに印刷できればと思っています。 ※3シートと4シートの関係は、1シートと2シートの関係と同じです。色別に2種類のラベルを作成するために分けました。 説明が不十分で何度もご面倒をおかけしてすいません。
- ham_kamo
- ベストアンサー率55% (659/1197)
No.2です。すみません、1シート目と2シート目が逆でしたね。 それで、うまくいかないとのことですが、まず前の回答の > 2シート目のシートタブを右クリックして「コードの表示」を選択すると、 この部分が、「1シート目のシートタブを」になります。文字を入力するシートです。 それから、VBAの修正点ですが、4行目の、 If T.Address(False, False) <> "B2" Then Exit Sub ここの B2 を、1シート目の文字を入力するセル番地に書き換えてください。 そしてその次の行の、 With Worksheets("Sheet1").Range("A1").Font の Sheet1 を、印刷するシート名(2シート目のシート名)に変えて、さらに A1 の部分を、フォントサイズを変えたいセル番地に変えてみてください。 うまくいかないようでしたら、また補足をお願いします。
お礼
すいません。補足の質問で、3シート~4シートへの部分はできました。 先程やってみてならなかったので質問したのですが、シート名が間違っていたようで、直したらできました。 その他の2つの質問についてご回答いただければうれしいです。 よろしくお願いします。
補足
早々のご回答ありがとうございます。 B2のセルはうまくいきました。 他のどのセルも対応するようにするにはどのようにすればいいのでしょうか? また、3シート~4シートも同じようにしたいのですが、シート名の部分をかえるだけでいいのでしょうか? それから、入力したシートの文字も変えることはできますか? いくつも質問してすいません。できる部分だけのご回答でかまいませんので、よろしくお願いします。
- ham_kamo
- ベストアンサー率55% (659/1197)
「2シート目に参照して」という部分の意味がちょっとよくわかりませんが、2シート目を参照して、ということでしょうか。 2シート目にデータを入力すると、1シート目のセルに反映されて、そのラベルの文字の大きさを自動的に調整したい、ということだと解釈して、マクロを書いてみました。 2シート目のシートタブを右クリックして「コードの表示」を選択すると、VBAの画面が開くので、右の白い画面に以下のマクロをコピーして貼り付けてください。その際、このマクロでは「2シート目のB2に文字を入力すると、1シート目のA1の文字の大きさを変更する」という仕様にしているので、マクロの中の"B2"と"A1"というセル番地を実際のシート構成にあわせて変更してください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim T As Range Set T = Target.Cells(1, 1) If T.Address(False, False) <> "B2" Then Exit Sub With Worksheets("Sheet1").Range("A1").Font Select Case Len(T.Value) Case Is <= 3 .Size = 11 Case 4 .Size = 10 Case 5 .Size = 9 Case Else .Size = 8 End Select End With End Sub 貼り付けたらVBAの画面は閉じてかまいません。2シート目の指定したセルに入力すると、そのセルを参照している1シート目のセルのフォントサイズが文字数に応じて変わります。
補足
ご回答ありがとうございます。説明不足ですいません。 ラベル自体に枠があるので、それをイメージして入力できるように 罫線等で実際のラベルのように1シート目につくっていて、1シート目に入力をします。 ラベルには枠があり印刷する時は文字のみ印刷されればいいので、 2シート目にはその入力した文字のみが表示されて印刷するようになっています。 ですので、VBAのシートの1と2を逆にすればいいのだと思うのですが、うまくできません。 セルの番地もシート1のB2がシート2のB2になります。 セルの番地を実際のシート構成にあわせるということですが、A1のところをB2にすれば他のセルも対応するんでしょうか? 初歩的なことですいません。VBAが全くわからないので。
- meron_
- ベストアンサー率40% (51/127)
マクロならできますが、どうですか?
お礼
説明不足でご面倒をおかけしたうえ、何度も教えていただきありがとうございます。 おかげさまで、うまくいきました。 私もマクロを勉強しないといけないな、と思わされました。 本当にありがとうございました。