[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.