質問: ExcelVBAをもちいて、在庫の確認をしたいのですが、できるのでしょうか。 具体的には、在庫一覧のシートと注文一覧のシートをつくり、その二つのシートから一致した商品をさらに別のシートに取り出すという作業がしたいです。 一個の注文が着たときは、なんとか対応できるのですが、まとまった注文が来たときのいい対応方法を探しています。 よろしくお願いします。
回答: Public Enum SearchPatternEnum 完全一致 = 0 先頭一致 = 1 後方一致 = 2 部分一致 = 3 End Enum Public Function SearchData(検索値 As Variant, 検索範囲 As Range, Optional 列番号 As Long = 1, Optional 検索方法 As SearchPatternEnum, Optional 出力セル範囲 As Range = Nothing) As Variant Dim RNG As Range Dim SearchRng As Range Dim SrchStr As String Dim MaxRow As Long Dim OutputRNG As Range Dim MaxOutputPos As Long Dim OutputPos As Long If TypeOf 検索値 Is Range Then SrchStr = 検索値.Value Else SrchStr = CStr(検索値) End If Select Case 検索方法 Case SearchPatternEnum.完全一致 '処理を行わない Case SearchPatternEnum.先頭一致 SrchStr = SrchStr & "*" Case SearchPatternEnum.後方一致 SrchStr = "*" & SrchStr Case SearchPatternEnum.部分一致 SrchStr = "*" & SrchStr & "*" End Select If 出力セル範囲 Is Nothing Then SearchData = CVErr(1) Else 出力セル範囲.Clear MaxOutputPos = 出力セル範囲.Cells.Count OutputPos = 1 End If For Each RNG In 検索範囲.Cells If RNG.Value Like SrchStr Then If MaxOutputPos = 0 Then SearchData = Cells(RNG.Row, RNG.Column + (列番号 - 1)) Exit For Else 出力セル範囲.Cells(OutputPos) = Cells(RNG.Row, RNG.Column + (列番号 - 1)) OutputPos = OutputPos + 1 If OutputPos > MaxOutputPos Then Exit For End If End If End If If RNG.Row > RNG.Worksheet.UsedRange.Rows.Count Then Exit For End If Next RNG End Function