Interesting, this also worked for me before (I used it several times) but it also fails for me on QGIS 2.18.2.
Anyway, an alternative is to instead create a field which contains the zones for each feature and then use this field in your select expression. You can do this by creating a script which you can add by going to:
Processing Toolbox > Scripts > Tools > Create new script
The following is code taken from your link but slightly modified to run from the processing toolbox:
from qgis.core import QgsField
from math import floor
from PyQt4.QtCore import QVariant
layer = processing.getObject(Layer)
idx = layer.fieldNameIndex(str(Field_Name))
for feat in layer.getFeatures():
pt = feat.geometry().centroid().asPoint()
longitude = pt.x()
latitude = pt.y()
zone_number = floor(((longitude + 180) / 6) % 60) + 1
if latitude >= 0:
zone_letter = 'N'
zone_letter = 'S'
layer.changeAttributeValue(feat.id(), idx, '%d%s' % (int(zone_number), zone_letter))
Populated dataset from your link:
New attribute field added containing zones
Result of selecting the zones by expression (highlighted in yellow):