Excel VBA質問箱 IV

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

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


11676 / 13645 ツリー ←次へ | 前へ→

【14755】エラー処理に関して 123 04/6/7(月) 6:46 質問[未読]
【14758】Re:エラー処理に関して つん 04/6/7(月) 9:30 回答[未読]
【14774】Re:エラー処理に関して 123 04/6/7(月) 21:22 質問[未読]
【14776】Re:エラー処理に関して つん 04/6/7(月) 22:43 回答[未読]
【14780】Re:エラー処理に関して 123 04/6/7(月) 23:03 質問[未読]
【14784】Re:エラー処理に関して つん 04/6/7(月) 23:35 発言[未読]
【14789】Re:エラー処理に関して Asaki 04/6/8(火) 0:37 回答[未読]
【14834】Re:エラー処理に関して 123 04/6/8(火) 19:10 お礼[未読]
【14792】Re:エラー処理に関して kein 04/6/8(火) 0:59 回答[未読]

【14755】エラー処理に関して
質問  123  - 04/6/7(月) 6:46 -

引用なし
パスワード
   先日の続きなのですが・・・
あらかじめ、決まった検索文字"AA""BB""CC"があります。
検索文字"AA"を検索し、該当する行がなければ、
処理をせずに、次の検索文字"BB"に該当するかと
処理をしていきたいのですが、うまく処理ができません。

下記の部分で"オブジェクト変数またはwithブロック変数が設定されて
いません。"のメッセージが出るのですがどうすればよいのでしょうか?

Selection.Find(What:="AA", After:=ActiveCell, LookIn:=xlFormulas, _
   LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext _
   , MatchCase:=False, MatchByte:=False).Activate

【14758】Re:エラー処理に関して
回答  つん E-MAIL  - 04/6/7(月) 9:30 -

引用なし
パスワード
   おはようございます。

>下記の部分で"オブジェクト変数またはwithブロック変数が設定されて
>いません。"のメッセージが出るのですがどうすればよいのでしょうか?
>
> Selection.Find(What:="AA", After:=ActiveCell, LookIn:=xlFormulas, _
>   LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext _
>   , MatchCase:=False, MatchByte:=False).Activate

選択範囲に「AA」が無いときにエラーが出ますね?
こういう場合は、一度Rangeオブジェクトに代入してから処理をしが方がいいかも

  Dim r As Range

  Set r = Selection.Find(What:="AA", After:=ActiveCell, LookIn:=xlFormulas, _
   LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext _
   , MatchCase:=False, MatchByte:=False)
  
  If Not r Is Nothing Then
    処理処理
  End If
  
  Set r = Nothing

それから、「AA」てセルに入力された文字なんですよね?
LookIn:=xlFormulas だと、数式を検索・・・になるので、
「xlValues」にしたほうがいいかと・・・

【14774】Re:エラー処理に関して
質問  123  - 04/6/7(月) 21:22 -

引用なし
パスワード
   つん さん

返信ありがとうございます。
早速ためしてみたのですが、

まず、
>  Dim r As Range
>
>  Set r = Selection.Find(What:="AA", After:=ActiveCell, LookIn:=xlFormulas, _
>   LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext _
>   , MatchCase:=False, MatchByte:=False)
>  
>  If Not r Is Nothing Then
>    r= ActiveCell.Row
     特定のセルに色をつけたい・・・
>  End If
としたいのですが、うまくいきません。
rには、検索行が入っているのでしょうか?

それと、
>「xlValues」にしたほうがいいかと・・・     

これも、あとで気づきました。ありがとうございます。

【14776】Re:エラー処理に関して
回答  つん E-MAIL  - 04/6/7(月) 22:43 -

引用なし
パスワード
   こんばんは〜

>>>  
>>  If Not r Is Nothing Then
>>    r= ActiveCell.Row
>     特定のセルに色をつけたい・・・
>>  End If
>としたいのですが、うまくいきません。
>rには、検索行が入っているのでしょうか?

「r」には、検索してヒットしたセルが入ってます。
なので、r= ActiveCell.Row などとすると、
せっかく、検索されたセルを見失うことになります。
それに、「Set」で代入しないとダメだと思う・・・

特定のセルって言うのは検索してヒットしたセルですか?
だったら、

r.Interior.ColorIndex = 8

等でOKだと思います。
そのセルの行全体なら、

「EntireRow」を使えばええかな。

【14780】Re:エラー処理に関して
質問  123  - 04/6/7(月) 23:03 -

引用なし
パスワード
   つん さん
こんばんは

上手く伝わっていなかったようで、
申し訳ありません。内容をお伝えします。

あるB列には、AA,BB,CC,DDの文字列が入って
いる時といない時があります。
もし、AAが入っていた場合、その行の数字が
入っているセルにのみ色をつけたいのです。

なので、行番号を失ってしまっては処理ができないのです。

Columns(r).Select
  
   Selection.Find(What:="AA", After:=ActiveCell, LookIn:=xlValues, _ 
   LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext _
   , MatchCase:=False, MatchByte:=False).Activate
 
    検索行 = ActiveCell.Row
    
    Cells(検索行, 2).Interior.Colorindex = 8
    
    Rows(検索行).SpecialCells(xlCellTypeConstants, _ 
    xlNumbers).Interior.Colorindex = 8

という処理がBB,CCと続くのですが、if文がうまく進んでないよう
なんです。
どうすればよいでしょうか?

【14784】Re:エラー処理に関して
発言  つん E-MAIL  - 04/6/7(月) 23:35 -

引用なし
パスワード
   >なので、行番号を失ってしまっては処理ができないのです。

検索してヒットしたセルの行番号を取得したいなら、

r.Row

で、OKだと思います。

  ↓これ、何をしたいのかちょっとわかりません(T_T)
> Columns(r).Select

rはあくまで、検索したヒットしたセルを代入するための変数です。
これだと列番号になりますよね?

ところで、検索されたセルをアクティブにすることにこだわってはるようですが、
123さんが書かれているようなやり方では、検索した値がないときはエラーになります(最初の質問ってそれじゃなかった?)
無理にアクティブにする必要はないんじゃないですか?
変数(r)を用意して、代入させ、
If Not r Is Nothing Then
で調べるのが手っ取り早いと思いますが・・・
どうしてもアクティブにしたかったら、上記ので調べてから、
r.Activateとするとか・・・
  
BB、CCと続く件は。。すんません、また明日でいいですか?

【14789】Re:エラー処理に関して
回答  Asaki  - 04/6/8(火) 0:37 -

引用なし
パスワード
   こんばんは。
後ろから失礼します。

↓こんなんでしょうか?
Sub test2()
  Dim i    As Long
  Dim c    As Range

On Error Resume Next

  Cells(1, 2).Activate
  For i = 0 To 2
    Set c = Columns(2).Find(What:=Array("AA", "BB", "CC")(i), LookIn:=xlValues, _
      LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
      MatchCase:=False, MatchByte:=False)
    If Not c Is Nothing Then
      c.Interior.ColorIndex = 8
      c.EntireRow.SpecialCells(xlCellTypeConstants, xlNumbers).Interior.ColorIndex = 8
    End If
  Next i
End Sub

"AA" とか、複数あるんでしょうか?
それだと、そこもループが要るかと。

【14792】Re:エラー処理に関して
回答  kein  - 04/6/8(火) 0:59 -

引用なし
パスワード
   IV列を作業列にし、数式を埋めこんで判定〜セル着色する方法を提示します。
データ量が多いと、こちらの方が高速に処理できると思います。

Sub Check_String()
  Dim MyR As Range, GetR As Range
  Dim Ad As String
 
  On Error GoTo ErLine
  Set MyR = Range("B:B").SpecialCells(2, 2)
  Ad = MyR.Cells(1).Address(0)
  With MyR.Offset(, 254)
   .Formula = _
   "=IF(OR(" & Ad & "=""A""," & Ad & "=""B""," & Ad & "=""C""),1,"""")"
   Set GetR = .SpecialCells(3, 1).EntireRow
   GetR.SpecialCells(2, 1).Interior.ColorIndex = 8
   Intersect(MyR, GetR).Interior.ColorIndex = 8
   .ClearContents
  End With
ErLine:
  Set MyR = Nothing: Set GetR = Nothing
End Sub

【14834】Re:エラー処理に関して
お礼  123  - 04/6/8(火) 19:10 -

引用なし
パスワード
   つんさん、Asaki さん、keinさん

アドバイスありがとうございました。

つんさん、Asakiさんの方法で行い、
実行できました。また、全部の処理
をやりおえたら、keinさんおの方法も
試みてみる予定です。

長らくおつきあい頂き、ありがとう
ございました。また、困った時はお願い
します。

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