草刈りで使っているナイロンカッター、ブログを検索しても何時買ったのかわからない...
myCollectionを検索すると、「2017-0613_静音ナイロンカッターDS-5A(紐)←やまびこ.pdf」がヒットしたので、このファイル(取扱説明書,自炊)を作ったのは 2017/06/13、これが購入日かも知れない...
ならば家計簿を検索してみようと、2017年の家計簿を開らこう‥‥ としたが、
家計簿77・フォルダー下にあるとの思いからググった。
my家計簿77_2014.xlsx,my家計簿77_2015.xlsx,my家計簿77_2016.xlsx,my家計簿77_2017.xlsx
my家計簿77_2018.xlsx ファイルを一発で検索
できたらいいなぁ〜〜〜 マクロで作れないかなぁ〜〜〜
- 複数のExcelファイルの内容を検索(U君のブログ 2015-04-03)
200近い Excelファイルがあって、しかも各ファイル内に10以上のシートがあって、その中に特定の文字列があるかどうかを調べなければいけなくなった。Excel単独の機能にはそういう検索機能はない... ということで調べたところ、そういう検索専用のソフトがあったけれどマクロでやる方がお手軽。スウェーデンのOscarさんという人がそういうマクロを作っていたので使わせていただく。
このままでも十分だけど以下のようにちょっぴり修正してから利用させていただきました。
上記のサイトにあったコードをベースに下記を作った。
- ファイル名:マクロ総収支検索.xlsm
- マクロ総収支検索.xlsmがあるフォルダ、具体的には「家計簿77」フォルダにあるすべての xlsxファイルを開き、
- 「総収支」シートがあればそのシート内を検索する。
U君さんのお礼を兼ね、改修したコードを参考までに載せた。
- Public Function SearchWKBooks() As Boolean
- Dim mbTitle As String
- Const SheetName As String = "総収支"
- Dim WS As Worksheet
- Dim c
- Dim firstAddress
- Dim myfolder As String
- Dim dirValue As String, strString As String
- Dim a As Single
- Dim wkSheet As Worksheet
- mbTitle = "SearchWKBooks/" & ThisWorkbook.Name
- Set WS = Sheets.Add
- myfolder = ThisWorkbook.Path & "\"
- strString = InputBox("検索文字列を入力してください。", mbTitle, "")
- If strString = "" Then Exit Function
- 'ヘッダー部
- WS.Range("A1") = "検索文字列:"
- WS.Range("B1") = strString
- WS.Range("A2") = "パス:"
- WS.Range("B2") = myfolder
- WS.Range("A4") = "ファイル名"
- WS.Range("B4") = "シート名"
- WS.Range("C4") = "セル"
- WS.Range("D4") = "リンク"
- WS.Range("E4") = "セル内の文字列"
- a = 0
- Application.ScreenUpdating = False
- dirValue = Dir(myfolder & "*.xlsx")
- Do Until dirValue = ""
- Workbooks.Open Filename:=myfolder & dirValue, ReadOnly:=True, UpdateLinks:=0
- For Each wkSheet In ActiveWorkbook.Worksheets
- If wkSheet.Name = SheetName Then
- Set c = wkSheet.Cells.Find(strString, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
- If Not c Is Nothing Then
- firstAddress = c.Address
- Do
- WS.Range("A5").Offset(a, 0).Value = dirValue
- WS.Range("B5").Offset(a, 0).Value = wkSheet.Name
- WS.Range("C5").Offset(a, 0).Value = c.Address
- WS.Hyperlinks.Add Anchor:=WS.Range("D5").Offset(a, 0), Address:=myfolder & dirValue, SubAddress:= _
- wkSheet.Name & "!" & c.Address, TextToDisplay:="Link"
- WS.Range("E5").Offset(a, 0).Value = c.Value
- a = a + 1
- Set c = wkSheet.Cells.FindNext(c)
- Loop While Not c Is Nothing And c.Address <> firstAddress
- End If
- End If
- Next wkSheet
- ActiveWorkbook.Close SaveChanges:=False, Filename:=myfolder & dirValue
- dirValue = Dir
- Loop
- Range("A4").Select
- Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
- Selection.Columns.AutoFit
- BOOLAns = setタイトル行書式設定
- Range("A1").Select
- ActiveSheet.Name = Format(Now(), "yyyy-mmdd-hhmm")
- Application.ScreenUpdating = True
- Set c = Nothing
- Set WS = Nothing
- SearchWKBooks = True
- End Function
まだ理解出来ない所が多いが、結果はすばらしい‥‥
上記は “ナイロン” で検索した結果で、行No.6 が目的のレコードと思われる。
- 行No.6の Link をクリックすると
- my家計簿_2017.xlsx が開き
- 総収支・シートのセルC139 がアクティブになる。
それによると、下記であった。
- 購入日: 2017/6/13
- 品名:DS-5A ナイロンカッター(紐)
- 支出:3,240円
- 備考:アオキ農機商会
≪今後≫
検証を重ね、マクロ家計簿77に組み込む予定...