Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12408 / 13646 ツリー ←次へ | 前へ→

【10612】上書き時のフォント変更について 向井 04/2/3(火) 17:06 質問
【10618】Re:上書き時のフォント変更について INA 04/2/3(火) 18:08 回答
【10630】Re:上書き時のフォント変更について 向井 04/2/4(水) 9:49 質問
【10633】Re:上書き時のフォント変更について つん 04/2/4(水) 13:01 発言
【10634】Re:上書き時のフォント変更について INA 04/2/4(水) 14:06 回答
【10636】Re:上書き時のフォント変更について つん 04/2/4(水) 14:33 発言
【10637】Re:上書き時のフォント変更について INA 04/2/4(水) 14:36 回答
【10638】Re:上書き時のフォント変更について つん 04/2/4(水) 14:42 回答
【10639】Re:上書き時のフォント変更について Asaki 04/2/4(水) 15:24 発言
【10640】Re:上書き時のフォント変更について つん 04/2/4(水) 15:51 発言
【10641】Re:上書き時のフォント変更について INA 04/2/4(水) 16:12 回答
【10643】Re:上書き時のフォント変更について Jカーター 04/2/4(水) 16:46 発言
【10650】未だにしつこく・・・ つん 04/2/5(木) 10:37 回答
【10652】Re:未だにしつこく・・・ でん 04/2/5(木) 10:53 発言
【10654】Re:未だにしつこく・・・ Jaka 04/2/5(木) 13:29 発言
【10655】でんさん、Jakaさん つん 04/2/5(木) 14:05 発言
【10657】Re:でんさん、Jakaさん こうちゃん 04/2/5(木) 16:12 発言
【10675】Re:でんさん、Jakaさん 向井 04/2/5(木) 18:37 お礼

【10612】上書き時のフォント変更について
質問  向井 E-MAIL  - 04/2/3(火) 17:06 -

引用なし
パスワード
   エクセルシートに

明朝で入力されているデータの

上書き入力した場合,

そのセルの

フォントが自動的にゴシックになる

方法があれば教えてください。

【10618】Re:上書き時のフォント変更について
回答  INA  - 04/2/3(火) 18:08 -

引用なし
パスワード
   チェンジイベントでフォント名を取得して、
もし、明朝だったらゴシックに変更するようにしては如何でしょうか?

【10630】Re:上書き時のフォント変更について
質問  向井 E-MAIL  - 04/2/4(水) 9:49 -

引用なし
パスワード
   INAさん早速有難うございます。
私は、マクロの詳しいことがよく理解していませんので
よろしければもう少し簡単におしえていただけないでしょうか。


▼INA さん:
>チェンジイベントでフォント名を取得して、
>もし、明朝だったらゴシックに変更するようにしては如何でしょうか?

【10633】Re:上書き時のフォント変更について
発言  つん E-MAIL  - 04/2/4(水) 13:01 -

引用なし
パスワード
   向井 さん、INAさんこんにちは。

>私は、マクロの詳しいことがよく理解していませんので
>よろしければもう少し簡単におしえていただけないでしょうか。

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If Target.Count = 1 Then
      If .Value <> "" And .Font.Name = "MS 明朝" Then
        .Font.Name = "MS ゴシック"
      End If
    End If
  End With
End Sub

こんな感じかなあ?
でも、これだと、「上書き」のみじゃなくて、空白セルに入力したときも
通ってしまいますね(^^;
これじゃ、ダメか・・・・

【10634】Re:上書き時のフォント変更について
回答  INA  - 04/2/4(水) 14:06 -

引用なし
パスワード
   >でも、これだと、「上書き」のみじゃなくて、空白セルに入力したときも
>通ってしまいますね(^^;

If Target.Value = "" Then Exit Sub
を最初に追加すれば大丈夫かな・・・?

【10636】Re:上書き時のフォント変更について
発言  つん E-MAIL  - 04/2/4(水) 14:33 -

引用なし
パスワード
   Worksheet_Changeイベントは、セルに値が入力された、
あるいは、値が削除された直後に発生するので、
If Target.Value = "" Then Exit Sub
が通るのは、「値が削除された」ときだけのようです。
なので、入力される前のセルの状態を取得するのは、
Worksheet_Change内では無理なような感じです。
なんか良い案あるかな?

【10637】Re:上書き時のフォント変更について
回答  INA  - 04/2/4(水) 14:36 -

引用なし
パスワード
   あー確かにそうですね。ちょっと勘違いしました。(^_^;)

【10638】Re:上書き時のフォント変更について
回答  つん E-MAIL  - 04/2/4(水) 14:42 -

引用なし
パスワード
   こんなんではどうでしょうか?

'**標準モジュール
Public blnFlag As Boolean

'**ワークシートモジュール
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Target
    If .Value = "" Then
      blnFlag = False
    Else
      blnFlag = True
    End If
  End With
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
  If blnFlag = True Then
    With Target
      If Target.Count = 1 Then
        If .Value <> "" And .Font.Name = "MS 明朝" Then
          .Font.Name = "MS ゴシック"
        End If
      End If
    End With
  End If
End Sub

一応上手く動作してるんだけど、なんか落とし穴があるような気もする・・・
どうでしょうか?

【10639】Re:上書き時のフォント変更について
発言  Asaki  - 04/2/4(水) 15:24 -

引用なし
パスワード
   みなさま こんにちは。
後ろから失礼いたします。

>一応上手く動作してるんだけど、なんか落とし穴があるような気もする・・・

SelectionChange イベントで Target が複数セルになると、型が一致しませんのエラーがでましたです。

似たような事をやったことがありますが、結局、退避用のシートを予め用意しておいて、
SelectionChange イベントで退避用のシートにデータ書き写し
Change イベントで入力のシートと退避用のシートの同位置のセルの値を比較
という、とってもまどろっこしいことになってしまいました。

もっとスマートな方法があるような気もするのですが。。。

【10640】Re:上書き時のフォント変更について
発言  つん E-MAIL  - 04/2/4(水) 15:51 -

引用なし
パスワード
   ▼Asaki さん、こんにちは(^.^)

>SelectionChange イベントで Target が複数セルになると、型が一致しませんのエラーがでましたです。

ありゃ・・・Changeイベントでも同じエラーが出たので、
そちらは、「If Target.Count = 1 Then」で回避させてたのですが、
SelectionChangeイベントでも同じようにしとけばいいかな?

>もっとスマートな方法があるような気もするのですが。。。

うーん、誰かいい案知らないかな?
なんか、無駄なレスばかりですみません(^^;

【10641】Re:上書き時のフォント変更について
回答  INA  - 04/2/4(水) 16:12 -

引用なし
パスワード
   >SelectionChange イベントで Target が複数セルになると、
>型が一致しませんのエラーがでましたです。

未確認ですけど、For Each c In Target で回避できませんか・・?

【10643】Re:上書き時のフォント変更について
発言  Jカーター  - 04/2/4(水) 16:46 -

引用なし
パスワード
   おじゃまします。

application.Undo
を使って元に戻すとか?

元に戻す動作もイベントが発生するので注意が必要かもしれません。


違ったらすいません。

【10650】未だにしつこく・・・
回答  つん E-MAIL  - 04/2/5(木) 10:37 -

引用なし
パスワード
   おはようございます。

なんかもう向井さん見てなさそうだし、
適切かどうかわからんコードなんだけど、
まだ、しつこくいじってたりして・・・

>未確認ですけど、For Each c In Target で回避できませんか・・?

こんなんしてみました。

'↓別に標準モジュールにすることなかったですね(^^;
  なので、ワークシートモジュールの先頭に
Private blnFlag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  If blnFlag = True Then
    For Each r In Target
      With r
        If .Value <> "" And .Font.Name = "MS 明朝" Then
          .Font.Name = "MS ゴシック"
        End If
      End With
    Next r
  End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Cells(1, 1).Value = "" Then
    blnFlag = False
  Else
    blnFlag = True
  End If
End Sub

SelectionChangeは、とりあえず、先頭のセルだけチェックしてみました。
誰か見てくれるだろうか・・・・

【10652】Re:未だにしつこく・・・
発言  でん  - 04/2/5(木) 10:53 -

引用なし
パスワード
   つんさん、こんにちは。

でんと申します。

>誰か見てくれるだろうか・・・・
見てますよ!

私のPCでも動きました。

また色々教えて下さいね。
頑張るぞ〜!

ではでは。

【10654】Re:未だにしつこく・・・
発言  Jaka  - 04/2/5(木) 13:29 -

引用なし
パスワード
   全然質問を読んでいませんけど、これ使えません?
これなら複数のセルを変えられます。
でも、取得等はダメみたいです

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
   'MsgBox Target.Cells.Font.Name  'ダメ使えません。
   MsgBox ActiveCell.Font.Name
   Target.Cells.Font.Name = "MS ゴシック"
   Target.Cells.Font.ColorIndex = 3
End Sub


まるっきり別な話ですが、範囲を小さくしてテストしている所が、かわゆくて笑えました。
For Each CL In Range("C1:D20")
  ↓
For Each CL In Range("C1:D3")

【10655】でんさん、Jakaさん
発言  つん E-MAIL  - 04/2/5(木) 14:05 -

引用なし
パスワード
   でんさん、こんにちは〜

見てくれてありがとー
私も、万年初心者なんで、いつも皆さんから教わっています。
お互い頑張りましょー!

Jaka さん、こんちゃ。

>全然質問を読んでいませんけど、これ使えません?
>これなら複数のセルを変えられます。
>でも、取得等はダメみたいです
>
>Private Sub Worksheet_Change(ByVal Target As Excel.Range)
>   'MsgBox Target.Cells.Font.Name  'ダメ使えません。
>   MsgBox ActiveCell.Font.Name
>   Target.Cells.Font.Name = "MS ゴシック"
>   Target.Cells.Font.ColorIndex = 3
>End Sub
>
「Target.Cells.」やったら、一度に設定出来るんですね。
でも、「元のフォントが明朝だったら」という変更・・・のようなんで、
やっぱり、1つずつフォント名を取得しながらしないとダメなんじゃないかなー?
向井さん出てきてくんないから、わかんないけど。

>まるっきり別な話ですが、範囲を小さくしてテストしている所が、かわゆくて笑えました。
>For Each CL In Range("C1:D20")
>  ↓
>For Each CL In Range("C1:D3")

え?そ、それって、ボクのんでした?
そーいえば、そんなことしたような(^^;
だって、範囲が広かったら、テストデータ入力すんの面倒で・・・

【10657】Re:でんさん、Jakaさん
発言  こうちゃん E-MAIL  - 04/2/5(木) 16:12 -

引用なし
パスワード
   つんさん、みなさん、こんにちは

>え?そ、それって、ボクのんでした?

こんなんみたら、男かいな?って疑われるし(^^;)

#回答に関係ない、石鹸箱ネタでごめんなさい。

【10675】Re:でんさん、Jakaさん
お礼  向井 E-MAIL  - 04/2/5(木) 18:37 -

引用なし
パスワード
   みなさん。こんばんわ
向井です。・・・・

おそくなりましたが、
思うようにフォントの変更ができました。
膨大な資料の修正が楽になりました。

INAさん
つんさん
Asakiさん
Jカーターさん
でんさん
Vakaさん
こうちゃん
ありがとうございました。
またの相談にのってください。

12408 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free