Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8802 / 13644 ツリー ←次へ | 前へ→

【31076】ループの回数について りえこ 05/11/11(金) 14:29 質問[未読]
【31078】Re:ループの回数について 05/11/11(金) 14:33 回答[未読]
【31079】Re:ループの回数について りえこ 05/11/11(金) 14:53 お礼[未読]
【31080】Re:ループの回数について 05/11/11(金) 15:02 回答[未読]
【31081】Re:ループの回数について りえこ 05/11/11(金) 15:05 質問[未読]
【31082】Re:ループの回数について Statis 05/11/11(金) 15:12 発言[未読]
【31083】Re:ループの回数について 05/11/11(金) 15:13 発言[未読]
【31085】Re:ループの回数について りえこ 05/11/11(金) 15:16 質問[未読]
【31086】Re:ループの回数について Kein 05/11/11(金) 15:23 回答[未読]
【31087】Re:ループの回数について りえこ 05/11/11(金) 15:32 質問[未読]
【31090】Re:ループの回数について Kein 05/11/11(金) 15:38 発言[未読]

【31076】ループの回数について
質問  りえこ  - 05/11/11(金) 14:29 -

引用なし
パスワード
   VBA初心者なので、教えて頂きたいのですが・・・
ループの回数を数えさせそれを取得するという事は
可能なのでしょうか。

可能だとしたら、その方法を教えて下さい。

【31078】Re:ループの回数について
回答    - 05/11/11(金) 14:33 -

引用なし
パスワード
   こんにちは。

>VBA初心者なので、教えて頂きたいのですが・・・
>ループの回数を数えさせそれを取得するという事は
>可能なのでしょうか。

可能です。

>可能だとしたら、その方法を教えて下さい。

Sub test()
  Dim kaisu As Integer
  kaisu = 0
  Do
    処理
    kaisu = kaisu + 1
  Loop
End Sub

Do〜Loopでの例でした。
こうすれば回数を数えられると思います。
外していたらごめんなさい。

【31079】Re:ループの回数について
お礼  りえこ  - 05/11/11(金) 14:53 -

引用なし
パスワード
   下記の要領で問題ありませんでした。
ありがとうございました。

これに付け加えて、もうひとつ質問なのですが

@D

という文字列が含まれているセルを列A
から検索してその数を数えさせたいのですが、
これをループでループの回数で数えようと
しているのですが、どうしたら良いでしょうか。

ご指導よろしくお願いいたします。

【31080】Re:ループの回数について
回答    - 05/11/11(金) 15:02 -

引用なし
パスワード
   私が書いたコードの「処理」という部分に
検索をする処理を書いてください。

また、Do〜Loopでする場合は、Do〜Loopを
終わらせる条件をいれてあげてください。
(延々とループしてしまうので)

【31081】Re:ループの回数について
質問  りえこ  - 05/11/11(金) 15:05 -

引用なし
パスワード
   先ほど教えていただいた内容を盛り込んで、
作成してみたのですが・・・

Dim kaisu As Integer
  kaisu = 1
        
  Do Until ActiveCell.Value = ""
      
      Cells.Find(what:="@D", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
          xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Select
      
        kaisu = kaisu + 1
      
    ActiveCell.Offset(1).Select
  Loop

これだと、ActiveCell.Offset(1).selectがある為に
検索されたセルの一つ下からまた検索が始まるので
不適正なデータが得られてしまいます。

何か解決策はないでしょうか。

【31082】Re:ループの回数について
発言  Statis  - 05/11/11(金) 15:12 -

引用なし
パスワード
   こんにちは
検索してヒットした個数を知りたいのですか?
コードでは何をしたいのかわかりません?

【31083】Re:ループの回数について
発言    - 05/11/11(金) 15:13 -

引用なし
パスワード
   検索したあとにどういう事をしたいのでしょうか?
検索したセルから再度また検索をしなおすようであれば、
>ActiveCell.Offset(1).Select
は不要だと思います。
(検索している段階で探したセルをアクティブにしているので)

【31085】Re:ループの回数について
質問  りえこ  - 05/11/11(金) 15:16 -

引用なし
パスワード
   検索した後で、その”@D”が含まれている列の数を
数えたいだけなのですが。

ループを使わなくてもできるのでしょうか。
ご指導よろしくお願いいたします。

【31086】Re:ループの回数について
回答  Kein  - 05/11/11(金) 15:23 -

引用なし
パスワード
   >@Dという文字列が含まれているセルを列A
>から検索してその数を数えさせたい
ということなら、ループ処理やFindメソッドを使うより、作業列に数式を入れて判定
する方が速いです。例えば AA列を作業列として

Sub Test_Count()
  Dim Cnt As Long

  On Error Resume Next
  With Range("A1", Range("A65536").End(xlUp)).Offset(, 26)
   .Formula = "=IF(ISERR(FIND("@D",$A1)),"""",1)"
   Cnt = .SpecialCells(3, 1).Count
   .ClearContents
  End With
  If Err.Number <> 0 Then
   MsgBox "「@D」を含むセルはありません", 64
  Else
   MsgBox "「@D」を含むセルの個数は " & Cnt & " 個あります", 64
  End If
End Sub

などとすれば良いでしょう。
あと、もしA1が項目になっているなら、フィルターを使う方法もあります。

【31087】Re:ループの回数について
質問  りえこ  - 05/11/11(金) 15:32 -

引用なし
パスワード
   .Formula = "=IF(ISERR(FIND(what:="@D",$A1)),"""",1)"

の処理のところで、不正な文字とエラーが出るのですが
何故でしょうか。

【31090】Re:ループの回数について
発言  Kein  - 05/11/11(金) 15:38 -

引用なし
パスワード
   私が書いたコードを勝手に改ざんしておいて、エラーが出たというのはどうかと
思いますよ。そのコードで使っているのは Findメソッドではなくて、ワークシート関数
の FIND なのです。だから

FIND(what:="@D",$A1)



FIND("@D",$A1)

に戻してやってみて下さい。

8802 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free