• ベストアンサー

Excelでセルのフォントを自動で変更したい

Excelで罫線でかこまれた用紙に印字する際、下記のようなことができると作業が楽になります。 シート1には印刷用フォーマット(行幅列幅ともに固定)があり、シート2には(VLOOKUPでシート1の該当セルに参照されるための)データが入っています。 例: シート2のA1(製品名)の内容はシート1のA1にVLOOKUPで参照されるとして… シート2のA1に入れた文字数が既定を超えると、文字が切れた状態で印字がなされます。 現在はそれを避けるために、文字が収まるOR収まらないの判断を(当たりまえですが)人の目でおこなっています。 シート2で入力後にシート1を開いてその都度フォントサイズを変更して印刷。 入力→人間の目で判断→フォントサイズの変更→印刷、入力→また人間の目で判断→フォントサイズの変更→印刷、入力→またまた人間の目で・・・の繰り返しです。 作業効率のわるさを感じますし、印刷用のフォーマット(シート1)とデータ入力(シート2)が別々なので、シート間を行き来するのも手間なのです。 入力した桁数が既定を超えたとき、列幅や段組を変えずにフォントサイズだけを小さくし、次に既定内の文字が入ったときはそれに対応するフォントになる、というようなことを自動でおこない、現在の当たりまえを変えたいのです。 半角を1単位=1桁 例: シート2のA1(製品名)の内容はシート1のA1にVLOOKUPで参照されるとしてシート1のA1のフォントサイズが 【例 1】25桁以下ならフォントサイズ16 【例 2】26桁以上30桁以下ならフォントサイズ14 【例 3】31桁以上ならフォントサイズ12 というような設定を自動でおこなうことは可能でしょうか。 過去の質問も検索しましたが、さがし方がうまくないようで、道に迷いこの時間です…。 VBAのことはよくわかりません。 が、この作業が楽になるならAlt+F11で貼り付けますので、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。Wendy02です。 >書式が文字列になるようで、数式の結果でなく式そのものがただの文字列で返されてしまいます。 それは、一種の仕様ですね。 参照元の書式の「文字列」が、被参照側の書式に延長されてしまう現象です。VBAの問題ではありませんが、VBAで処理することは可能です。 その現象を実現させてみます。  例えば、書式を「文字列」にして、A1に「あ」と入れます。 次に、B1 に、=B1 と入れますと、一度は、「あ」と出ますが、その式の部分を、ファンクションキーの[F2]を押して、[Enter]を入れると、=A1 となってしまいます。 その時に、セルの書式設定の表示形式 タブをみると、B1 のところは、「文字列」となっているはずです。書式が、延長されました。 また、A2 に、=A1 とやってみても同じようになるはずです。 つまり、参照元の書式の「文字列」を使ったセルを、式の参照させるということが問題なのです。書式の文字列は、ある意味でトラブルメーカーのようなもので、その代用としては、「'」という、Prefix(接頭辞)を使うのですが、これも、根本的に解決する方法ではありません。 これは、どなたのExcelでもある現象かと思います。もう一度、数式が書式「文字列」になってしまったものを、こまめに標準などに戻していただく以外は、その直す方法は、今のところわかりません。 ただ、VBAのコードですが、そういう問題に対処するためには、以下のようなものになります。該当するセルを1つずつ、標準書式に戻しています。 '---------------------------------------------------- Sub AlternateFontSizesR()   '数式で文字列になってしまう現象に対して修正を加える   Dim rng As Range   Dim c As Range     Set rng = Selection   Application.ScreenUpdating = False   For Each c In rng    If c.Text Like "=*" Or c.FormulaLocal Like "=*" Then      c.WrapText = False      c.NumberFormat = "General"      c.FormulaLocal = c.FormulaLocal    Select Case LenB(StrConv(c.Text, vbFromUnicode))    'フォントの調整はここでしてください。      Case Is <= 25 '25文字以下は、Font16       'c.ShrinkToFit = True        c.Font.Size = 16      Case Is >= 26       c.ShrinkToFit = True '縮小    End Select    ' c.FormulaLocal = c.FormulaLocal    End If   Next c   Set SpRng = Nothing: Set rng = Nothing   Application.ScreenUpdating = True   MsgBox "終了しました!" End Sub '----------------------------------------------------

situmon10hanako
質問者

お礼

こんばんは。 Wendy02さん、ご回答ありがとうございます。 Wendy02さんの説明で、Excelが壊れていなかったことに安堵するとともに、これまでセル参照機能を使ってよくこの問題にひっかからなかったもんだなぁ…などとあらためて思いました。 その程度の使い方しかしていないのですが…。 書式設定のなかに「文字列」があるにもかかわらず、わざわざセルの頭に「'」を入れて文字列にさせる「'」の役目?もなんとなくわかりました。 ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 昨日から、しばらく考えてみました。なかなか、満足させられる形にするのは難しいような気がします。理屈やロジックでは割り切れない部分があります。 前のお二方がおっしゃるように、「縮小して全体を表示する」は、確かに有効なのですが、いずれにしても、いつも変るものに対して、それは手作業ではとても面倒だ、というのが、ご質問のご主旨だと承りましたし、それはごもっともだと思います。 また、連結セルなどがある場合は、また、以下の条件が変わってくるような気がしますが、コードを考えてみました。 もし、「縮小して全体を表示する」にするようでしたら、以下の間を、    Select Case LenB(StrConv(c.Text, vbFromUnicode))    'フォントの調整はここでしてください。      Case Is <= 25       c.Font.Size = 16      Case 26 To 30       c.Font.Size = 14      Case Is >= 31       c.Font.Size = 12    End Select を以下の  c.ShrinkToFit = True だけにすればよいと思います。 フォーム・ツールのボタンで以下を登録してください。 以下のコードは、数式にしか働きません。 '標準モジュール '------------------------------------------- Sub AlternateFontSizes()   '数式の戻り値のフォントサイズをフォントの桁により変更する   Dim rng As Range   Dim SpRng As Range   Dim c As Range     Set rng = ActiveSheet.UsedRange   On Error Resume Next   Set SpRng = rng.SpecialCells(xlCellTypeFormulas)   If SpRng Is Nothing Then Exit Sub   On Error GoTo 0     Application.ScreenUpdating = False   For Each c In SpRng.Cells      c.WrapText = False '-----------交換場所-----------------------    Select Case LenB(StrConv(c.Text, vbFromUnicode))    'フォントの調整はここでしてください。      Case Is <= 25       c.Font.Size = 16      Case 26 To 30       c.Font.Size = 14      Case Is >= 31       c.Font.Size = 12    End Select '------------------------------------------   Next c   Set SpRng = Nothing: Set rng = Nothing   Application.ScreenUpdating = True   MsgBox "終了しました!" End Sub 'おまけ(場合によっては必要なはずです) Sub RecoverFontSizes()   '数式の戻り値のフォントサイズを戻す   Dim rng As Range   Dim SpRng As Range   Dim RegFontSize As Double   Dim c As Range   Set rng = ActiveSheet.UsedRange   RegFontSize = ActiveWorkbook.Styles("Normal").Font.Size   On Error Resume Next   Set SpRng = rng.SpecialCells(xlCellTypeFormulas)   If Not SpRng Is Nothing Then        If MsgBox("数式のフォントの大きさを標準に戻しますがよろしいですか?" & vbCrLf & _      " フォントの標準 : " & CStr(RegFontSize), vbOKCancel) = vbOK Then      ActiveSheet.Cells.Rows.RowHeight = ActiveSheet.StandardHeight    End If        On Error GoTo 0        Application.ScreenUpdating = False    For Each c In SpRng.Cells      c.Font.Size = RegFontSize    Next c    Application.ScreenUpdating = True    Else    If MsgBox("このシートには数式がありませんので、セルの全体を標準に戻しますがよろしいですか?" & vbCrLf & _      " 標準のフォントサイズ : " & CStr(RegFontSize), vbOKCancel) = vbOK Then      Application.ScreenUpdating = False       ActiveSheet.Cells.Font.Size = RegFontSize      Application.ScreenUpdating = True    End If   End If     If MsgBox("セルの高さを標準に戻しますがよろしいですか?" & vbCrLf & _    " 標準の高さ : " & CStr(ActiveSheet.StandardHeight), vbOKCancel) = vbOK Then    ActiveSheet.Cells.Rows.RowHeight = ActiveSheet.StandardHeight   End If   Set SpRng = Nothing: Set rng = Nothing   MsgBox "終了しました。!" End Sub

situmon10hanako
質問者

補足

長い構文を考えてくださりありがとうございました。 また、文章から操作過程での心の嘆きを汲みとってくださった、Wendy02さんの細やかさがうかがわれました。 下記の通り、質問は縮小して解決になったのですが、Wendy02さんのVBAも貼り付けて試したところ、疑問が浮かびました。 VBAが書かれているシートでは数式が入力してあるセルをダブルクリックすると、書式が文字列になるようで、数式の結果でなく式そのものがただの文字列で返されてしまいます。 私のパソコンだけでしょうか??? かれこれ2時間くらい格闘しているのですが、また迷子になってます。 簡単に考えるため 【シート1】A1に=B1と数式を入れて、B1には「あ」と入れたもの 【シート2】A1に=B1と数式を入れて、B1には「あ」と入れたもの & ALT+F11で上記VBAを貼り付ける シート2のA1をダブルクリックして編集可能にしたあとEnterを押すと「あ」が表示されてるのに、シート1では同じ操作で「=B1」が表示されます。 セルの書式設定の分類も、シート2の方は標準のままなのに、シート1ではどこも選択されないのです。 本題からかなり逸れた質問なのですが、VBAが関わるとそうなるものなのか、私の勘違いなのか、無知なクセにALT+F11をいじってExcelがこわれたのか…もうよくわからないのです。 これをご覧になってご回答いただけるようでしたら、急ぎませんので返信をよろしくお願いします。

noname#204879
noname#204879
回答No.2

[書式]→[セル]→[配置]の“縮小して全体を表示する”を適用するのが簡単かと。 これだと、実際に印刷させると右端が途切れる、というような いわゆるプリンタドライバとの相性問題も発生しません。

situmon10hanako
質問者

お礼

早速の回答ありがとうございます。 この機能をすっかり忘れていました。 知識のつまった過去回答から似たものをさがして所々手を加えれば解決するかもしれない、そう考えるあまり煮詰まって基本を見落としていました。 「縮小して全体を表示する」は活用したことがあります。 肩が張っていました。 解決です。 ありがとうございます。

  • te12889
  • ベストアンサー率36% (715/1959)
回答No.1

「セルの書式設定」の「配置」タブに「縮小して全体を表示する」ってのがありますが、お試しなったことはありますか?

参考URL:
http://www.jpita.or.jp/hpv3/ziten/mokutekibetu/ex_60.html
situmon10hanako
質問者

お礼

早速の回答ありがとうございます。 それが使えたのですね。 知識のつまった過去回答から似たものをさがして所々手を加えれば解決するかもしれない、そう考えるあまり煮詰まって基本を見落としていました。 「縮小して全体を表示する」は活用したことがあります。 肩が張っていました。 解決です。 ありがとうございます。

関連するQ&A

  • エクセル フォントサイズ変更

    エクセルでインデックスラベルを作成しています。 1シート目に罫線等でラベルの様式を作り、それに文字データを入れ、 2シート目に参照して文字のみ印刷するようにしています。 そこで、文字数が3~8文字ぐらいなのですが、 文字数によってフォントサイズを自動で変更できないかと思っています。 1行に入れる文字数は5文字で、それ以上はAlt改行で2行にしており、 セル内には収まっているので「折り返して全体を表示」や「縮小して全体を表示」ではなく、フォントサイズを変更したいです。 例えば、3文字は11、4文字は10、5文字は9、それ以上の2行になるものは8という風に、 入力すると自動でそのサイズになってほしいです。 その都度サイズ変更するのはかなり手間ですし、参照しているところには、 サイズ変更はされないのでとても時間がかかります。 もし、不可能なのであれば、ショートカットキー(Ctrl+△)などで、 サイズ変更するという方法もあるようなのですが、やり方がわかりません。 素人ですので、あまり難しいことはわかりませんが、ご指導よろしくお願いします。

  • エクセル、シート参照時のセルのフォントサイズについて質問します。

    エクセルについて教えて下さい。 VLOOKUP関数を使ってシートAのセルにシートBの表中のデータを表示したいのですが、シートAのセルの大きさは一定なのに対して、シートBの表中の文字数がまちまちなので、検索するデータによって、表示がシートAのセルの半分だったり、はみ出したりします。これでは見栄えが悪いので、シートAのセルに文字がぴったりと収まるようにしたいのです。シートAのセルのフォントサイズを変更するとその時はいいのですが、シートBの表中のデータがすべて同じサイズになってしまいます。そこで、シートBの表中のフォントの大きさを個々に変えてみたのですが、それがシートAのセルに反映されません。どうすればいいですか?説明が下手で上手く状況がお伝えできたか心許ないですが、よろしくお願いします。

  • エクセルで5セルごとに参照したい。

    エクセルで、 あいうえおかきく...等とセルが一列に並んでいる時に、 そのセルへ式を使って入力するのに参照したい別の行があります。 ア□□□□イ□□□□ウ□□□□…という風に、5セルごとに参照したい列があります。 セルあ「VLOOKUP($A1,Sheet1!$A:$Z,1,FALSE)」 セルい「VLOOKUP($A2,Sheet1!$A:$Z,6,FALSE)」 セルう「VLOOKUP($A2,Sheet1!$A:$Z,11,FALSE)」 上のような感じで、でもいちいち数字を入力せずに、セルの左下を引っ張ったらうまく参照されるような式、ないでしょうか。。。

  • フォントサイズを別のセルに入力された数字としたい 【エクセル】

    エクセル2003での質問ですが、例として セルA1(リンゴ) A2(みかん) と文字が入力されています セルB1(10)   B2(20)  とある計算をした数値が入力されています。たとえば、売れた個数などと思って下さい。 やりたいことは、セルA1, A2に入力されている文字のフォントサイズをB1, B2に入力された数値に自動的にしたいのです。 売れた個数(Bセルの数値)によって文字のサイズを変え、視覚的に強調したいのです。 つまり、 リンゴ(フォントサイズ 10) みかん(フォントサイズ 20) 自分で関数などを調べてみたのですが、出来る方法がわかりませんでした。 簡単にできる方法を希望です。マクロなどは詳しくはありませんがこれを機会に勉強してみようと思います。もし可能であれば教えて下さい。よろしくお願いします。

  • Excelのフォント&フォントサイズが化けてしまう・・・

    初心者です。大変困っております。教えて下さい。 人から送られてきたデータ(エクセル)が2シートあります。 1つ目のシートも、2つ目のシートも、「Osaka」というフォントになっており、 フォントのサイズは10です。 ところが、1つ目のシートに入力してあるものを2つ目のシートにコピー&ペーストすると、 なぜかその文字のフォントは「明朝・11」に変化してしまいます。 さらに不思議なのは、2枚目のシートにキーボード入力しようとすると、 今度は「MS Pゴシック・10」に変化してしまいます。 これは一体なぜなのでしょうか? どうすれば良いのでしょうか? おわかりになる方、どうぞよろしくお願いいたします。

  • エクセルで、自動的にフォントサイズを変更する式

    エクセルで、あるセルに、 「A」という文字が入っているときは標準の大きさのまま、 何かの数字(1~50000ぐらいのもの)を入力したら、 フォントサイズを自動的に大きいものに変更することは出来るのでしょうか。 ご存知の方、教えてください! 宜しくお願いします。

  • エクセルのVLOOKUP関数について

    エクセルのシート(1)に組合員コード(7桁),氏名,商品,数量・・・が入力してあって、列を挿入し、その組合員コードの左3桁を表示するLEFTの文字列関数を入力します。 それによって3桁が表示され、その3桁のコードは、支店コードを意味するので、シート(2)に支店コード、支店名が入力してあるのでそこから参照するようにシート(1)の3桁が表示されている隣に新たに列を挿入し、シート(2)の支店コードから支店名を引き出すようにVLOOKUP関数を入力したら、「N#A」という表示が出て支店名が表示されません。 LEFT関数によって表示された文字列だと「N#A」で支店名が表示されないのですが、自分で3桁の数字を入力すると支店名が表示されます。 3桁の文字列の結果の値だけをコピーしても、「N#A」が表示され、支店名が表示されません。 文字列関数によって表示された結果から、VLOOKUPで参照は出来ないのでしょうか? 1つずつ自分で数字を入力するしかないのでしょうか? 他に何か別の方法でも構いませんので、教えていただけないでしょうか?

  • Excelのセルのフォントサイズを自動調整

    Excel97VBAの質問です。 セルの値が長すぎて表示しきれない場合は、フォントサイズを調整したい。 Sub Macro1() With Sheet1 .Columns("A").ColumnWidth = 1 .Range("A1").Value = 1 .Range("A2").Value = 12 .Range("A3").Value = 123 .Range("A4").Value = 1234 End With End Sub この場合、A2~A4の表示が潰れます。 フォントサイズを例えば、 Sub Macro2() .Range("A2").Font.Size = 7 .Range("A3").Font.Size = 5 .Range("A4").Font.Size = 3 End Sub と設定すれば潰れずに値が表示されます。 このようなフォントサイズの最適値を自動的に設定したい。 よろしくご指導お願いします。

  • エクセル関数について(フォントサイズ変更)

    フォントサイズを10に設定していたとします。 セルに「ああ」文字を2文字入力した場合、フォントサイズは設定のままで、「あああ」と3文字入力した場合、フォントサイズを8にしたい時は、どのようにすればいいのでしょうか。 よろしくお願いします。

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

専門家に質問してみよう