- ベストアンサー
セルの色を変えたいのですが。
セルの色を変えたいと思っています。 現状はマクロで 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関数で値が一致していない場合に でてくるのですが、この時にセルの色を変えて表示したいと思っています。 どうすればよいでしょうか、教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 VBAでは無いですが、VLOOKUP関数のあるセル(ここではA1)を選択して、条件付書式で「数式が」に =ISNA(A1) と入れて、パターンを指定して必要なセルにコピーすれば、目的は達せられると思います。($A$1にしないこと) 参考までに。
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
>#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 になって、次の行を実行するわけです。
お礼
ありがとうございます。 只、うまくできませんでした。 G21からG100、Q21からQ100までVLOOKUP関数を使っています。 これは、M21からM100までに入力された値をみています。 入力されていない場合は#N/Aになるので、教えていただいたもので できると思ったのですができませんでした。 お時間があれば教えてください。
- nishi6
- ベストアンサー率67% (869/1280)
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 の書き方が普通でしょうか。
補足
Excelのバージョンは97です。 #N/Aは文字列ではないということで判断してセルの色を変えるということはできないのでしょうか? エクセルはあまりよくわからないのでもう少し教えてください。 宜しくお願いします。
お礼
ありがとうございます。 できました。