I think that there are 2 things that might help you here. The first is the write_col()
worksheet method which will write a column or an array of data in one go.
The second is that since a formula is initially only a string you can generate it programmatically based on the number of cells that you have. Both of these points are shown in this short example:
my $workbook = Spreadsheet::WriteExcel->new("z.xls");
my $worksheet = $workbook->add_worksheet();
my @column = (
my @array = (
[ '1', '00A', 'pass' ],
[ '2', '01A', 'fail' ],
[ '3', '01B', 'fail' ],
[ '4', '02A', 'pass' ],
# Generate the formula.
my $first_row = 2; # B2 in this example
my $last_row = $first_row + @array -1;
$worksheet->write('H2', '=COUNTIF(F2:F' . $last_row . ', "FAIL")'