• 締切済み

Find関数内にFind関数をかける場合

エラー91が発生し、手詰まりです。 どなたかご教授お願いいたします。 Find関数でDo~lppoを行い、初期の検索結果アドレスでLoopを抜けようと思ったのですが。。 エラーしてしまいました。 Find関数内にFind関数を用いることが出来ない と目にしたのですが。 下記のようなVBAの場合 どのように対処したらいいでしょうか? また、VBA初心者のため VBA文が見づらかったり、おかしなところがあると思います。 その部分についても教えて頂けたらと思います。 Sub SAMPLE() Dim TargetDE As String '文字列型 Dim TargetNo As String '文字列型 Dim PODate As String '文字列型 Dim FoundCell As Range ' Dim FoundDate As Range Dim FoundCellNo As Long '長整数型 Dim FoundDateNo As String Dim SearchArea As Object 'オブジェクト型 Dim tar_obj(1) As Object 'オブジェクト型 Dim Addr As String '文字列型 Dim Lastrom As Long ' Dim POLEFT As Range '検索文字列入力(DE) TargetDE = Application.InputBox("Fill in a DE:??", "DE:??", Type:=2) If TargetDE = "False" Then Exit Sub '検索対象範囲 Set SearchArea = Workbooks("Sample sample.xlsx").Sheets("Sample") Set tar_obj(1) = Workbooks("INPUT FORMAT.csv").Sheets("INPUT FORMAT") '表示先をクリア tar_obj(1).Cells(1, 1).CurrentRegion.ClearContents '検索実行 Set FoundCell = SearchArea.Range("C:C").Find(What:=TargetDE, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列(DE)を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub '検索文字列入力(DE Number) TargetNo = Application.InputBox("Fill in DE nomber", "Nomber", Type:=2) If TargetNo = "False" Then Exit Sub '最初の検索結果の行数を格納 Addr = FoundCell.Address '検索文字列入力(PO Date) PODate = Application.InputBox("Fill in Sample Date", "Date", Type:=2) If PODate = "False" Then Exit Sub Do '検索Cell右横の値がTargetNoと同じ場合 If FoundCell.Offset(0, 1).Value = TargetNo Then '行番号を代入 FoundCellNo = FoundCell.Row '検索の下限値を変数に代入 F_LAST = FoundCellNo + 50 '検索実行 Set FoundDate = SearchArea.Range(SearchArea.Cells(FoundCellNo, 1), SearchArea.Cells(F_LAST, 1)).Find(What:=PODate, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundDate Is Nothing Then 'MsgBox "Find is mistake" '検索文字列を含むセルがある場合 Else '変数に行番号代入 FoundDateNo = FoundDate.Row If FoundDate.Offset(1, 1).Value = "" Then MsgBox "The position of the cell is not correct. Please coordinate macro. " Else POLEFT = FoundDate.Offset(1, 1) For i = 2 To 13 If FoundDate.Offset(1, i) <> 0 Then If FoundDate.Offset(1, i) <> "." Then If IsNumeric(FoundDate.Offset(1, i).Value) = True Then '表示先(INPUT FORMAT)の行数をカウントアップ cnt = cnt + 1 PORIGHT = FoundDate.Offset(1, i).Value tar_obj(1).Range("E" & cnt) = POLEFT & PORIGHT End If End If End If Next i End If End If ElseIf FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Find is mistake" End If '次の検索を実行 Set FoundCell = SearchArea.Range("C:C").FindNext(After:=FoundCell) Loop While Not FoundCell Is Nothing And FoundCell.Address <> Addr ' If FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Not Find Number" ' End If End Sub

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1の添付画像の訂正です

全文を見る
すると、全ての回答が全文表示されます。
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

Findで検索したセルを対象に再度Findで絞り込むということでしょうか? ご提示のコードに対する回答にはなりませんが・・・ セルA1~A10に以下のようなデータがあり、 「wa」をFind検索して、一致したセルを対象に「0」で再度Find検索しています。 aawdawdasda1 awdasdawad1 asdawdawdas0 awdasdwdadsa1 awdasdawdadwasd0 awdasdawdasdadwa0 awdasdawdawdasd0 awdasdawdasdasd1 dwasdasdawdasdadw0 asdwasdawdasda0 結果は以下のようになります。 Step1---A1:A18からwaを含むセル $A$2 $A$5 $A$6 $A$9 $A$10 Step2---Step1から0を含むセル $A$5 $A$6 $A$9 $A$10 添付画像を参考までに。。。 ■VBAコード Sub test() '型宣言 Dim hit As Range Dim bkhit As Range Dim myRng As Range Debug.Print "Step1---A1:A18からwaを含むセル" '1つ目のマッチセルを検索 Set hit = Range("A1:A18").Find("wa") '1つ目のマッチセルを記憶 Set bkhit = hit Do   'デバッグ表示   Debug.Print hit.Address   'マッチしたセルを変数へ格納   If myRng Is Nothing Then     Set myRng = hit   Else     Set myRng = Union(myRng, hit)   End If   '次のマッチセルを検索   Set hit = Range("A1:A18").FindNext(hit)   '1つ目のマッチセルアドレスと一致したら終了 Loop Until bkhit.Address = hit.Address Debug.Print "Step2---Step1から0を含むセル" '1つ目のマッチセルを検索 Set hit = myRng.Find("0") '1つ目のマッチセルを記憶 Set bkhit = hit Do   'デバッグ表示   Debug.Print hit.Address   '次のマッチセルを検索   Set hit = myRng.FindNext(hit)   '1つ目のマッチセルアドレスと一致したら終了 Loop Until bkhit.Address = hit.Address End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA 特定もセルに入力で実行

    下記のコードを実行した際は問題なく実行されるのですが これを特定のセルに値が入力された際に動かそうとするとエラーになってしまいます。 Sub PaintTargetCharacter() Dim FoundCell As Range, FoundCell2 As Range Dim Addr As String Dim Addr2 As String Dim SearchArea As Range Dim SearchArea2 As Range Application.ScreenUpdating = False ActiveCell.Interior.ColorIndex = 0 '検索対象範囲 Set SearchArea = Worksheets("G番情報").Range("AE6:BG6") '検索実行 Set FoundCell = SearchArea.Find(What:=ActiveCell.Offset(0, -1), LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub Set SearchArea2 = Range(FoundCell.Offset(1, 0), FoundCell.Offset(33, 0)) Set FoundCell2 = SearchArea2.Find(What:=ActiveCell, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) If FoundCell2 Is Nothing Then Exit Sub FoundCell2.Copy Destination:=ActiveCell Application.ScreenUpdating = True End Sub 当然、特定のセルで値を入力後エンターキーを押すとアクティブセルは下に下がってしまうので Private Sub Worksheet_Change(ByVal Target As Excel.Range) Target.select Call PaintTargetCharacter End Sub としているのですが Set FoundCell = SearchArea.Find(What:=ActiveCell.Offset(0, -1), LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) の部分でエラーが起きてしまいます。 また停止してシートに戻るとセルのカーソル表示が消えてしまいます。 この現象はシートを閉じて再度開くと直りますが なにかエラーと関係しているのでしょうか? 初心者なのでおかしな部分が多々あると思います。 ご指摘などあれば宜しくお願いします。

  • FIND関数について教えてください

    EXCEL VBAを使って、検索ツールを作成中です。 1,sheet1のセルA1に入力されたものをsheet2,3の特定の列から検索して、結果のすべてをsheet1 A2以下に表示する。 2,1の検索結果(A2以下)をそれぞれsheet2,3から更に検索する。  ※sheet2,3のA列からsheet1A1を検索し、同じ行のC,D列のデータをsheet1A2以下に持ってくる  ※A2以下の検索結果は複数。sheet2,3のA列からsheet1A2以下を検索し、C列から横に更なる検索結果があればそれを表示して行きたい。 まず書いたのは下記のようなもの Sub 検索() Dim FoundCell As Range, FirstCell As Range Set FoundCell = Cells("A:A") .Find(What:=sh1.range("A1").value) If FoundCell Is Nothing Then MsgBox "見つかりません" Exit Sub Else Set FirstCell = FoundCell FoundCell.Resize(1, 2).Copy Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Do Set FoundCell = Cells.FindNext(FoundCell) If FoundCell.Address = FirstCell.Address Then Exit Do Else FoundCell.Resize(1, 2).Copy Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Loop End Sub 検索1()として If FoundCell Is Nothing Then MsgBox "見つかりません" Exit Sub を、 If FoundCell Is Nothing Then 検索2 と表記を変えて実行したのですが、見つからなかった場合、「見つかりません」のメッセージと共に「実行エラー5」で「 Set FoundCell = Cells.FindNext(FoundCell)」が示されます。 また、A2以下という曖昧な検索セルを指定する方法が分かりません。  set str=sheet1.Cells(i,1).value というようなこともしてみたのですが、エラーになってしまいました。 なにかアイディアを教えてください。

  • FINDで複数ヒットする場合

    EXCELで 範囲(A1:J2)で「東京」が存在する最初の列番号は以下で求められますが 範囲内には、他にも「東京」が複数ヒットします。 その場合は、どのようなコードになりますか ? 作業手順として考えたのは 最初に見つけた「東京」の次の列からを検索範囲に変更して次の「東京」をFIND 同じように検索範囲を次々と変更して最終的に「東京」が見つからなかったらFINDを終了すれば良さそうですが? 又、 他に良いコードがあれば教えてください。 Sub FindColumns() Dim searchString As String Dim searchRange As Range Dim foundCell As Range Dim columnNumbers As String ' 検索する文字列を指定 searchString = "東京" ' 検索範囲を指定 Set searchRange = Range("A1:J2") ' 検索を実行 Set foundCell = searchRange.Find(What:=searchString, LookIn:=xlValues, LookAt:=xlPart) If foundCell Is Nothing Then MsgBox "「東京」が見つかりませんでした。" Else MsgBox "ヒットした列番号: " & foundCell.Column End If End Sub

  • 「実行時424 オブジェクトが必要です」が出ます

    全く理解できていない初心者です。 あるサイトで見つけたマクロです。 「検索結果のセルをすべて選択する」 Sub SelectTargets() Dim Target As String Dim FoundCell As Range, SearchArea As Range Dim Addr As String Dim FoundAddr() As String Dim i As Long Target = Application.InputBox("検索文字列入力", "検索", Type:=2) If Target = "False" Then Exit Sub Set SearchArea = ActiveSheet.UsedRange * Set FoundCell = SearchArea.Find(what:=Target, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) If FoundCell Is Nothing Then Exit Sub Addr = FoundCell.Address Do ReDim Preserve FoundAddr(i) '配列の内容を維持したまま再宣言 FoundAddr(i) = FoundCell.Address '検索結果のアドレスを配列に格納 Set FoundCell = SearchArea.FindNext(After:=FoundCell) i = i + 1 If FoundCell Is Nothing Then Exit Do Loop Until FoundCell.Address = Addr '配列に格納されたアドレスをカンマ区切りで結合し、セル範囲を一括選択 Range(Join(FoundAddr, ",")).Select '---(1) End Sub ↑家のエクセル(2010)では完璧でできるのですが、会社のエクセル(2003)では、「実行時424 オブジェクトが必要です」とエラーメッセージが出ます。 コードの入力ミスがありました。 上から2行目  Dim foundcell As Range, sercharea( 正 seacharea)As Range 後は、入力ミスはなさそうなのですが、実行キーを押すと 「実行時424 オブジェクトが必要で」と出ます。 黄色のマーカーが出るのが、*印を置いた ↓に出ます。 Set FoundCell = SearchArea.Find(what:=Target, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) 後、気になるのがコードを入力して 「target」「searcharea」「foundcell」「foundaddr」「addr」などが頭文字が大文字になりません。 無理やり大文字にしてみたりしましたが… 「オブジェクトが必要です」に関係あるのかないのかも分かりませんが、なぜ、エラーが出てしまうのか? 入力ミスが原因なのか? 何が足りないのか?何か不要なコードがあるのか? どの用意すればいいのか教えていただけませんか? よろしくお願いします。

  • Union メソッド ?

    いつもこちらでお世話になっております。 全くのど素人で申し訳ありません。 会社でエクセル2003を使用しています。 データを一括検索したく、あるサイトでこのマクロを見つけました。 「検索結果のセルをすべて選択する」 Sub SelectTargets() Dim Target As String Dim FoundCell As Range, SearchArea As Range Dim Addr As String Dim FoundAddr() As String Dim i As Long Target = Application.InputBox("検索文字列入力", "検索", Type:=2) If Target = "False" Then Exit Sub Set SearchArea = ActiveSheet.UsedRange Set FoundCell = SearchArea.Find(what:=Target, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) If FoundCell Is Nothing Then Exit Sub Addr = FoundCell.Address Do ReDim Preserve FoundAddr(i) '配列の内容を維持したまま再宣言 FoundAddr(i) = FoundCell.Address '検索結果のアドレスを配列に格納 Set FoundCell = SearchArea.FindNext(After:=FoundCell) i = i + 1 If FoundCell Is Nothing Then Exit Do Loop Until FoundCell.Address = Addr '配列に格納されたアドレスをカンマ区切りで結合し、セル範囲を一括選択 Range(Join(FoundAddr, ",")).Select '---(1) End Sub 補足として Rangeプロパティの引数に指定する文字列には文字数制限があるため、検索対象のセルが多いと(1)でエラーが発生します。その場合はUnionメソッドを使用して対象セルを選択すると良いでしょう。 と、補記があり調べてみると「変数Targetの文字数が255を超えたとき」エラーとなるとのこと。 「Union メソッド」をいろいろ調べて試してみたのですが… やはり、さっぱり全くできません。 ご教授いただけませんでしょうか?

  • Find,Offsetを使ってセルを指定する方法

    エクセルVBAのことで伺います。 以下の記述は、「D3からQ3までのセルの中で「年」と入ったセルの左横のセルを探し、 その中の値(西暦の年が入っています)を、G4からI100までの範囲に入力される月日 の年として置き換える」といったものなのですが、エラーが出てしまいます。 「実行時エラー424、オブジェクトが必要です。」とのメッセージが表示され、デバックを クリックすると、「Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1).Select」 が黄色く強調表示されています。 プログラムの記述をどのように修正すれば良いか、どなたかお教えください。 よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim FoundCell As Range Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1).Select With Target If Intersect(Target, Range("G4:I100)) Is Nothing Or Target.Count <> 1 Then Exit Sub If IsDate(.Value) Then If Year(.Value) <> FoundCell Then Application.EnableEvents = False .Value = DateSerial(FoundCell, Month(.Value), Day(.Value)) Application.EnableEvents = True End If End If End With End Sub

  • Excel VBA テキストボックスを検索

    テキストボックス3に数値を入力し ExcelのA列にあるか検索をかける。 ある場合は、B列の同じ行に 「みーつけた!」と入力。 その設定で組んでみたのですが、 テキストボックス3にデータを6桁入力しようとすると 6桁目にオーバーフローエラーが出ます。 このプログラムの何処がおかしいのでしょうか? Private Sub TextBox3_Change() Dim Number As Integer If TextBox3.Value <> "" Then '空じゃない場合 Number = TextBox3.Value Call 検索(Number) MsgBox TextBox3.Value End If End Sub Sub 検索(ByVal Number As Variant) Dim FoundCell As Range Set FoundCell = Range("A:A").Cells.Find(What:=Number, lookat:=xlPart) If FoundCell Is Nothing Then Else FoundCell.Activate Range("O" & ActiveCell.Row).Value = "みーつけた!" End If End Sub

  • マクロFind検索で見つからなかった時の対処

    エクセル2013です 以下のコードを作成しましたが .Rowが色で塗られ 「型が違います」でERRになります。 .Columnの方はERRでなく なぜ.Rowの方がERRなのでしょうか? よろしくお願いします。 Dim 検索行番号 As Range Dim 判定列番号 As Range Dim 検索列番号1 As Range Dim 検索列番号2 As Range Set 検索行番号 = Rows(1).Find("みかん").Column If 検索行番号 Is Nothing Then MsgBox "みかんが有りません。" End If Exit Sub Set 判定列番号 = Rows(1).Find("りんご").Column If 判定列番号 Is Nothing Then MsgBox "りんごが有りません。" End If Exit Sub Set 検索列番号1 = Range("B:B").Find("大箱").Row If 検索列番号1 Is Nothing Then MsgBox "大箱が有りません。" End If Exit Sub Set 検索列番号2 = Range("B:B").Find("小箱").Row If 検索列番号2 Is Nothing Then MsgBox "小箱が有りません。" End If Exit Sub

  • エクセル マクロ 同じ数値のセルを検索

    教えてください。 sheet2のG1に3と入力しマクロを実行すると、sheet1のA列(通し番号)の3~5の行をコピーして、sheet2のA2にペーストしたいと思ってます。 (sheet1) 番号 数値1 数値2 数値3 数値4   1     5   10   15   20   2    10   15   20   25   3     5   15   20   20   4    10   20   15   25   5     10   15   20   20 ・    ・    ・    ・    ・ ・    ・    ・    ・    ・            ↓ (sheet2) 番号 数値1 数値2 数値3 数値4      3   3    5   15   20    20   4   10   20   15    25   5   10   15   20    20 イメージとしては上の通りです。 まずは、同じsheet1のG1に3を入力して、A列の3(A4)を検索することを目標にしましたが、ここの時点でこけてしまいました。。 Sub 同じ数値のセルを検索() Dim 番号 As String Dim FoundCell As Range Range("A1").Select 番号 = "G1" Set FoundCell = Cells.Find(What:="番号") If FoundCell Is Nothing = False Then FoundCell.Select End If End Sub 笑われると思いますが、これではダメでした。 どうかお助けしていただけないでしょうか。

  • 結合していないセルの検索?

    複数シートから指定の1行を別のシートに行を追加して貼り付けをしたいのですが、コピー元が結合していたり、していなかったりとバラバラなため、貼り付け先がぐちゃぐちゃになってしまいお手上げ状態です。 セルの結合は、行は最大2行ですが、列は1列~6列など添付画像のように統一されていません。 例えば、B3~AC4の中でセルの結合が解除されている場所を検索して、ヒットしたら手動でその部分を結合させるということはできますか? もしくは他に良い方法はありますか? ご教示よろしくお願いいたします。 スクリプトは見様見真似で以下のように書きました。 Sub コピー() Dim sh1 As Worksheet Dim FoundCell As Range, FirstCell As Range '「項 目」という文字列を検索  For i = 1 To Worksheets.Count - 2 '←最大シート数  Sheets(Sheets(i).Name).Select  Set FoundCell = Cells.Find(What:="項*目")    If FoundCell Is Nothing Then       MsgBox "見つかりません"     Exit Sub     Else       ’入力されているセルを右に向かって探す     Set FirstCell = FoundCell     Set FoundCell = FoundCell.End(xlToRight)        '指定の範囲を貼り付け先にコピー        FoundCell.Resize(2, 25).Copy     Sheets("SheetA").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll     Application.CutCopyMode = False   End If  Next i End Sub

印字できなくなった
このQ&Aのポイント
  • 詰まった紙を取り除いた後、印字できなくなりました。
  • Windows11で接続されており、USBケーブルを使用しています。
  • 関連するソフト・アプリはありません。電話回線の種類は分からないです。
回答を見る

専門家に質問してみよう