[[20070316180238]] 『繰り返し処理がうまくいかないです。』(ドクターもこみち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『繰り返し処理がうまくいかないです。』(ドクターもこみち)

こんばんは。繰り返し処理について、うまくいかなんです。

セルK2からアクティブセルが空白になるまで、ループ

処理をしたいです。セルK2から空白でなければ、下に移動

というコードを書き、そのついでに#N/Aの文字列があった場合

それを変数eraに個数1として加え、#N/Aの数を最終的に

何個だったか、報告するというものなんですが、エラー内容

として、「LOOPに対してのDOが見つかりません」と出てしまい

ます。

Dim era As Integer

era = 0

Range("K2").Select

Do Until ActiveCell = Empty

    If ActiveCell = "#N/A" Then

    era = era + 1

    ativecell.Offset(1, 0).Activate

    Else

    ativecell.Offset(1, 0).Activate

Loop

MsgBox "エラー値を" & era & "個、発見しました。"


 End Ifが無いからでは
 (ken)

 Loopの練習で書いているのなら

 activecell.offset(1,0).Activate
 Else

 の二行を削除して
 End If
 に書き換えればOKでしょう...

 Sub test()
 On Error Resume Next
 MsgBox Range("k2",Range("k" & Rows.Count).End(xlUp)).SpecialCells(-4123,16).Count
 End Sub

 なんてこと出来ませんか?
 (seiya)

上記の

 activecell.offset(1,0).Activate

 Else

を削除して、end ifを追加したのですが、バグはLoopを指しているようです。

あとtestプログラムを実行しても、何を起こらなかったんですが、これは

どういうプログラムになるのでしょうか。

今、考えている事は、K2からKの最終行までの「#N/A」の個数を集計して

最終メッセージボックスとして表示させたいと思っています。そこでK2か

ら、一つずつセル内の値が「#N/A」かどうか調べ、セルを1つ下にずらし、

また調べというループを作りました。しかし、うまくいかなかったという

事なんです。(−_−:)


下のようなコードを作ってみました。「#N/A」の個数を数えたいのですが

やはり実行すると、LOOPが黄色になり、エラー「型がちがいます。」と

表示。デバッグモードになります。

「#N/A」ではなく、「大阪」と入れると、きちんと大阪の個数を数える

んですが、#N/Aの個数を数える方法がないのでしょうか。なお、#N/Aも

含めて、すべて値の貼り付けとして処理しています。(ドクターもこみち)

Sub test()

Dim era As Integer

era = 0

Range("K2").Select

    Do

        If ActiveCell = "#N/A" Then

        era = era + 1

        End If

    ActiveCell.Offset(1, 0).Activate

    Loop While ActiveCell <> ""

MsgBox era


 ActiveCell.Text = "#N/A"
 または
 IsError(ActiveCell.Value)
 では?
 (seiya)

.textを追加してみたのですが、やはり下記1文が黄色でぬられ、型が一致しま

せんという表記が出てしまいます。

Loop While ActiveCell <> "" (ドクターもこみち)


 これ実行してみてください。

 Sub test()
 Dim r As Range, era As Long
 For Each r In Range("k2",Range("k" & rows.Count).End(xlUp))
      If IsError(r.Value) Then era = era + 1
 Next
 MsgBox era
 (seiya)

 私はこれで落ちます。
 明日は投稿できませんので...
 (seiya)

seiyaさん、できました!!!!!後学のためにおつくりになられた

文章を読解してみますので、もし間違いがあれば、指摘頂けると

幸いです。

 For Each r In Range("k2",Range("k" & rows.Count).End(xlUp))

      If IsError(r.Value) Then era = era + 1

★事前に定義として変数rを範囲としてみます。そして、rの中に

K2からKの最終行までの範囲を代入。→「In」というのは、=と

同義なのでしょうか。

IF構文を指して、rの範囲内にエラー値があった場合にその数を

数える事ができるのでしょうか。とすると、エラー値以外で例え

ば、文字の「大阪」の個数を数えようとした場合は、下記のよう

になりますか?

 For Each r In Range("k2",Range("k" & rows.Count).End(xlUp))

      If r.Value="大阪" Then era = era + 1

ありがとうございました。         (ドクターもこみち)


 1) For Each r In Range("k2, range("k" & rowns.count).end(xkup)
    変数r (Range型)で K2:Kn (n=最終行) 範囲をループ

 2) If IsError(r.Value) Then era = era + 1
    セルがエラー値であるかどうか判定、Trueであれば era + 1

 私は、Propertyを極力省略しないようにしています。
 時には、省略したことが原因で不測の結果が導かれることがありますので。
 (seiya)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.