• ベストアンサー

Findを使用して、データが入力されているセルのみを検索

 | A | ------- 1| 123 | 2|    | 3| 456 | 4| 789 | Excel2003を使用しています。 上記のデータをFindを使用して、データが入力されているセルのみを検索したく、 Set C = Worksheets(AAA).Range("A:A").Find(<>"", LookIn:=xlValues) など、試してみたのですが、上手くいきません。 『Findを使用して、データが入力されているセルのみを検索』する事じたいが無理なのでしょうか。  ご教授の程、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.7

下記のようになります。 Dim c As Range Dim a As String With Worksheets(2).Range("b2:b9") Set c = .Find("*", LookIn:=xlValues) If Not c Is Nothing Then a = c.Address Do Debug.Print c.Value; c.Address Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> a End If End With

Prytwen
質問者

お礼

 動きました!やっと解決できました!! まだプログラムが理解できない所がありますが、調べてみます。どうしても理解できなければ、また質問するかもしれませんが…(^^;  三度にわたり、回答いただきありがとうございました。

その他の回答 (8)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.9

たびたびすいません。 With Worksheets("AAA").Range("A:A") でした。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.8

With Worksheets(2).Range("A:A") でした。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.6

Set C = Worksheets(AAA).Range("A:A").Find("*", LookIn:=xlValues) でももちろんOKです。

Prytwen
質問者

お礼

 ご回答ありがとうございます。 提示して頂いたプログラムを動かしてみたのですが、$A$3しか検索してくれません。RangeもColumnsも同じでした。  組み方が間違っているかもしれないので、下記に組んだプログラムを提示します。よろしければ、チェックしてください。 Sub Test() Dim C As Range Do Set C = Worksheets("AAA").Columns("A:A").Find("*", LookIn:=xlValues) Set C = Worksheets("AAA").Range("A:A").FindNext Loop

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.5

Set C = Worksheets(AAA).Columns("A:A").Find("*", LookIn:=xlValues) で最初のセルA1が検索できます。 繰り返して検索であればFindNextを使用しDo~Loopで検索してください。

  • takana_
  • ベストアンサー率44% (21/47)
回答No.4

#1です Forループで各セルにアクセスします 以下のコードを参照してください Sub Macro1()  Dim C As Range  Dim D As Range  Set C = Worksheets("AAA").Range("A:A").SpecialCells(xlCellTypeConstants)  For Each D In C   Debug.Print D.Address  Next End Sub または Sub Macro2()  Dim C As Range  Dim i As Integer  Set C = Worksheets("AAA").Range("A:A").SpecialCells(xlCellTypeConstants)  For i = 1 To C.Count   Debug.Print C(i).Address  Next End Sub

Prytwen
質問者

お礼

 「For Each D In C」の方が望んでいた答えです。 Findは使えませんでしたが、新しい方法を知ることができました。  二回も回答を頂きありがとうございました。

  • lul
  • ベストアンサー率41% (10/24)
回答No.3

Findの式に誤りがありますので以下で試してみて下さい。 Set C = Worksheets(AAA).Range("A:A").Find("", LookIn:=xlValues) Find(<>"",←"<>"は必要ないので、これを外せば出来ると思います。

Prytwen
質問者

お礼

 ご回答ありがとうございます。 このプログラムですと、「空白のセル」のみ検索してしまいます。『データが入力されているセルのみを検索』=『空白でないセル』のみ検索したいので、分かるようでしたらご教授お願いします。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

Findを利用していませんが、セル選択を利用すれば目的のことはできるかと思います。 <例> Set C = Worksheets(AAA).Range("A:A").SpecialCells(xlCellTypeConstants, 23) *上例では、値が入力されているセルを選択しています。   (式が入力されているセルは除かれています)

Prytwen
質問者

お礼

 早速のご回答ありがとうございます。  このプログラムですと、アドレスが『$A$1,$A$3:$A$4』となってしまいますが、123=$A$1,456=$A$3 のように個々のアドレスを取得する事はできないのでしょうか。  もし、宜しければご教授下さい。

  • takana_
  • ベストアンサー率44% (21/47)
回答No.1

以下でどうでしょうか? Dim C As Range Set C = Worksheets("AAA").Range("A:A").SpecialCells(xlCellTypeConstants) やっていることは、メニューから下記を実行したのをコード化しています。 [編集]→[ジャンプ]→[セル選択]→[○定数]をチェック

Prytwen
質問者

お礼

 早速のご回答ありがとうございます。 提示して頂いたプログラムを動かしてみました。SpecialCellsというやり方を知らなかったので、勉強になりました。  このプログラムですと、アドレスが『$A$1,$A$3:$A$4』となります。 123=$A$1,456=$A$3 のように個々のアドレスを取得する事はできないのでしょうか。  もし、宜しければご教授下さい。