Excel VBA質問箱 IV

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

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


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

【69047】シート検索 ぴん 11/5/12(木) 14:07 質問[未読]
【69048】Re:シート検索 kanabun 11/5/12(木) 14:26 発言[未読]
【69052】Re:シート検索 ぴん 11/5/12(木) 16:59 お礼[未読]

【69047】シート検索
質問  ぴん  - 11/5/12(木) 14:07 -

引用なし
パスワード
   シート1のA列(A1〜A50)に入力されている文字が、他シート(シート2〜8)に
あるか?あったら、そのシート名をシート1のD列に書き出す。
としたいのですが、ヒントをお願いします。
3日間格闘、悩んでいます。お願いします。

【69048】Re:シート検索
発言  kanabun  - 11/5/12(木) 14:26 -

引用なし
パスワード
   ▼ぴん さん:
>シート1のA列(A1〜A50)に入力されている文字が、他シート(シート2〜8)に
>あるか?あったら、そのシート名をシート1のD列に書き出す。

○○の一つ覚えですが、Dictionary(辞書オブジェクト)を
使ったらどうでしょう

Sub Try1()
  Dim i As Long
  Dim c As Range, r As Range
  Dim ss As String, sName As String
  Dim dic As Object
   
  Set dic = CreateObject("Scripting.Dictionary")
  'シート2枚目以降のA列の値を
  ' そのシート名とともに辞書登録します
  For i = 2 To Worksheets.Count
    With Worksheets(i)
      sName = .Name
      Set r = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
      For Each c In r
        ss = c.Value
        dic(ss) = dic(ss) & "," & sName 'A列値とシート名を登録
      Next
    End With
  Next
  
  '1枚目のシートのA列の値が辞書にあれば、
  ' D列に 出現シート名をカンマ区切りで表示します
  With Worksheets(1)
    Set r = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
    For Each c In r
      ss = c.Value
      If dic.Exists(ss) Then
        c(1, 4).Value = Mid$(dic(ss), 2)
      End If
    Next
  End With
End Sub

【69052】Re:シート検索
お礼  ぴん  - 11/5/12(木) 16:59 -

引用なし
パスワード
   ありがとうございました。
助かりました。

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