2017-05-30 8 views
-2

私は次の質問の出発点として苦労しています。基本的には、スプレッドシート全体を13桁のユニークな数字で検索する必要があります(これは未知であるため、あらかじめ参照することはできません)。その番号への参照をすべて探し、新しいワークシートに行をコピーし、異なる13桁の参照のすべてが新しいシートにコピーされるまで次の13桁の番号を探します。この数値は列A/Bにあるかもしれませんが、そうではないかもしれませんが、スプレッドシート全体を検索する必要がある理由であるsetテンプレートのデータは提供されていません。誰かがどこから始めるべきか、私にアイ​​デアを教えてもらえますか?あらかじめ数値を知っていればサブルーチンの基礎がありますが、この例ではその数値がわからないだけです。助けてください?!これは私が必要とするVBAソリューションです。 Sample Dataスプレッドシートのすべての列でユニークな値を検索する

ここで、一意の番号が常に列Bにあるとは限りません。なぜなら、関連するすべての行をコピーする前に、13桁の番号の列をマクロが識別できる必要があるからです。私はそれがより理にかなってほしい。

+0

この問題の詳細をご記入ください。あなたがそれを記述した方法は少し不明です。問題を視覚化するための例(架空のデータは問題ありません)を教えてください。別の方法は、スクリーンショット(架空のデータでもよい)を使用することです。 しかし、私が理解していることから、あなたはVBAソリューションが必要だろうと思います。 – ksauter

答えて

2

ここでは、開始として機能する一般的なFindAll関数を示します。検索する領域(例:.UsedRange)と検索対象を指定する必要があります。一致するすべてのセルの範囲が返されます。

Function FindAll(What, _ 
    Optional SearchWhat As Variant, _ 
    Optional LookIn, _ 
    Optional LookAt, _ 
    Optional SearchOrder, _ 
    Optional SearchDirection As XlSearchDirection = xlNext, _ 
    Optional MatchCase As Boolean = False, _ 
    Optional MatchByte, _ 
    Optional SearchFormat) As Range 

    'LookIn can be xlValues or xlFormulas, _ 
    LookAt can be xlWhole or xlPart, _ 
    SearchOrder can be xlByRows or xlByColumns, _ 
    SearchDirection can be xlNext, xlPrevious, _ 
    MatchCase, MatchByte, and SearchFormat can be True or False. _ 
    Before using SearchFormat = True, specify the appropriate settings for the Application.FindFormat _ 
    object; e.g. Application.FindFormat.NumberFormat = "General;-General;""-""" 

    Dim SrcRange As Range 
    If IsMissing(SearchWhat) Then 
     Set SrcRange = ActiveSheet.UsedRange 
    ElseIf TypeOf SearchWhat Is Range Then 
     Set SrcRange = IIf(SearchWhat.Cells.Count = 1, SearchWhat.Parent.UsedRange, SearchWhat) 
    ElseIf TypeOf SearchWhat Is Worksheet Then 
     Set SrcRange = SearchWhat.UsedRange 
    Else: SrcRange = ActiveSheet.UsedRange 
    End If 
    If SrcRange Is Nothing Then Exit Function 

    'get the first matching cell in the range first 
    With SrcRange.Areas(SrcRange.Areas.Count) 
     Dim FirstCell As Range: Set FirstCell = .Cells(.Cells.Count) 
    End With 

    Dim CurrRange As Range: Set CurrRange = SrcRange.Find(What:=What, After:=FirstCell, LookIn:=LookIn, LookAt:=LookAt, _ 
     SearchDirection:=SearchDirection, MatchCase:=MatchCase, MatchByte:=MatchByte, SearchFormat:=SearchFormat) 

    If Not CurrRange Is Nothing Then 
     Set FindAll = CurrRange 
     Do 
      Set CurrRange = SrcRange.Find(What:=What, After:=CurrRange, LookIn:=LookIn, LookAt:=LookAt, _ 
      SearchDirection:=SearchDirection, MatchCase:=MatchCase, MatchByte:=MatchByte, SearchFormat:=SearchFormat) 
      If CurrRange Is Nothing Then Exit Do 
      If Application.Intersect(FindAll, CurrRange) Is Nothing Then 
       Set FindAll = Application.Union(FindAll, CurrRange) 
      Else: Exit Do 
      End If 
     Loop 
    End If 
End Function 
関連する問題