use warnings; use Win32::OLE; use Win32::OLE qw(in with); use Win32::OLE::Const "Microsoft Excel" my $yes = "yes"; #-- moved: constant for both loops for ($begincol;$begincol<$totcol;$begincol++) { my $app = $sheet2->Cells(3,$begincol)->{'Text'}; #-- moved: constant for next loop for ($beginrow;$beginrow<$maxrows;$beginrow++) { my $cap = $Sheet2->Cells($beginrow,5)->{'Text'}; #-- moved out of inner loop: my $app = $sheet2->Cells(3,$begincol)->{'Text'}; #-- moved out of both loops: my $yes = "yes"; if (index($app, $cap) != -1) { $Sheet->Cells($beginrow,$begincol)->{Value} = $asis; } } $beginrow = 7; }