■セル結合がある場合は以下2点がポイント
①セルの検索範囲を全てのセルにする(Cells にする)
②SerchorderをxlByColumnsではなく、xlByRowsにする
sub main() call.Cells.Find(What:="検索値", SearchOrder:=xlByRows) end sub
■使用例
Sub FindCell() Dim bookPath As String '対象ブックのパスを格納 Dim wb As Workbook '開いたブックを格納 Dim searchWord As String '検索対象の文字列を格納 Dim foundCell As Range '検索結果のセルを格納 Dim strCellAddress As String '検索結果のセルアドレスを格納 '検索対象の文字列を設定 searchWord = "店舗名" '対象ブックを開く bookPath = "C:\デスクトップ\テスト\テスト.xlsx" Set wb = Workbooks.Open(bookPath) 'セルを検索 Set foundCell = wb.Sheets("Sheet1").Cells.Find(what:=searchWord, SearchOrder:=xlByRows) '検索結果のセルよりセルアドレスを取得 strCellAddress = foundCell.Address 'ブックを閉じてオブジェクト変数を解放 wb.Close Set wb = Nothing MsgBox strCellAddress End Sub
■ファンクション化するとこんな感じ
呼び出し元
Sub test1() Dim bookPath As String '対象ブックのパスを格納 Dim wb As Workbook '開いたブックを格納 Dim searchWord As String '検索対象の文字列を格納 Dim TargetCell As String '検索対象の文字列を設定 searchWord = "店舗名" '対象ブックを開く bookPath = "C:\デスクトップ\テスト\テスト.xlsx" Set wb = Workbooks.Open(bookPath) TargetCell = fncFindCell(wb, searchWord) MsgBox TargetCell 'ブックを閉じてオブジェクト変数を解放 wb.Close Set wb = Nothing End Sub
ファンクションプロシージャ
Function fncFindCell(wb As Workbook, searchWord As String) As String '--------------------------------------------------------------------- '機能 :検索値のあるセルを検索し、セルアドレスを返す '引数1:対象ワークブック '引数2:検索対象の文字列 '戻り値:検索結果セルのセルアドレス '--------------------------------------------------------------------- Dim foundCell As Range '検索結果のセルを格納 Dim strCellAddress As String '検索結果のセルアドレスを格納 '検索値 Set foundCell = wb.Sheets("Sheet1").Cells.Find(what:=searchWord, SearchOrder:=xlByRows) '検索結果のセルよりセルアドレスを取得 strCellAddress = foundCell.Address 'セルアドレスは絶対参照のアドレスで返されるので$マークを削除する fncFindCell = Replace(strCellAddress, "$", "") End Function