dポイントプレゼントキャンペーン実施中!

A列、B列、C列に項目が、D列以降にデータが入っているシートがあります。
具体的には、
 A列:商品名
 B列:地域名
 C列:店舗名
となっていて、ABCの順で昇順にソートがかけられています。

マクロの記録を使って一行だけを検索することは出来たのですが、(Selection.find(What:="商品名"~ となっていました)本当は、"商品名"+"地域名"+"店舗名"が一致するものを検索したいのです。

現在は、一行目で検索をかけて、後はactivecell.offset(*,*).value="地域名"のような感じで、しらみつぶしに探しています。

複数列で検索するよい方法などありましたら教えてください。

A 回答 (3件)

#2 のWendy02 です。


後で、ミスを見つけましたので、こちらを優先させてください。見つからない場合のことを忘れていませした。(^^;

Sub Sample()
Dim nm As Variant
Dim buf As Variant, i As Long
Dim Rng As Range
With ActiveSheet
Set Rng = .Range("A1").CurrentRegion
.Range("A1:C1").Copy .Range("AA1")
For Each nm In Array("商品名", "地域名", "店舗名")
  Do
  buf = Application.InputBox(nm & "を入れてください。", Type:=2)
  If VarType(buf) = vbBoolean Then Exit Sub
  If buf = "" Then MsgBox nm & "を入れてください。"
  Loop While buf = ""
  .Range("AA2").Offset(, i).Value = buf
  i = i + 1
Next nm
        Rng.AdvancedFilter _
         Action:=xlFilterInPlace, _
         CriteriaRange:=.Range("AA1:AC2"), _
         Unique:=False
 
  On Error Resume Next
  Rng.Offset(1).Resize(Rng.Rows.Count - 1). _
  SpecialCells(xlCellTypeVisible).Select
  If Err.Number > 0 Then
   MsgBox "探しているものは見つかりません", vbCritical
  Else
   .ShowAllData
  End If
  On Error GoTo 0
End With
  Set Rng = Nothing
  Range("Criteria").ClearContents
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。


知りたかった内容以外にも勉強になりました。

お礼日時:2005/07/25 18:52

本来は、Find メソッドよりも、オートフィルターやフィルターオプションのほうがよいのでは?以下のようなものでダメなら、また、別のものを考えます。



Sub Sample()
Dim nm As Variant
Dim buf As Variant, i As Long
Dim Rng As Range
With ActiveSheet
Set Rng = .Range("A1").CurrentRegion
 .Range("A1:C1").Copy .Range("AA1")
For Each nm In Array("商品名", "地域名", "店舗名")
  Do
  buf = Application.InputBox(nm & "を入れてください。", Type:=2)
  If VarType(buf) = vbBoolean Then Exit Sub
  If buf = "" Then MsgBox nm & "を入れてください。"
  Loop While buf = ""
  .Range("AA2").Offset(, i).Value = buf
  i = i + 1
Next nm
        Rng.AdvancedFilter _
         Action:=xlFilterInPlace, _
         CriteriaRange:=.Range("AA1:AC2"), _
         Unique:=False
 
  Rng.Offset(1).Resize(Rng.Rows.Count - 1). _
  SpecialCells(xlCellTypeVisible).Select
  .ShowAllData
End With
  Set Rng = Nothing
  Range("Criteria").ClearContents
End Sub
    • good
    • 0

検索(Find)で探せるのは1つの項目です。



複数列の条件の場合は、オートフィルタを使うしかありません。

参考URL:http://www.officetanaka.net/excel/vba/db/index.htm
    • good
    • 1
この回答へのお礼

ありがとうございます。

オートフィルタをうまく使えるようにしてみます。

お礼日時:2005/07/25 18:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A