Excel VBA質問箱 IV

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

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


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

【55272】データの抽出 yasu 08/4/25(金) 14:04 質問[未読]
【55274】Re:データの抽出 Jaka 08/4/25(金) 14:58 発言[未読]
【55275】Re:データの抽出 テト 08/4/25(金) 15:05 発言[未読]
【55276】Re:データの抽出 yasu 08/4/25(金) 15:27 発言[未読]
【55282】Re:データの抽出 テト 08/4/25(金) 15:55 発言[未読]
【55287】Re:データの抽出 yasu 08/4/25(金) 16:53 お礼[未読]

【55272】データの抽出
質問  yasu  - 08/4/25(金) 14:04 -

引用なし
パスワード
   いつも参考にさせていただいております。
よろしければ知恵をお借りしたいです。

今回の状況
シートが「検索」「クエリ」の2シートがあり、「クエリ」には、
以下のようなIPアドレス、名前、機種、サーバ一覧があります。
A        B    C     D
xxx.xxx.xxx.xxx 佐藤  windows  server1群
xxx.xxx.xxx.xxx 佐藤  windows  server2群
xxx.xxx.xxx.xxx 田中  Mac    server3群
xxx.xxx.xxx.xxx 田中  windows  server1群
xxx.xxx.xxx.xxx 佐藤  Mac    server1群

今、行いたい作業は検索シートのD4に入れた文字で、クエリシートで検索した
結果を検索シートのD7にペーストしたいです。
贅沢言えばD4に入れた検索文字列は大抵B列のものでヒットするので、ヒットした
行のD列の結果をD7に出したいです。

絶対値なら→「VLOOKUP(D4,クエリ!A2:D586,4,0)」で出来るのですが、
B列の絶対値のみで、佐藤を全部検索できません。

マクロの記録で、検索シートD4コピー→クエリシートで全体選択→ctrl+fでペースト
→全てを検索→出力結果を全て選択→検索windowを閉じてコピー→検索シートD7にペースト。
で、以下の様に出来ましたがうまくいかなく皆様の知恵をお借りしたいです。
------マクロ--------------------------------
Sub test1()
  Sheets("検索").Select
  Range("D4").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("クエリ").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("検索").Select
  Range("D7").Select
  ActiveSheet.Paste
End Sub
--------------------------------------------
マクロをみると「全てを検索」「出力結果全てを選択」が行えておりません。
計算式では不可能だと思いますのでマクロでどうにかしようと思っています
のでご教授お願いいたします。

【55274】Re:データの抽出
発言  Jaka  - 08/4/25(金) 14:58 -

引用なし
パスワード
   1行目に明細行を作らないとダメだけど、
オートフィルタとか、フィルタオプションを使うとか。

【55275】Re:データの抽出
発言  テト  - 08/4/25(金) 15:05 -

引用なし
パスワード
   >沢言えばD4に入れた検索文字列は大抵B列のものでヒットするので
B列でヒットしないものもあるってことだよね?
その場合は、全体の検索をしてヒットの有無を調べるの?

>ヒットした行のD列の結果をD7に出したいです。
複数ヒットした場合は、どのセルへ出力したいの?
ヒットした内のどれかが、D7へ出力されればいいの?

【55276】Re:データの抽出
発言  yasu  - 08/4/25(金) 15:27 -

引用なし
パスワード
   jakaさん テトさん
リターンありがとうございます。

jakaさん
1行目は、IP、ユーザ、OS、サーバと分かれております。
オートフィルタでは、上記スレのvlookupにもあるとおり600行近くの
データで今後も増え続けるので、オートフィルタ内から検索させてい
くのに苦労&漏れが発生してしまいますので使用しない方向で考えてます。

テトさん
ご認識通りB列でヒットしないものもあります。もちろん全体の検索をして
ヒットの有無を確認しています。
ヒットした行が複数の場合はD7に改行されて一つのセルに入ればいいと
思っています。
しかし、複数のセルをコピーしてD7にペーストするならば指定範囲の違いから
D8,D9…と複数ヒットした件数分D7以下にペーストされるのでそこが今悩みの種です。

複数ヒットした際どれかだと情報がもれるのでヒットしたもの全てが希望です。

【55282】Re:データの抽出
発言  テト  - 08/4/25(金) 15:55 -

引用なし
パスワード
   こういうことかな?
違ったらごめん。

――――――――――――――――――――――――――――――
Dim wsSrch As Worksheet
Dim wsQuery As Worksheet
Dim sv As String
Dim rng As Range
Dim target As Range
Dim fstAddress As String
Dim v As String
Dim targetCol As Long

Set wsSrch = ActiveWorkbook.Worksheets("検索")
Set wsQuery = ActiveWorkbook.Worksheets("クエリ")

'検索結果値クリア
wsSrch.Range("D7").Value = ""

'検索値設定
sv = wsSrch.Range("D4").Value

If sv = "" Then
  Exit Sub
End If

'出力対象列設定
targetCol = 4

'検索範囲
Set rng = wsQuery.Range("A1:D" & Range("A1").End(xlDown).Row)

'検索実行
Set target = rng.Find(sv)

If Not target Is Nothing Then
  '初回一致セルアドレス
  fstAddress = target.Address

  '検索結果値取得
  v = target.Offset(0, targetCol - target.Column).Value

  Do
    '次検索
    Set target = rng.FindNext(target)

    If target.Address = fstAddress Then
      Exit Do
    Else
      '検索結果値結合
      v = v & vbLf _
         & target.Offset(0, targetCol - target.Column).Value
    End If
  Loop
End If

'検索結果値設定
wsSrch.Range("D7") = v
――――――――――――――――――――――――――――――

【55287】Re:データの抽出
お礼  yasu  - 08/4/25(金) 16:53 -

引用なし
パスワード
   テトさん
早期リターンありがとうございます。

結果の出力は完璧でした。ありがとうございます。
後はもう少し機能を付けたいので検索実行のあたりを勉強してきます。

ありがとうございました。

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