• ベストアンサー

セルの色を変えたいのですが。

セルの色を変えたいと思っています。 現状はマクロで Sub カラー1() i = 7 For j = 21 To 100 RESULT = Cells(j, i) If RESULT = "#N/A" Then Cells(j, i).Interior.ColorIndex = 3 End If Next j i = 17 For j = 21 To 100 RESULT = Cells(j, i) If RESULT = "#N/A" Then Cells(j, i).Interior.ColorIndex = 3 End If Next j End Sub とかいてあります。 "#N/A"ですがVLOOKUP関数で値が一致していない場合に でてくるのですが、この時にセルの色を変えて表示したいと思っています。 どうすればよいでしょうか、教えてください。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんにちは。 VBAでは無いですが、VLOOKUP関数のあるセル(ここではA1)を選択して、条件付書式で「数式が」に =ISNA(A1) と入れて、パターンを指定して必要なセルにコピーすれば、目的は達せられると思います。($A$1にしないこと) 参考までに。

akashyati
質問者

お礼

ありがとうございます。 できました。

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>#N/Aは文字列ではないということで判断してセルの色を変えるということはできないのでしょうか? 回答した、   If Application.IsNA(Cells(j, i)) Then がそれに該当しますが・・・ >エクセルはあまりよくわからないのでもう少し教えてください。 質問にある、  i = 7  For j = 21 To 100    RESULT = Cells(j, i)    If RESULT = "#N/A" Then      Cells(j, i).Interior.ColorIndex = 3    End If  Next j を見ると、変数宣言されていないので、 RESULT は Variant型変数です。(Variant型変数→なんでも格納できる変数型とでも言うか・・・) 従って、   RESULT = Cells(j, i)   If RESULT = "#N/A" Then は機能しています。しかし、Vlookupで返された答えの #N/A は文字列ではないので If RESULT = "#N/A" Then は セルに #N/A と入力しない限り成立しません。 従って、セルのパターンをColorIndex 3 にする塗つぶしは行われないことになります。 試しに、Vlookupで返された答えが #N/A のセルをA2として、=Type(A2) とすると16になります。 これはデータ型がエラー値ということです。文字列なら2になります。 再度回答を全て書くと(変数宣言をして、余分な変数'RESULT'は使っていません) Sub カラー1()   Dim i As Integer '列カウンタ   Dim j As Integer '行カウンタ   i = 7   For j = 21 To 100     'セルが #N/A ならセルを赤く塗る(ColorIndex = 3)     If Application.IsNA(Cells(j, i)) Then       Cells(j, i).Interior.ColorIndex = 3     End If   Next j   i = 17   For j = 21 To 100     If Application.IsNA(Cells(j, i)) Then       Cells(j, i).Interior.ColorIndex = 3     End If   Next j End Sub のようになります。 If Application.IsNA(Cells(j, i)) Then で、(Excel97はApplicationでOKのはずです) Cells(j, i)の内容が、エラー値『#N/A』かどうか調べています。 Application.IsNA(Cells(j, i)) はVBAの中でワークシート関数『ISNA()』を使っていて、 =ISNA(A2) のように使うと、セルA2が『#N/A』ならTrue が返ってきます。 これで、Cells(j, i)が『#N/A』なら If の判別式が True になって、次の行を実行するわけです。

akashyati
質問者

お礼

ありがとうございます。 只、うまくできませんでした。 G21からG100、Q21からQ100までVLOOKUP関数を使っています。 これは、M21からM100までに入力された値をみています。 入力されていない場合は#N/Aになるので、教えていただいたもので できると思ったのですができませんでした。 お時間があれば教えてください。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

2箇所の RESULT = Cells(j, i) If RESULT = "#N/A" Then を If Application.IsNA(Cells(j, i)) Then にしてみて下さい。 『Option Explicit』を使って変数宣言を強制するようにしたほうが間違いを防止できます。 『#N/A』は文字列ではないため RESULT = "#N/A" で型の不一致が起きているはずです。 Excelのバージョンが分からないので、Application.IsNA にしています。 Excel2000 なら WorksheetFunction.IsNA の書き方が普通でしょうか。

akashyati
質問者

補足

Excelのバージョンは97です。 #N/Aは文字列ではないということで判断してセルの色を変えるということはできないのでしょうか? エクセルはあまりよくわからないのでもう少し教えてください。 宜しくお願いします。