Page 564 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼検索したいのですが・・(FINDなど。) kanon 03/1/5(日) 17:01 ┗Re:検索したいのですが・・(FINDなど。) りん 03/1/5(日) 17:57 ┗Re:検索したいのですが・・(FINDなど。) kanon 03/1/5(日) 18:47 ┗Re:検索したいのですが・・(FINDなど。) りん 03/1/5(日) 20:35 ┗Re:検索したいのですが・・(FINDなど。) kanon 03/1/17(金) 15:23 ─────────────────────────────────────── ■題名 : 検索したいのですが・・(FINDなど。) ■名前 : kanon ■日付 : 03/1/5(日) 17:01 -------------------------------------------------------------------------
はじめまして。今日こちらを知りました。今後は 活用させていただこうと思っています。 私はVBA超初心者で、マニュアルやHELPと格闘しながら作成しているのですが、 ちょっとハマって困ってます。 【貼付元】 A | B | C 1 "555" \100 2 "666" \200 3 "777" \300 【貼付先】 A | B | C(非表示) 1 =C1 "666" 2 =C2 "777" 3 =C3 "888" 上記のようにデータがあります。 貼付元のA列のデータを元に、貼付先を検索し、該当するデータが 有れば、その横のB列に金額を貼り付ける、というものです。 ただし、貼付先のC列は非表示となっておりシート自体も保護されていて 表示させることができません。(他人が作ったのでパスワードも分からない。) なので、検索をする時は貼付先A列の値を検索したいのです。 マニュアルを見ながらFINDの例題に従って宛てはめて見たのですが どうもうまくできなくて結果がNOTHINGになってしまいます。 単純な間違いをしている確立はかなり高い(笑)と思われるのですが でもどうしていいのやら・・・。 数式を値で検索するということが出来ないとは思えなくて。 FINDでなくても他のやり方でもいいのです、VBAでかければ。 どなたかあきれずにアドバイスいただけると嬉しいです。 よろしくお願いします。 |
kanon さん、こんばんわ。 >数式を値で検索するということが出来ないとは思えなくて。 Findメソッドの引数のうち、 LookIn:=xlValues とすれば値として検索できます。 |
りんさん、早速のレスありがとうございます。 ただ、xlvalueは指定してあるのです。 Findメソッドは、マニュアルにある通りに書いてはあるので 大丈夫かと思うのですが、Findの直前の検索先の指定に 何か問題があるのかな?と思っているのですが。 Dim CHEAK1 As Range Set CHEAK1 = Workbooks("【貼付先】.xls").Worksheets("【貼付先】").Range("A:A").Find(WHAT:=MOTOCELL.Value, LookIn:=xlValues, LOOKAT:=xlPart) -------------- ここには手前で検索する文字列をセットしている こんな感じで書いているんですけど、何か違いますか? MOTOCELLは、手前でセットした直後表示させて中身を確認したら 該当する検索したい文字列が表示されました。 Find後、If文判定で、NOTHINGに振り分けられているようです。 本当は直接書いたものを見せたいのですが、会社のなので、 やめときます。あぁ・・、こんなことで何日も悩みっぱなしです。 またまたよろしくお願いしますm(_)m |
kanon さん、こんばんわ。 とりあえず。 非表示&保護の列でもFindは可能です。 見つかっても編集やSelect(Activate)ができないというだけで。 検索の対象を変更して簡素化してみました。 Sub Test() Dim wstr As String, ws1 As Worksheet, ws2 As Worksheet, r1 As Range 'この二つを対象のシートに変えてください Set ws1 = ThisWorkbook.Worksheets("貼付元") Set ws2 = ThisWorkbook.Worksheets("貼付先") ' Rmax& = ws2.Range("A65536").End(xlUp).Row For RR& = 1 To Rmax& wstr = ws2.Cells(RR&, 1).Value '値の参照は非表示列でも可なんですけどね Set r1 = ws1.Columns("A:A").Find(What:=wstr, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns) If Not r1 Is Nothing Then ws2.Cells(RR&, 2).Value = r1.Offset(0, 1).Value End If Next ' Set ws1 = Nothing: Set ws2 = Nothing End Sub (V)LookUpを使うの方法の方が簡単だったりして。 >本当は直接書いたものを見せたいのですが、会社のなので、 >やめときます。あぁ・・、こんなことで何日も悩みっぱなしです。 せっかくのお休みなのに...。 |
りんさん、こんにちわ。 遅くなって申し訳ありません、丁寧なご回答ありがとうございましたm(_)m あれから、りんさんのを参考にして引き続きちまちまこつこつやって なんとか作れました。 (が、Findがうまくいかなかったのは検索していた 文字が微妙に違ったようでした (^^;)・・・なんと情けない。) 私はCOBOLをメインにやっていて(そろそろ化石か・・?) そっちのプログラミングも同時にやっていたので ドタバタしつつも、連動したテストも完了して 今は細かい気になる点を直しています。 VBもほとんど分かってなかったので、今回はとても勉強になりました。 といっても、みなさんの足元にも及ばず基礎の基礎って段階です。 ヘルプやマニュアル、そしてこのようなHPがなくては生きていけません(笑)。 でもこれを機にもっと学んでいきたいと思います。 これからもお世話になりますm(_)m |