2017-08-26 14 views
1

を転置しようとしたとき、私は私が転置しようとしている場合は、列Aの値が列BにVBA - 実行時エラー「13」の行に値

存在しているかどうかを確認するために別のワークシートに2つの列を比較しようとしています比較のために辞書に格納すると、実行時エラー '13'が発生します。ここで

は、コードは次のとおりです。

Sub Compare() 

Dim rngA As Range, rngB As Range 
Dim dict As Object, rw As Range 
Dim a As Application, tmp As String 
Dim Row1Last As Long 
Dim Row2Last As Long 

Set a = Application 
Set dict = CreateObject("scripting.dictionary") 
Set sht1 = Worksheets("list_Facility_BOS") 
Set sht2 = Worksheets("List_Facility_PG") 


With Sheets("list_Facility_BOS") 
Row1Last = .Cells(Rows.Count, "G").End(xlUp).Row 
End With 

With Sheets("List_Facility_PG") 
Row2Last = .Cells(Rows.Count, "H").End(xlUp).Row 
End With 

Set rngA = sht1.Range("G2:G" & Row1Last) 
Set rngB = sht2.Range("H2:H" & Row2Last) 

For Each rw In rngA.Rows 
    dict.Add Join(a.Transpose(a.Transpose(rw.Value)), Chr(0)), rw.Row 
Next rw 

For Each rw In rngB.Rows 
    tmp = Join(a.Transpose(a.Transpose(rw.Value)), Chr(0)) 
    If dict.exists(tmp) Then 
    Else 
     rw.Cells(1).Interior.ColorIndex = 3 
    End If 
Next rw 

End Sub 

私は別のワークシート内の別の20kの行の列に対して20K行のレコードの列を比較しようとします。このコード行ではエラー '13'が発生しました。

私はVBAプログラミングに秀でています。申し訳ありませんが、わかりやすく説明できません。私のコードに間違いがある場合は、私に知らせてください。

+0

excelよりも多くの行がある場合、転置は失敗します。それはすべてです;) –

+0

@DirkReichel、よろしいですか?これは、[最速の方法で見つけることができます] - 行を使用してExcelの範囲を使用する - マクロ - VBA](https://stackoverflow.com/questions/22685622/fastest-way-to- Excel-range-in-excel-macro-vba/22704708#answer-22704708を参照してください)。 @Dvidおそらく255文字以上のセル[vba-scripting-dictionary-run-time-error-13-type-mismatch](https://stackoverflow.com/questions/17549379/vba-scripting-dictionary-run-時間誤差-13型不一致#答え-17817522)?エラーの場合は、 'rw.value'の値を表示しないでください。 – BitAccesser

+0

@BitAccesserは 'For Each rw In rng.Rows'の部分を見たことがありません。このように2^16の制限は決して打たれません...しかし、ただ一つの列を持つ' rw'は、 'rw.Value'は配列ではないので、転置することはできません。コード全体を読んでいればかなり分かります...(私はもっと頻繁にこれを行うべきです):P –

答えて

0

関数の説明が何度も失われてしまいました。 これは私が考えているオリジナルですfastest-way-to-find-a-row-in-excel-range-using-excel-macro-vba

はあなたがrngAに一意の行を必要とするか、またはあなたがエラー13 が問題のその種類を使用して、回避することができUsing-the-Dictionary-Class-in-VBA

を参照してください原因となる配列を、取得コメント

For Each rw In rngA.Rows 
    'Create a key from the entire row and map to row 
    ' If your rows are not unique you'll have to do a bit more work here 
    ' and use an array for the key value(s) 
    dict.Add Join(a.Transpose(a.Transpose(rw.Value)), Chr(0)), rw.Row 
Next rw 

を見てくださいExcelファイルの代わりにデータベース。

関連する問題