advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 228 for エラー値 #N/A (0.017 sec.)
エラー値 (861), #n/a (1385)
[[20200920100612]]
#score: 10842
@digest: 9d1c5ab0de47c6c0d36b7033de5fe36d
@id: 85240
@mdate: 2020-09-23T09:14:54Z
@size: 12126
@type: text/plain
#keywords: ピノ (22912), 〇" (7498), ノ) (7120), ー値 (6075), xlcelltypeformulas (5547), デン (4055), 返答 (3903), interior (3095), cells (2861), 区別 (2802), の返 (2792), color (2673), (ピ (2564), ンデ (2354), エラ (2302), ラー (2146), myrng (2068), isna (2067), clear (2057), 記載 (1851), activecell (1829), 2020 (1816), specialcells (1731), worksheetfunction (1716), iserror (1445), マナ (1428), ■ (1338), 以外 (1311), ルー (1090), 処理 (1059), 能性 (1027), 日) (1027)
『VBA IF文で型が一致しないエラー』(ピノ)
いつもお世話になっております。 VBA IF文にて、以下コードを記載したところ、、 「If Cells(i, 6) = "#N/A" Then」 ここで、型が一致しないエラーになります。 原因が見つからないため、アドバイスをいただけないでしょうか。 エラーが出たところでイミディエイトウィンドウにて 変数「i」を見ると、7となっており、ここは正常にとれているようです。 <やりたいこと> F列の7〜最終行までセルを順々に見ていき、#N/Aだったら×を入力、 そうでなければ、〇と入力し、同行O列の値をクリアにし、黄色塗りにする。 <コード> Sub データ加工() Dim LR As Long Dim i As Long LR = Cells(Rows.Count, "F").End(xlUp).Row For i = 7 To LR If Cells(i, 6) = "#N/A" Then Cells(i, 6) = "×" Else Cells(i, 6) = "〇" Cells(i, 15).Clear Cells(i, 15).intrior.Color = 6 End If Next I End Sub < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- https://www.relief.jp/docs/excel-vba-not-iserror.html (マナ) 2020/09/20(日) 10:22 ---- マナ様 有難うございます。 URL参考に完成させることができました。 For i = 7 To LR Cells(i, 6).Select If Not IsError(ActiveCell.Value) Then '"#N/A" でなかったら Cells(i, 6) = "〇" Cells(i, 15).Clear Cells(i, 15).Interior.Color = RGB(255, 215, 173) Else '"#N/A" だったら Cells(i, 6) = "×" End If Next i (ピノ) 2020/09/20(日) 11:28 ---- >If Not IsError(ActiveCell.Value) Then '"#N/A" でなかったら https://www.tipsfound.com/vba/05iserror https://dekiru.net/article/4471/ ほかのエラー値でも真と判定されますけどいいんですか? (もこな2) 2020/09/20(日) 12:02 ---- F列には数式が入っているんですか。 上書きされて消されてもいいんですか。 それとも #N/A を入力しているんですか。 (PP) 2020/09/20(日) 13:15 ---- #N/Aにかかわらず、ともかくエラーかそうじゃないかで分岐するならループ処理を使わなくても大丈夫です。 Sub ループ処理しない() Dim LR As Long LR = Cells(Rows.Count, "F").End(xlUp).Row If LR < 7 Then Exit Sub With Range("F7:F" & LR) On Error Resume Next 'エラー値以外 With Intersect(.Cells, .Resize(, 2).SpecialCells(xlCellTypeFormulas, xlNumbers + xlTextValues + xlLogical)) .Value = "〇" .Offset(, 9).Clear .Offset(, 9).Interior.Color = RGB(255, 215, 173) End With 'エラー値 Intersect(.Cells, .Resize(, 2).SpecialCells(xlCellTypeFormulas, xlErrors)).Value = "×" On Error GoTo 0 End With End Sub また、LRが必ず8以上になるということなら以下でもよいとおもいます。 (なんで7だとまずいのかは、[[20200911193145]]のJakaさんのコメントを参照してください) Sub ループ処理しない_簡易版() With Range("F7:F" & Cells(Rows.Count, "F").End(xlUp).Row) On Error Resume Next 'エラー値以外 With .SpecialCells(xlCellTypeFormulas, xlNumbers + xlTextValues + xlLogical) .Value = "〇" .Offset(, 9).Clear .Offset(, 9).Interior.Color = RGB(255, 215, 173) End With 'エラー値 .SpecialCells(xlCellTypeFormulas, xlErrors).Value = "×" On Error GoTo 0 End With End Sub (もこな2) 2020/09/20(日) 19:10 ---- もこな2様 いつもありがとうございます。 >ほかのエラー値でも真と判定されますけどいいんですか? ご指摘の通りですね…今回の場合は、#N/A以外のエラー値はありえないと思うので、 当方記載処理でもいいかもしれませんが、不測の事態の場合を考え、"#N/A"だったら、、 の処理に書き換えを検討したいと思います。 PP様 ありがとうございます。 F列には数式が入っています。 上書きされて消されても大丈夫です。 データを〇×に置き換えて、数式をなくすという処理にしています。 (数式を残していると、参照データを閉じた場合に全てエラーになってしまうため、 その前に置換えしています。) (ピノ) 2020/09/21(月) 17:42 ---- もこな2様 エラー値を処理するコードのご提示、ありがとうございます。 ループしない処理の方が、メモリを食わなくて助かります。 他で使用する機会がありそうなので、参考にさせていただきたいと思います。 (ピノ) 2020/09/21(月) 17:56 ---- 度々恐れ入ります。 頂いたアドバイスをもとに、エラー値をすべて処理するのではなく、 "#N/A"のみ処理するコードを記載したいのですが、 やはり、「If Not Cells(i, 6) = "#N/A" Then 」 ここで、型が一致しないエラーになります。 数式は前処理で値貼り付けして、文字列として読み込みできるようにしました。。 このコードについてもアドバイスいただけたら幸いです。 '値貼り付け Range("f:f").Copy Range("f:f").PasteSpecial Paste:=xlPasteValues For i = 7 To LR Cells(i, 6).Select If Not Cells(i, 6) = "#N/A" Then '"#N/A" でなかったら Cells(i, 6) = "〇" Cells(i, 15).Clear Cells(i, 15).Interior.Color = RGB(255, 215, 173) Else '"#N/A" だったら Cells(i, 6) = "×" End If Next I End Sub (ピノ) 2020/09/21(月) 18:11 ---- 1)#N/A 以外のエラーなら、〇にするのですか??? わたしには、エラーなら×が普通かと思いました。 2)そもそも、数式で、〇×、色は条件付き書式にしておけばよいだけでは? (マナ) 2020/09/21(月) 18:28 ---- 区別しないのがメリットだと思いますが 区別したいなら https://www.relief.jp/docs/excel-vba-check-na-error.html (マナ) 2020/09/21(月) 18:32 ---- マナ様 ありがとうございます。 頂いたリンク参照し、今回はエラー値を区別するパターンで作成しました。 ただ、区別しないエラー値の記載方法も、今後必要になると思いますので、覚えておきます。 またおっしゃる通り、色付けはエクセル上の数式設定でもいいように思えるので、今後の参考にさせていただきます。 For i = 7 To LR Cells(i, 6).Select If WorksheetFunction.IsNA(ActiveCell.Value) Then '"#N/A" だったら Cells(i, 6) = "×" Else Cells(i, 6) = "〇" Cells(i, 15).Clear Cells(i, 15).Interior.Color = RGB(255, 215, 173) End If Next i (ピノ) 2020/09/21(月) 23:14 ---- >このコードについてもアドバイスいただけたら幸いです。 ■1 他のトピックで書いたかもしれませんが・・・ Sub〜End Sub までが一つのプロシージャと呼ばれるかたまりなので、横着せずに全部提示すべきだとおもいます。 ■2 Cells(i, 6).Select ↑は必要ないとおもいます。(2020/09/21(月) 18:11 時点のコード) Cells(i, 6).Select If WorksheetFunction.IsNA(ActiveCell.Value) Then ↑は↓のようにすれば、いちいち選択する必要はないとおもいます。 If WorksheetFunction.IsNA(Cells(i, 6)) Then ■3 好みの問題かもしれませんが、やはりValueプロパティを省略しているのが気になります。 ■4 インデントもなんか適当な印象を受けます。 無理にとは言いませんが、どういうルールで字下げしたのか教えてもらえませんか? ■5 Range("f:f").Copy Range("f:f").PasteSpecial Paste:=xlPasteValues For i = 7 To LR コピーして値貼り付けする部分でF列全体を対象にしてますが、どうせ7〜LR行までしか処理する必要はないのでしょうから限定したほうがよくないですか? ■6 マナさんが指摘されているとおり、#N/A以外はなんであろうと〇というのは解せませんが、とりあえず■2、■5を踏まえるとこんな感じでは? Sub 実験04() Dim LR As Long Dim MyRNG As Range With ActiveSheet LR = .Cells(.Rows.Count, "F").End(xlUp).Row If LR < 7 Then Exit Sub With .Range("F7:F" & LR) .Value = .Value For Each MyRNG In .Cells If WorksheetFunction.IsNA(MyRNG.Value) Then MyRNG.Value = "×" Else MyRNG.Value = "〇" ActiveSheet.Cells(MyRNG.Row, "O").Clear ActiveSheet.Cells(MyRNG.Row, "O").Interior.Color = RGB(255, 215, 173) End If Next MyRNG End With End With End Sub (もこな2) 2020/09/22(火) 01:41 ---- もこな2様 あがとうございます。 ■1 について 以前もご注意いただいたのに、失礼しました。 Sub〜End Sub までが1つのプロシージャですが、聞きたいところ以外にも記載があるため、 割愛し、Sub〜End Subの記載を怠ってしまいました。 以後気を付けたいと思います。 ■2 について 有難うございます。 おっしゃる通りですね。 なるべくスマートなコードをかけるように努力していきたいと思います。 ■3 について alueプロパティが必要な理由はなんでしょうか。 前回のお話で、Excelの機能で勝手にValueと認識してくれるとのことでしたので、引き続き、記載は省いてしまっておりました。 ■4 について インデントは、IFやWithなどで、関連するコードを字下げしたりとかしていますが、明確なルールは定まっていません。もこな2様はどのようなルールでインデントを使われているか、参考にさせていただきたいです。 ■5 について おっしゃる通りかもしれません。 列全体とした方が簡単だったので、それで記載してしまいました。 ■6 について コード有難うございます。 自分で記載したコードよりも、はるかにスマートになっており、、。 実行しても、意図した結果になりました。 こちら、使用させていただきたいと思います。 有難うございます。 #N/A以外は発生する可能性が考えられないため、IFNAといたしましたが、 不具合が出るようでしたら、IsErrorに書き換えたいと思います。 (ピノ) 2020/09/22(火) 18:21 ---- ■3の返答の返答 繰り返しになりますが好みの問題でしょう。 私の場合、ぱっと見でRangeオブジェクトとして参照しているのか、値を使っているのかわかるようにプロパティを記述するようにしています。 ■4の返答の返答 基本的には同じ考えだとおもいますよ。ただ、そのルールでいくと For i = 7 To LR Cells(i, 6).Select If WorksheetFunction.IsNA(ActiveCell.Value) Then '"#N/A" だったら Cells(i, 6) = "×" Else Cells(i, 6) = "〇" Cells(i, 15).Clear Cells(i, 15).Interior.Color = RGB(255, 215, 173) End If Next i ↓ For i = 7 To LR Cells(i, 6).Select '★For〜Nextステートメントに対して1段階インデントを挿入 If WorksheetFunction.IsNA(ActiveCell.Value) Then '"#N/A" だったら Cells(i, 6) = "×"'★Ifステートメントに対してインデントを1段階に変更 Else Cells(i, 6) = "〇" Cells(i, 15).Clear Cells(i, 15).Interior.Color = RGB(255, 215, 173) End If Next i じゃないですか? ■6の返答の返答 >#N/A以外は発生する可能性が考えられないため、IFNAといたしましたが >不具合が出るようでしたら〜 好きにすればいいんじゃないですか。 なお、私なら「#N/A以外は発生する可能性が考えられない」のであれば、エラーの種類を限定せずともかくエラーなら真(偽)と判定するでしょうけど。 (エラーの種類を区別しないのであればSpecialCellsが使えることは提示のとおり) ちなみに、2020/09/20(日) 12:02で確認した理由は、単純にやってることとコメントが合ってなかったからです。 (別トピックの流れからVLOOKUP関数の結果を見ているのかなぁと想像しましたけど、そもそもこのトピックで全体が示されてないので、確証がありませんでした・・・) (もこな2) 2020/09/22(火) 20:13 ---- ■3の返答の返答 なるほどです。レンジか値かをそこで見分けるというのもあるんですね、 ご意見参考に、Valueの使い方、再考してみたいと思います。 ■4の返答の返答 仰る通りですね…。どっかからコピペしてインデントをそのままにしてしまっていました。 可読性にも関わってくるので、以後気を付けたいと思います。 >「#N/A以外は発生する可能性が考えられない」のであれば、エラーの種類を限定せずともかくエラーなら真(偽)と判定するでしょうけど。 確かにエラーを区別しないならそれでよかったです… 慌ててしまいましたが、ちょっと考えればわかることでした。失礼しました。 コードをきちんと提示せず、申し訳ありませんでした。 今後は Sub〜End Subの必要箇所は、提示するようにいたします。 (ピノ) 2020/09/23(水) 18:14 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/202009/20200920100612.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97041 documents and 608053 words.

訪問者:カウンタValid HTML 4.01 Transitional