2017-12-08 25 views
0

私はこれを実行すると、それはif文でIsInArray関数エラー:型が一致VBA

ByRef argument type mismatch

を言って私にエラーを与えます。

すべての配列がバリアントと宣言されていましたが、その関数を実行しようとするとエラーが表示されました。

ご協力いただければ幸いです。

sub sort() 

Dim rowNo As Integer 
Dim colNo As Integer 
Dim PIList(6) As Long 
Dim GSList(2) As Long 
Dim FilterList(91) As Long 
Dim currCellCont As Long 

rowNo = 2 
colNo = 2 
PIList(6) = Array(0,1,2,3,4,5) 
GSList(2) = Array(6,7) 
FilterList(91) = Array(89752, 89753, 89754, 89755, 89756, 89757, 89758, 89759, 89760, 89761, 89762, 89763, 89764, 89765, 89766, 89767, 89768, 89769, 89770, 89771, 89772, 89773, 89774, 89775, 89776, 89777, 89778, 89779, 89780, 89781, 89782, 89783, 89784, 89785, 89786, 89787, 89788, 89789, 89790, 89791, 89792, 89793, 89794, 89795, 89796, 89797, 89798, 89799, 89800, 89801, 89802, 89803, 89804, 89805, 89806, 89807, 89808, 89809, 89810, 89811, 89812, 89813, 89814, 89815, 89816, 89817, 89818, 89819, 89820, 89821, 89822, 89823, 89824, 89825, 89826, 89827, 89828, 89829, 89830, 89831, 89832, 89833, 89834, 89835, 89836, 89837, 89838, 89839, 89840, 89841, 89842) 
currCellCont = Cells(rowNo, colNo).Value 

Do Until IsEmpty(currCellCont) 
    If IsInArray(currCellCont, PIList) Then 
     Cells(rowNo, 9).Value = "PI" 
    ElseIf IsInArray(currCellCont, GSList) Then 
     Cells(rowNo, 9).Value = "GS" 
    ElseIf IsInArray(currCellCont, FilterList) Then 
     Cells(roNo, colNo).Value = "Filter" 
    End If 
    currCellCont = Cells(rowNo + 1, colNo) 
Loop 

End Sub 


Function IsInArray(lookingFor As Long, arr As Long) As Boolean 
    IsInArray = Not IsError(Application.Match(lookingFor, arr, 0)) 
End Function 
+1

このコードは、より多くの問題を抱えているIsInArray – JohnyL

+1

には配列パラメータはありませんちょうど行方不明 '()' 'arr'に。 'PIList(6)= Array(0,1,2,3,4,5)'は 'Variant'配列を' Long'配列の6番目の位置(ゼロベースの場合は7番目の位置)に割り当てようとしています - "タイプの不一致"エラーが発生します。 – YowE3K

答えて

2

使用バリアント配列:

Sub sort() 

Dim rowNo As Integer 
Dim colNo As Integer 
Dim PIList() As Variant 
Dim GSList() As Variant 
Dim FilterList() As Variant 
Dim currCellCont As Long 

rowNo = 2 
colNo = 2 
PIList = Array(0, 1, 2, 3, 4, 5) 
GSList = Array(6, 7) 
FilterList = Array(89752, 89753, 89754, 89755, 89756, 89757, 89758, 89759, 89760, 89761, 89762, 89763, 89764, 89765, 89766, 89767, 89768, 89769, 89770, 89771, 89772, 89773, 89774, 89775, 89776, 89777, 89778, 89779, 89780, 89781, 89782, 89783, 89784, 89785, 89786, 89787, 89788, 89789, 89790, 89791, 89792, 89793, 89794, 89795, 89796, 89797, 89798, 89799, 89800, 89801, 89802, 89803, 89804, 89805, 89806, 89807, 89808, 89809, 89810, 89811, 89812, 89813, 89814, 89815, 89816, 89817, 89818, 89819, 89820, 89821, 89822, 89823, 89824, 89825, 89826, 89827, 89828, 89829, 89830, 89831, 89832, 89833, 89834, 89835, 89836, 89837, 89838, 89839, 89840, 89841, 89842) 
currCellCont = ActiveSheet.Cells(rowNo, colNo).Value 
With Worksheets("Sheet1") 'Change to your sheet if always the same or ActiveSheet if on various sheets. 
    Do Until currCellCont = 0 
     If IsInArray(currCellCont, PIList) Then 
      .Cells(rowNo, 9).Value = "PI" 
     ElseIf IsInArray(currCellCont, GSList) Then 
      .Cells(rowNo, 9).Value = "GS" 
     ElseIf IsInArray(currCellCont, FilterList) Then 
      .Cells(roNo, colNo).Value = "Filter" 
     End If 
     rowNo = rowNo + 1 
     currCellCont = .Cells(rowNo, colNo).Value 
    Loop 
End With 


End Sub 


Function IsInArray(lookingFor As Long, arr() As Variant) As Boolean 
    IsInArray = Not IsError(Application.Match(lookingFor, arr, 0)) 
End Function 
+0

もう一度この 'ActiveSheet' ... – JohnyL

+0

私はActiveSheetテーマの専門家だと思う)BTW、あなたは答えなかった、プレフィックスシートが足りない理由... – JohnyL

+0

プレフィックスシートの意味がわからない。 –