0

コードに実行させたいこと:テーブルから取得したデータを含む「DB」というシートがあります。XMLから取得したデータを持つ「XML」ワークシートがあります。「DB」シートから列名「FName」を取得し、「XML」シートで同じ列名「FName」を検索したい。列名が一致する場合は、「DB」シートから対応する値を取得し、「XML」シートと比較します。同じワークブックに別のシート「結果」があります。「DB」シートから列名を取得し、転置(行ごとの列)を貼り付けました。以下のシナリオを実行する必要があります
。1。列名が両方のシートで一致する場合:
-両方のシートで対応する列名の値の一致を検索します。値が一致する場合、「結果」で

2.列名が両方のシートで一致しない場合:
-「結果」シートで、列名が「FName」の行の隣の列に「NOMatchingCOLUMN」と入力する必要があります。

現在、このコードでは、「DB」シートの各列を解析して、その列を検索したいと思いました。しかし、「アプリケーション定義またはオブジェクト定義のエラー」が発生します。

上記のシナリオを実現する方法を教えてください。

Dim FindString As Range
Dim Rng As Range

Dim i, j As Integer
Dim finalcol As Long

Worksheets("DB").Select

finalcol = Worksheets("DB").Cells(1, Application.Columns.Count).End(x1toleft).column
On Error Resume Next


For i = 1 To finalcol
 FindString = Cells(1, i).Value

If Trim(FindString) <> "" Then
    With Sheets("xml").Range("A:A")
        Set Rng = .Find(What:=FindString, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not Rng Is Nothing Then
            Application.Goto Rng, True
        Else
            MsgBox "Nothing found"
        End If
    End With
End If
Next i
 On Error GoTo 0

サブ終了

4

1 に答える 1

0

あなたが説明したことから、これが私が思いついたものです。行は、「DB」シートにある数に依存します

 Private Function CheckColumn(SheetN As String, col As String)   
 'checks if a column is in sheet returns errorif not found 
 On Error GoTo NotHere
     CheckColumn = WorksheetFunction.Match(col, Sheets(SheetN).Rows(1), 0)
 On Error GoTo 0

Exit Function
    NotHere:
        MsgBox col & " was not found in sheet " & SheetN    
End Function

Sub MatchNoMatch()
Dim rngDB As Range
Dim colname As String
Dim sh1 As String
Dim sh2 As String
Dim sh3 As String
Dim dbcol As Integer
Dim xmlcol As Integer
Dim rcol As Integer
Dim Firstrow As Long
Dim Lastrow As Long

'column you want to search up
colname = "FNAME"

'the sheets you want to find the column in
sh1 = "DB"
sh2 = "XML"
sh3 = "RESULT"

'Gets the column number from each sheet
dbcol = CheckColumn(sh1, colname)
xmlcol = CheckColumn(sh2, colname)
rcol = CheckColumn(sh3, colname)

'Sets the range for sh1 to do compare
With Worksheets(sh1)
    Firstrow = .UsedRange.Cells(1).Row + 1
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
    Set rngDB = .Range(.Cells(Firstrow, dbcol), .Cells(Lastrow, dbcol))
End With

'checks each value against sh2 and writes in sh3. If more values in sh2 they will be ignored
For Each e In rngDB
    If e.Value <> Worksheets(sh2).Cells(e.Row, xmlcol) Then
        Worksheets(sh3).Cells(e.Row, rcol + 1) = "NO MATCH"
    Else
        Worksheets(sh3).Cells(e.Row, rcol + 1) = "MATCH"
    End If
Next e
End Sub
于 2012-12-05T23:32:09.480 に答える