[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Findメソッド』(眠神)
大量の住所データから検索したい名前の人を入力して住所や郵便番号を抽出したく、コードを書いてるのですが、どうしても"該当部分がありませんでした"と表示されてしまいます。どなたか御教授頂けると本当に嬉しいです
ちなみにこんな感じで書いてます
sub データの検索()
Dim fndRng As Range , srcRng As Range
'検索結果を書き出す"住所Findメソッド"シートのセル範囲"B5:N5"の値をクリア worksheets("住所Findメソッド").Range("B5:N5").clearcontests '変数srcRngにワークシート"住所支払"のB3列目(「西暦」)を含む Set srcRng = worksheets("住所支払").Range("B3").CurrentRegion.Columns(3) '検索キーワードはセルF2の値で完全一致検索を行う '変数srcRngの範囲を検索し、最初に見つかったセルを変数fndRngに代入 Set fndRng = srcRng.Find(what:=Range("F2").value , lookat:=xlwhole) '検索値が見つかった場合(fndRngがNothingでない場合) If Not fndRng Is Nothing Then
'見つかったセルとワークシート"住所支払"のB3:N3の値をワークシート"住所Findメソッド" シートのB5:N5に代入
cells(5,"B").value = fndRng.value
cells(5,"C").value = fndRng.Offset(0,1).value cells(5,"D").value = fndRng.Offset(0,2).value cells(5,"E") .value = fndRng.Offset(0,3).value cells(5,"F").value = fndRng.Offset(0,4).value cells(5,"G").value = fndRng.Offset(0,5)value cells(5,"H").value = fndRng.Offset(0,6)value cells(5,"I").value = fndRng.Offset(0,7).value cells(5,"J").value = fndRng.Offset(0,8).value cells(5,"K").value = fndRng.Offset(0,9).value cells(5,"L").value = fndRng.Offset(0,10).value cells(5,"M").value = fndRng.Offset(0,11).value cells(5,"N").value = fndRng.Offset(0,12).value '検索値が見つからなかった場合 Else Msgbox "該当部分がありませんでした" End If 'セルの参照を削除 Set fndRng = Nothing Set srcRng = Nothing End sub
なんかごちゃごちゃしててごめんなさい 💦
< 使用 Excel:Excel2016、使用 OS:unknown >
>どうしても"該当部分がありませんでした"と表示されてしまいます。
「どうしても」と言うくらいですから、一致すべきものが存在していると確信しているんですよね?
でも回答側からすると、思い違いでしょ、と勘ぐるのが捜査の第一歩です。
一致すべきと思う根拠を示してください。 ※「目で見て確信している」と言うのは無し。もっとロジカルに説明してください。 ○○の数式で両者が同じであることは確認している、とか。
(半平太) 2020/06/23(火) 19:44
半平太さんアドバイスありがとうございます。 例えで言いますと、ワークシート"住所Findメソッド"srcRngの範囲の中に、眠神という名前の人がいて、 "住所支払"シートのF2セルに、眠神と入力すると、"住所支払"シートの"B5:N5"の表に、眠神に関する 住所や、郵便番号、前住所など、情報が出力されるといった内容です。
(眠神) 2020/06/23(火) 19:54
質問のほうは、ステップ実行して検証したうえでの質問でしょうか?
スマホなので、コード自体の検証はしてませんが、lookinを省略しているのが気になります。
(もこな2) 2020/06/23(火) 20:05
いや、眠神さんのコードの意味をお聞きしている訳じゃないです。 それは、おいおい手を付けて行きます。
今は、もっと取っ掛かりの部分です。
「srcRngの範囲の中に、眠神という名前」と「F2セルに、眠神」と入力したデータが 同じであることの証明です。
1.普通は、=左のセル=F2 と言う数式を入れてTrueと出ますよ。と言う確認が欲しいです。
2.あと、左のセルは生データですか? それとも数式で出しているデータですか?
3.取り敢えず、lookinのパラメタに xlValues を指定してみた結果も報告してください。
(半平太) 2020/06/23(火) 20:29
なので、Trueを使っての操作はしておりません。
lookinのパラメーターにxlvaluesを入れるというのは、どういった事になるのでしょうか?
(眠神) 2020/06/23(火) 20:56
>lookinのパラメーターにxlvaluesを入れるというのは、どういった事になるのでしょうか?
例 ↓ Set fndRng = srcRng.Find(what:=Range("F2").Value, lookat:=xlWhole, LookIn:=xlValues)
>Trueを使っての操作はしておりません。 上述の変更で旨く行かなかった場合の後でもいいですが、
「操作」を入れるのではなく、トラブルシューティングの一環としての確認作業です。
問題を一つ一つつぶして行かないと原因が究明できません。
下手な鉄砲を数撃って原因を探りあてるのは(旨く行けばいいですが) 遠回りになることも多々あります。
あと、これはどうですか? ↓ > 2.あと、左のセルは生データですか? > それとも数式で出しているデータですか?
(半平太) 2020/06/23(火) 21:06
ぶつかりましたが、そのままで失礼します。
こういった検索系の質問でよくあるのが、
セル表示が同じに見えても、どちらかの値に空白やcr、lfとか
目に見えないものがあると一致しないため、
まず、確実に一致するデータがあることから始めないと、
なにがなんだかわからなくなるので、確認されてはいかがでしょうか。
半平太さんが提示している通り、
例えば、F2セルとB5セルが一致していれば
同じシートのどこかのセルに
=F2=B5
と数式を入力してTRUEが表示されれば、
一致していますので。
(tkit) 2020/06/23(火) 21:14
■2
PCの前に戻ったので見てみましたが、やっぱりタイプミスしてますよ。
Sub データの検索_整理() Dim fndRng As Range
Worksheets("住所Findメソッド").Range("B5:N5").ClearContents '←★スペルミスを修正 Set fndRng = Worksheets("住所支払").Range("B3").CurrentRegion.Columns(3).Find(what:=Range("F2").Value, lookat:=xlWhole)
If Not fndRng Is Nothing Then Cells(5, "B").Value = fndRng.Value Cells(5, "C").Value = fndRng.Offset(0, 1).Value Cells(5, "D").Value = fndRng.Offset(0, 2).Value Cells(5, "E").Value = fndRng.Offset(0, 3).Value '←★いらないスペースを削除 Cells(5, "F").Value = fndRng.Offset(0, 4).Value Cells(5, "G").Value = fndRng.Offset(0, 5).Value '←★ピリオドわすれを修正 Cells(5, "H").Value = fndRng.Offset(0, 6).Value '←★ピリオドわすれを修正 Cells(5, "I").Value = fndRng.Offset(0, 7).Value Cells(5, "J").Value = fndRng.Offset(0, 8).Value Cells(5, "K").Value = fndRng.Offset(0, 9).Value Cells(5, "L").Value = fndRng.Offset(0, 10).Value Cells(5, "M").Value = fndRng.Offset(0, 11).Value Cells(5, "N").Value = fndRng.Offset(0, 12).Value Else MsgBox "該当部分がありませんでした" End If
End Sub
次投稿へ続く
(もこな2 ) 2020/06/23(火) 21:15
半平太さんへ 何度も申し訳ございません💦 2,の左のセルとは何処の事を指しているのでしょうか? 無知な自分で申し訳ないです💦 (眠神) 2020/06/23(火) 21:29
Sub 修正案() Stop '←ブレークポイントの代わり Dim MyRNG As Range
'どうせ上書きするから不要 かつ '見つからないのにクリアされたら迷惑な気がするのでClearContents 自体を削除
With Worksheets("住所Findメソッド") Set MyRNG = Worksheets("住所支払").Range("B3").CurrentRegion.Columns(3).Find(what:=.Range("F2").Value, LookIn:=xlValues, lookat:=xlWhole)
If MyRNG Is Nothing Then MsgBox "該当部分がありませんでした" Else MyRNG.Resize(, 13).Copy .Range("B5").PasteSpecial Paste:=xlPasteValues End If End With End If
■4
質問とは関係ありませんが、同じ方ではないかもしれませんが、ニックネームで過去ログをみたら話がおわってないように思われるものが見当たります。
(中には、私がコメントしたものもあります。)
いろんな考え方の方がいらっしゃるので無理強いをするつもりはありませんが、同じ方であれば、解決したらならその報告を、どうでもよくなったならその旨書いておいたほうがいいんじゃないですかね・・・・
ヒットしたトピック [[20200421213150]] 『worksheetfunctionのMax関数について』(眠神) [[20200425230304]] 『パス名とブックのシート名全部を出力させたい』(眠神) [[20200506185620]] 『cnt = .Rows.Count - 1』(眠神)
(もこな2 ) 2020/06/23(火) 21:45
(眠神) 2020/06/23(火) 22:01
> なので、改めて、今一度もこな2さん含め、私にアドバイスを頂いた方々に本当に感謝の気持ちを
> 述べたいと思っております。
まとめてじゃなく、それぞれのスレッドに返事(回答への評価等です。挨拶だけでなく)を
してもらえますか?
各スレッドで完結しているべきだと思いますので。
> 私の端末からはExcelの学校のサイトを操作すると、何らかの投稿が反映されないといった
> 事がたまにあるようです。
プレビューしたまま、更新をし忘れているんじゃないですか?
サイト側の問題じゃないと思います。
反映されているか確認をきちんとしていただきたいと思います。
「遠足は、帰宅するまでが遠足です。」とか聞きませんか?
小学生向けだからお子さんがいないと聞かないかもしれませんが。
(γ) 2020/06/24(水) 06:27
私が2番目に提示したものはあくまで別案ですから、そちらを研究されようとしているのであれば、それより先にご自身のコードで何がまずかったのかをキチンと究明すべきです。
■5
ほかのトピックについては、どのトピックも回答者さんとのキャッチボールが1回で済むような内容じゃないと思うのですよね・・・・(なので、あえて"どうでもよくなったなら〜"と書きました。)
結局どうなったんですか?
(もこな2 ) 2020/06/24(水) 08:03
・(シートの記述を省略しているので)標準モジュールならActivesheetを指定したことになってますが、問題ないですか?
・Worksheets("住所支払").Range("B3").CurrentRegion.Columns(3)とされてますが、正しい列(セル範囲)が取得されていますか?
(もこな2) 2020/06/24(水) 08:39
(もこな2) 2020/06/24(水) 12:02
(γ) 2020/06/24(水) 17:47
(1) 「住所支払」シートをアクティブにする (2) B3セルを選択する (3) [Ctrl]と[*]を同時に押す (4) 選択されている範囲を確認する
※文言訂正を反映 2020/06/24(水) 20:28
(もこな2) 2020/06/24(水) 18:56
※ いずれも私見です
■号外2
>シートのVBEを随時比較
言いたいことがよくわかりませんが、さしあたって「■1」「■4」で示したようにFindメソッドの引数を省略しないほうがよいことは理解されたのでしょうか?
さらに、当該部分についてコードは修正してみたのでしょうか?
■号外3
ちなみに、このトピックでのやり取りは↓みたいな感じですよね?
(1) 提示したコードに記述ミスがあった(投稿時にまちがっただけかもしれないが) (2) Findメソッドで値以外を検索している可能性があった (3) CurrentRegionを勘違いしていて、検索対象範囲がそもそも違っていたかもしれない 【←今ココ】
「■5」で言いたかったのは、このトピックでさえこれだけやり取りしてるのですから、ほかのトピックも「お礼が遅くなりましたが、アドバイスで解決できました〜」なんて言える状態になっているとは正直思えないわけです。
にもかかわらず放置されているので、どうでもよくなったならその旨書いておくべきだと言っています。
このトピックにまとめて感謝の意を述べるべきとは言ってません。
(もこな2 ) 2020/06/24(水) 21:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.