Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10067 / 13646 ツリー ←次へ | 前へ→

【23838】別のシートから検索して・・ saho 05/4/5(火) 16:54 質問[未読]
【23844】Re:別のシートから検索して・・ Kein 05/4/5(火) 18:48 回答[未読]
【23845】Re:別のシートから検索して・・ Kein 05/4/5(火) 18:50 発言[未読]
【23887】Re:別のシートから検索して・・ saho 05/4/6(水) 14:23 質問[未読]
【23888】Re:別のシートから検索して・・ Kein 05/4/6(水) 15:04 回答[未読]
【23907】Re:別のシートから検索して・・ saho 05/4/7(木) 11:08 質問[未読]
【23909】Re:別のシートから検索して・・ Jaka 05/4/7(木) 11:49 回答[未読]
【23912】Re:別のシートから検索して・・ Kein 05/4/7(木) 12:51 回答[未読]
【23914】Re:別のシートから検索して・・ saho 05/4/7(木) 13:03 お礼[未読]

【23838】別のシートから検索して・・
質問  saho  - 05/4/5(火) 16:54 -

引用なし
パスワード
   こんなデータがシート1にあります。

  A 
1 A
2 B
3 C
4 D



それで、シート2に

    A    B
1 A、B、C  1
2 D、E、F  2
3 G、H、I  3
4 K、L、M  4



とあるとすると、
シート1のセルA1のAをシート2から検索して、隣のB列のセルの数字を拾いたいのですが、どのようにしたらよろしいでしょうか?

シート2のA列のデータは1つのセルにデータが入っています。

【23844】Re:別のシートから検索して・・
回答  Kein  - 05/4/5(火) 18:48 -

引用なし
パスワード
   Dim FDt As String
Dim FR As Range

FDt = Sheets("Sheet1").Range("A1").Value
Set FR = Sheets("Sheet2").Range("A:A").Find(FDt, , xlValues, xlPart)
If FR Is Nothing Then
  MsgBox "検索値は見つかりません", 48: Exit Sub
Else
  MsgBox "検索値を入力した隣のセルの値は" & vbLf & _
  FR.Offset(, 1).Value & " です"
  Set FR = Nothing
End If

てな感じですね。 Findメソッドの引数に xlPart を渡すことによって、部分一致の
検索が出来る。というのがポイントです。

【23845】Re:別のシートから検索して・・
発言  Kein  - 05/4/5(火) 18:50 -

引用なし
パスワード
   >検索値を入力した

検索値が見つかった

・・ちょっと日本語がおかしいので、直しておいてください。

【23887】Re:別のシートから検索して・・
質問  saho  - 05/4/6(水) 14:23 -

引用なし
パスワード
   ▼Kein さん:

シート1のA列のデータが例えば、

  A
1 
2 A


5 B
6 C

8 D

・ ・
・ ・

となっているとして、
連続して(A→○、B→○・・・)、シート2の隣のセルを調べたい場合は
どのようにしたらよろしいでしょうか?

【23888】Re:別のシートから検索して・・
回答  Kein  - 05/4/6(水) 15:04 -

引用なし
パスワード
   Sheet1のA列の値に重複がないとすれば・・

Dim MyR As Range, C As Range, FR As Range

Set MyR = Sheets("Sheet1").Range("A:A").SpecialCells(2)
For Each C In MyR
  Set FR = Sheets("Sheet2").Range("A:A") _
  .Find(FDt, , xlValues, xlPart)
  If Not FR Is Nothing Then
   Debug.Print FR.Offset(, 1).Address(0, 0) & _
   " : " & FR.Offset(, 1).Value
   Set FR = Nothing
  End If
Next
Set MyR = Nothing

重複があるなら・・

>Set MyR = Sheets("Sheet1").Range("A:A").SpecialCells(2)


With Sheets("Sheet1")
  With .Range("A1", .Range("A65536").End(xlUp))
    .Offset(, 26).Formula = "=IF(COUNTIF($A$1:$A2,$A2)=1,1,"""")"
    Set MyR = .SpecialCells(3, 1).Offset(, -26)
    .Offset(, 26).ClearContents
  End With
End With

というふうに変更します。
AA列を作業列として数式を埋め込んで重複を判定し、ループ処理の際に排除しています。
検索結果はイミディエイトウィンドウに出力されます。VBE画面で Ctrl + G を押して
確認できます。

【23907】Re:別のシートから検索して・・
質問  saho  - 05/4/7(木) 11:08 -

引用なし
パスワード
   ▼Kein さん:

回答ありがとうございます。
何度もすみません。

重複がない場合でためしてみましたが、

イミディエイト画面に

B4 :
B4 :
B4 :
B4 :

と表示されました。

何がいけないかわかりません・・。

あとシート1のB列に結果を表示することはできないでしょうか??

【23909】Re:別のシートから検索して・・
回答  Jaka  - 05/4/7(木) 11:49 -

引用なし
パスワード
   こんにちは。

どんな結果になれば良いのか解ってませんが...。
Sheet1のB1に下記関数を入れ、必要な所までフィル。

=IF(ISNA(MATCH("*"&A1&"*",Sheet2!A:A,0)),"",INDIRECT("Sheet2!B"&MATCH("*"&A1&"*",Sheet2!A:A,0)))


【23912】Re:別のシートから検索して・・
回答  Kein  - 05/4/7(木) 12:51 -

引用なし
パスワード
   間違いがありました。
>Set FR = Sheets("Sheet2").Range("A:A") _
  .Find(FDt, , xlValues, xlPart)


Set FR = Sheets("Sheet2").Range("A:A") _
  .Find(C.Value, , xlValues, xlPart)

と、修正して下さい。
>シート1のB列に結果を表示
結果としては

Dim MyR As Range, C As Range, FR As Range

Set MyR = Sheets("Sheet1").Range("A:A").SpecialCells(2)
For Each C In MyR
  Set FR = Sheets("Sheet2").Range("A:A") _
  .Find(C.Value, , xlValues, xlPart)
  If Not FR Is Nothing Then
   C.Offset(, 1).Value = FR.Offset(, 1).Value
   Set FR = Nothing
  End If
Next
Set MyR = Nothing

【23914】Re:別のシートから検索して・・
お礼  saho  - 05/4/7(木) 13:03 -

引用なし
パスワード
   お2人とも、どうもありがとうございました。

ともにうまくいきました!!
大変参考になりました。
ありがとうございましたm(_ _)m

10067 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free