Reputation: 601
CODE
height = objExcel1.Application.WorksheetFunction.CountA(ob3.Columns(1))
'MsgBox(height)
ReDim dataArray(height - 2, 0) ' -1 for 0 index, -1 for the first row as header row, excluded
str = ""
dataArray = ob3.Range(ob3.Cells(2, 1),ob3.Cells(height, 1)).Value
Set d = CreateObject("scripting.dictionary")
'MsgBox(LBound(DeletArr) & ":" & UBound(DeletArr))
For i = LBound(DeletArr) To UBound(DeletArr)
If Not d.exists(DeletArr(i)) Then
d(DeletArr(i)) = 0
End If
Next
MsgBox(LBound(dataArray,1) & ":" & UBound(dataArray,1))
For i = LBound(dataArray, 1) To UBound(dataArray, 1) - 1
If d.exists(dataArray(i, 1)) Then
str = str & (i+1) & ":" & (i+1) & ","
'ob3.Range(i & ":" & i).Delete
Else
'found = False
End If
Next
VBScript Array is 0 based. But why LBound(dataArray,1)
is giving starting subscript is 1
,why not 0? Ubound
is giving the number - against which i am bit confused is it the last subscript of the array or the size?
Thanks,
Upvotes: 1
Views: 7604
Reputation: 14361
By default, the subscripts/indices of VBA arrays start at 0 (this is called the lower bound of the array) and run up to the number you specify in the Dim statement (this is called the upper bound of the array). If you would prefer your array index numbers to start at 1, include the following statement at the top of the module.
Option Base 1
However when an array is populated by Range
object using the Transpose
method, the array Lower bound set to 1 even you are on default Zero baed
mode. So array becomes 1 based.
e.g. the following data is added using Transpose
method.
Array(1) = "Hola"
Array(2) = "Bonjour"
Array(3) = "Hello"
Array(4) = "Wei"
Good thing is that this array UBound
tells you number of elements (4) which = UBound. Unlike if it was zero based, then number of elements = Ubound + 1.
UBound(Array) --> 4
LBound(Array) --> 1
In current 1-based scenario, the Ubound refers to the total number of elements. So in such cases you need to amend your code to track data within the array's LBound
, UBound
properties to avoid data loss.
And by the way, by adding Option Base 0
doesn't stop array being dimentioned to 1 based by Transpose
method. Which invalids my first comment.
Upvotes: 5