質問: 使用しているのはExcel2002です。 普通、「シート全選択→日本語フォント指定→英語フォント指定」とすると それぞれがちゃんと設定されますょね? でも英語フォントを指定した時点で、日本語フォントが勝手にMS Pゴシックに換わってしまうセルがあったんです。 色々と考えた結果、日本語フォントが指定されないのは、 VLOOKUP関数で文字列を引っ張ってきているセルのようです。 同一シート内でも、直接文字を打ち込んだセルは ちゃんと日本語/英語それぞれ指定どおりのフォントになりました。 関数で引っ張ってきたセルは 日本語/英語それぞれのフォントを指定することは出来ないんでしょうか? 何か方法がありましたら教えてください。
回答: 何回か同じような質問を見たような・・・・? 当方、Excel97のため確実な確認はできませんが、似たような状態にはなりました。 >それぞれがちゃんと設定されますょね? 日本語フォントや英語フォントがどのようなフォントか分からないのでなんともいえませんが・・・ 思うに、Vlookupを使った場合、引数のセルの値が変更になってもVlookupを使ったセルの変更が検知されないからではないでしょうか。実際、Worksheet_Changeイベントでは検知できませんでした。 とすれば、Vlookupだけではなく、Offsetなどの関数も同じ状態になります。(確認しました) セルの変更の都度、Book全体を調べにいく方法もありますが、あまり効率的とはいえないでしょう。 そうなれが、セルの変更都度、フォントを変更するのではなく意識的にフォントを設定したらどうでしょうか。 下のマクロは、実行すればアクティブシートのフォントを指定したフォントに設定します。 設定する範囲が限られていれば、その範囲を書けばいいでしょう。ご参考に。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。 出てきたコードウインドウに下記マクロを貼り付けます。 フォントは指定して下さい。 ↓ Sub FontSet() Dim Adr As String 'アクティブシートの使用範囲 Dim rg As Range 'セル Dim txt As String 'セルの内容 Dim L As Integer '文字カウンタ Dim Eigo As Boolean '英語? '使用範囲を調べる Adr = ActiveSheet.UsedRange.Address For Each rg In ActiveSheet.Range(Adr) txt = rg.Text If txt <> "" Then '英語かどうか調べる Eigo = True For L = 1 To Len(txt) Select Case Mid(txt, L, 1) Case "0" To "9" '左は英語とした Case "A" To "Z" '左は英語とした Case "a" To "z" '左は英語とした Case ".", "-" '左は英語とした(このように英語とする文字を設定します) Case Else Eigo = False End Select Next 'フォントをセット If Eigo Then rg.Font.Name = "Century" '英語フォントを指定 Else rg.Font.Name = "HG正楷書体-PRO" '日本語フォントを指定 End If End If Next End Sub