1. Последняя ячейка имеет индекс Length()-1 или High(). Т.е. в твоем коде грубая ошибка - выход за пределы массива.
2. При смешении ты смещаешь все ячейка, что явно не правльно. Тебе надо начинать с той, которую ты нашел.
3. Не совсем понятно, что тебе надо в итоге получить. Впечатление, что ты делаешь что-то не то. Предположим, тебе надо получить список значений в первом массиве (A), которых нет во втором (B). тогда примерно так:
Код:
var
A, B : Array Of String;
I, J, K : Integer;
begin
... // Здесь заполнение массивов
For I := High(A) DownTo Low(A) Do
For J := Low(B) To High(B) Do
If A[i] = B[J] Then
Begin
F := True;
For K := I To High(A)-1 Do A[K] := A[K+1];
SetLength(A,Length(A)-1);
Break;
End;
end;