教えて!gooグレードポイントがdポイントに!

こんばんは。
excel vba のchangeイベントを教えてください。
・シートは3種類あります。(元、A、B)
・元シートの F列に日付1、G列に商品名、H列に日付2 
①元シートの F列に日付1(入力有)、G列に商品名(入力有)、H列が空白の場合、シートA(A:Z)、シートB(A:Z)にG列と同じ商品名があればそのセルフォントを赤文字にする。
②元シートの F列に日付1(入力有)、G列に商品名(入力有)、H列に日付ありの場合、シートA(A:Z)、シートB(A:Z)にG列と同じ商品名があればそのセルフォントを白文字にする。
※元シートのG列商品名は元シートのF列、H列の日付が両方入った場合は、G列にまた入ってきます。
文字が入った時の簡単なchangeイベントはできるのですが、商品名を検索してchangeイベントが出来ません。
ご教示よろしくお願い致します。
(関数ではなくVBAでお願い致します)

教えて!goo グレード

A 回答 (2件)

「文字が入った時の簡単なchangeイベントはできる」とのことなので、入力された商品名の取得や日付1,2の条件判定は、すでに自力で出来ているってことで良いんですよね?


そうなると、分からないのは「商品名で検索して、フォント色を変える」ところのみですよね?

であれば、FINDメソッドより、Range.Replace メソッドの方が簡単です。こんな感じです。

Application.ReplaceFormat.Font.Color = 255
Cells.Replace What:="BBB", Replacement:="BBB", LookAt:=xlWhole, ReplaceFormat:=True

上記の例は、アクティブシートのすべてのセルを対象に、文字”BBB"を”BBB"に置換(結局、文字としては、何も変わらない)。同時にフォントカラーを赤に置換しています。
    • good
    • 0
この回答へのお礼

ママチャリさん、ご回答ありがとうございます。
"BBB"の商品名が300種類ぐらいあります。
種類が少ないときはreplaceでいいと思うのですが、種類が多いときはfindメソッドがいいでしょうか?

お礼日時:2022/01/09 13:41

こんばんは



ご質問文を読んでも、よく理解できないのですが・・・

「関数が入っているセルの値が変わっても、Changeイベントが発生しない」という意味のご質問でしょうか?
それとも、イベント処理のVBAの内容を作成できないというご質問でしょうか?
どちらかなのわからないので・・

◇前者の場合
直接そのセルをチェックするのではなく、関数の参照元の変更をチェックすれば宜しいでしょう。
あるいは、その関数をユーザー定義関数化(=見かけだけで良い)しておけば、当該セルの再計算が発生した時点でとらえることは可能になると思います。
ただし、ユーザ定義関数からは、書式を直接変更することができなかったかも知れません。
(記憶が曖昧です。すみません)

◇後者の場合
対象範囲から同じ値の存在を探せば良いだけなので、FINDメソッドでチェックするか、またはWorksheetFunctionを利用しても(COUNTIFなど)チェックは可能と思います。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
https://docs.microsoft.com/ja-jp/office/vba/api/ …


とは言え、ご質問の内容であれば、セルに「条件付き書式」を設定しておけばすむことのように思われますので、VBAを用いる必要もなさそうに感じますけれど・・
    • good
    • 1
この回答へのお礼

fujillinさん、ご回答ありがとうございます。
質問が伝わり辛く申し訳ありません。
質問は後者になります。
findメソッド調べてみます。

お礼日時:2022/01/09 13:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング