Excel VBAで別ブック検索結果を列に順次格納するマクロ

このExcel VBAマクロは、ブック1の指定シートから検索文字列を読み取り、ブック2内を検索して結果を元のシートのB列以降に複数ヒット分を順に格納します。検索結果がない場合は「見つからない」と記入します。

 

Sub SearchAcrossAllSheetsAndCopyContents()
    Dim wbSource As Workbook, wbTarget As Workbook
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRow As Long, i As Long, col As Long, s As Integer
    Dim searchString As String, found As Range, firstAddress As String
    
    ' ソースブックとターゲットブックの設定
    Set wbSource = Workbooks("ブック1.xlsm") ' ソースブック名を適宜変更してください
    Set wbTarget = Workbooks("ブック2.xlsx") ' ターゲットブック名を適宜変更してください
    
    ' ソースシートの設定
    Set wsSource = wbSource.Sheets("シートX") ' シート名を適宜変更してください
    
    ' ソースシートのA列で最後の行を探す
    lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
    
    ' A列の各行でループ
    For i = 1 To lastRow
        searchString = wsSource.Cells(i, 1).Value ' 検索文字列
        col = 2 ' 結果を格納する列をB列から開始
        
        ' ターゲットブックの全てのシートでループ
        For Each wsTarget In wbTarget.Sheets
            With wsTarget.Cells
                ' ターゲットシート内で初めて見つかったセルを探す
                Set found = .Find(What:=searchString, After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
                If Not found Is Nothing Then
                    firstAddress = found.Address
                    Do
                        wsSource.Cells(i, col).Value = found.Value ' 見つかったセルの内容を記入
                        col = col + 1 ' 次の結果を格納する列を一つ右に移動
                        Set found = .FindNext(found)
                    Loop While Not found Is Nothing And found.Address <> firstAddress
                End If
            End With
        Next wsTarget
        
        ' 一つも結果が見つからなかった場合
        If col = 2 Then wsSource.Cells(i, col).Value = "見つからない"
    Next i
End Sub

紅白歌手の出場時年齢をグラフにしてみた

紅白歌合戦に毎回出ている石川さゆり、一体何年前から、何歳のときから出場しているか知っていますか?

昨年末、テレビの前でこの素朴な疑問が生まれてしまい、年1の津軽海峡に身が入りませんでした。もったいない。

調べた成果が下の画像です。

(1年経つと1つ歳をとることが分かる有益なグラフ)

石川さゆりは47年前の1977年、19歳のときから1回を除いて毎回出場しています。2023年末時点では65歳です。19歳から65歳って人生のほとんどじゃねえか。スゴすぎる。

(妊娠中のため唯一欠場した1983年も、「特別応援ゲスト」としてステージに登場しているそうです。)

 

 

こうなると、他のアーティストも気になってきました。

次の画像では、石川さゆりだけでなく、紅白に20回以上出場した歌手の出場時年齢をグラフにしています。2000年生まれの筆者にも分かりやすいよう、各年の主な出来事も載せておきました。

見づらいですが、拡大して見てください。


昨年末出場した歌手の中では、郷ひろみも長い出場歴を持っています。1973年(円が変動為替相場制に移行し、第4次中東戦争を機に石油危機が発生した年)から出場しています。ただし、石川さゆりほどコンスタントには出ていません。

少し遡ると、北島三郎は、1963年(東京五輪の前年、ケネディ暗殺の年)から出ていたようです。もはや歴史上の人物でしょ。

他にも発見があると思います。画像はXにも投稿していますので、皆さんでご笑覧ください。