I'd suggest that you don't filter the subform but restrict its recordset by making its RecordSource property a query which references an option group as a parameter. The option group can go wherever you like, e.g. in the subform's header or in the parent
form immediately above the subform. If we assume the values of the option group are 1 for Industry, 2 for Aircraft, 3 for Agriculture and so on, the syntax for the query's WHERE clause would be along these lines:
WHERE ((Industry = TRUE
AND Forms!YourParentForm!YourOptionGroup = 1)
OR Nz(Forms!YourParentForm!YourOptionGroup,0) <> 1)
AND ((Aircraft = TRUE
AND Forms!YourParentForm!YourOptionGroup = 2)
OR Nz(Forms!YourParentForm!YourOptionGroup,0) <> 2)
AND ((Agriculture = TRUE
AND Forms!YourParentForm!YourOptionGroup = 3)
OR Nz(Forms!YourParentForm!YourOptionGroup,0) <> 3)
AND etc.............
This assumes the option group is in the parent form. If it is in the subform it would be referenced with the syntax:
Forms!YourParentForm!YourSubformControl.Form!YourOptionGroup
Wherever it is located, in its AfterUpdate event procedure Requery the subform control to restrict the subform's recordset.
I hope that you realize that the table design breaks one of the fundamental rules of the database relational model by doing what is known as 'encoding data as column headings'. A fundamental principle of the database relational model is the Information Principle
(Codd's Rule #1). This requires that all data be stored as values at column positions in rows in tables, and in no other way. In essence what you have is a spreadsheet masquerading as a relational database table. For this reason this design error is sometimes
known colloquially as 'committing spreadsheet'. It makes querying of the data much more difficult. With a correctly designed table where the data are all stored as explicit values in multiple rows at a single column position restricting the results on the
basis of a value in the one column would be very simple indeed.