[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Find エラー 「オブジェクトが必要です」 解決方法』(手はおひざ)
下記のようなコードを組んだ際、
エラーが起きてしまうのですが
どのように修正したらよいか
アドバイスがほしいです。
幼稚園という名前の文字を
2行目から探して
そのひとつ下を選択する
Range("2:2").Find ("幼稚園")
foundcell.Offset(1, 0).Select
よろしくおねがいします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
foundcell が、多分 Nothing 仮に記述があっていても、幼稚園が無ければ、同じエラーに(要エラー対策) https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/range-find-method-excel 参考に 他にもFindは注意点があるようです。 あと 変数は宣言(定義)された方がいいかと存じます Option Explicit など検索してみてください。
(隠居じーさん) 2018/04/09(月) 12:17
2行目のfoundcellが定義されていないために発生しています。 検索文字列が必ず存在しているのが分かっているなら
Range("2:2").Find("幼稚園").Offset(1).Select
だけでいいですが、きちんとエラー処理までするなら
Sub sample() Dim foundcell Set foundcell = Range("2:2").Find(what:="幼稚園", lookat:=xlWhole) If Not foundcell Is Nothing Then foundcell.Offset(1).Select End Sub
という風にしたほうがいいでしょう。 (ろっくん) 2018/04/09(月) 12:26
Dim FoundCell As Range Set FoundCell = Range("2:2").CurrentRegion.Find(What:="幼稚園") FoundCell.Offset(1, 0).Select
また何かあったらこの掲示板を使わせていただきます。
ありがとうございました!!
(手はおひざ) 2018/04/09(月) 13:12
.CurrentRegion って・・2行目だけの検索じゃなかったんですか? (ろっくん) 2018/04/09(月) 13:26
ついでにもう一つ聞かせて下さい。
Sheets("シート1").Select Dim rngFrom As Range Dim rngTo As Range With Worksheets("シート1") Set rngFrom = .Range(.Range("AF2:AO2"), .Cells(.Rows.Count, "AO").End(xlUp)) End With
With Worksheets("シート2") Set FoundCell = Range("2:2").Find(What:="保育園") Set rngTo = .Cells(.Rows.Count, "CB").End(xlUp).Offset(1, -9) End With
rngFrom.Copy rngTo.PasteSpecial Paste:=xlPasteValues
上記コードの
Set rngTo = .Cells(.Rows.Count, "CB").End(xlUp).Offset(1, -9)
のCBにFoundCellがくるようにしたいのですが、
どのように修正したらよいでしょうか。
(手はおひざ) 2018/04/09(月) 13:38
Foundcell.Column でいいですよ。 (ろっくん) 2018/04/09(月) 13:49
With Worksheets("シート2") Set FoundCell = Range("2:2").Find(What:="保育園") Set rngTo = .Cells(.Rows.Count, Foundcell.Column).End(xlUp).Offset(1, -9) End With
この様に入れたところ、
オブジェクト変数またはwithブロックが設定されていませんというエラーが出てきてしまいます。。。
(手はおひざ) 2018/04/09(月) 14:13
書き方は合っていますよ。
2行目に検索文字列は存在していますか? Set FoundCell = Range("2:2").Find(What:="保育園") ^^ ←ここに「.」が必要なのではないでしょうか。 Set FoundCell = .Range("2:2").Find(What:="保育園") (ろっくん) 2018/04/09(月) 14:24
Range("C3:O" & Cells(3).CurrentRegion.Rows.Count).Select
Range(Selection, Selection.End(xlDown)).Select Selection.Copy
Sheets("シート1").Select n = Cells(Rows.Count, "B").End(xlUp).Row + 1 Range("B" & n).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
Bの部分も
Set FoundCell = Range("2:2").Find(What:="小学校")
でFoundCellを入れたいのですが
どのように入れたら良いかぜひ教えて下さい!
(手はおひざ) 2018/04/09(月) 14:57
上でできたのになぜでしょう・・。 Cellsの場合は"B"のところをそのままFoundCell.Columnで。 Rangeでやる場合はCellsに変えて、行列を入れ替える。 Range(FoundCell.Column & n)とはできないのでCells(n,FoundCell.Column) としてください。 もちろん、Set FoundCell = Range("2:2").Find(What:="小学校") の実行後に。
(ろっくん) 2018/04/09(月) 16:00
(隠居じーさん)さんが指摘されている部分も研究してみるとよいかもです。
【参考】
検索に失敗するとき(Findメソッドの引数省略時に起きる失敗)
https://www.moug.net/tech/exvba/0150111.html
踏まえて、2行目にあるって解っていて、Rangeオブジェクトとして取得する必要性が薄いなら、
Application.Matchの方がいいのかも。。。
(もこな2) 2018/04/09(月) 22:34
お返事ありがとうございます。
> foundcell が、多分 Nothing
仮に記述があっていても、幼稚園が無ければ、同じエラーに(要エラー対策)
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/range-find-method-excel
参考に
他にもFindは注意点があるようです。
あと
変数は宣言(定義)された方がいいかと存じます
Option Explicit
など検索してみてください。
上記見落としてました。
業務の都合上、なるべく早く作り上げなきゃいけなかったので
理解よりもまずは組み立ててみるところから始めています。
>検索に失敗するとき(Findメソッドの引数省略時に起きる失敗)
https://www.moug.net/tech/exvba/0150111.html
上記リンクを拝見しました。
Findだと手動検索などをした際に
設定がそのまま残ってしまう可能性があるということですね!
Application.Matchについて
簡単に調べてみたのですが
どのように当てはめていいかわかりませんでした。
人に聞いてばかりなのは良くないとは思うのですが
可能であれば教えて頂けますと助かります。。。
(手はおひざ) 2018/04/10(火) 10:03
ありがとうございました!
元となる知識がさっぱりないので
大変助かりました!
いまは組み立てに集中し、
落ち着いたら改めて学習してみます!
(手はおひざ) 2018/04/10(火) 10:37
↓コードを標準モジュールに貼り付けて「STOP」以降をステップ実行して研究してみてください。
Sub 一致するデータを探す() Dim buf As Variant, i As Long
'テスト用データ生成 With Workbooks.Add.Worksheets(1).Range("A1") For Each buf In Array("あいう", "えおか", "きくけ", "こさし", "すせそ") .Offset(i, 0).Value = buf i = i + 1 Next buf End With
Stop
Dim MyRNG As Range, MyRow As Variant
'FINDメソッドでアプローチ With Range("A1:A5") Set MyRNG = .Cells.Find _ (What:="く", LookIn:=xlValues, LookAt:=xlPart) If Not MyRNG Is Nothing Then MsgBox MyRNG.Row & "行目でみつかりました" End If End With
'MATCH関数でアプローチ MyRow = Application.Match("*く*", Range("A1:A5"), 0) If Not IsError(MyRow) Then MsgBox MyRow & "行目でみつかりました" End If
'For〜NEXTによるループでアプローチ For MyRow = 1 To 5 Step 1 If Cells(MyRow, "A").Value Like "*く*" Then MsgBox MyRow & "行目でみつかりました" Exit For End If Next MyRow
'For Each〜NEXTによるループでアプローチ For Each MyRNG In Range("A1:A5") If MyRNG.Value Like "*く*" Then MsgBox MyRNG.Row & "行目でみつかりました" Exit For End If Next MyRNG
End Sub
(もこな2) 2018/04/10(火) 12:45
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.