Well…
my earlier solution didn't work. The reason, when you assign a value to a single member of a combobox list as you do with:
ComboBox2.Column(Y + 3 * ComboBox1.ListIndex) = Me("TextBox" & Y)
it is a string. Hence the presence of Val() in the M_calc sub code.
The problem with Val() is that it converts a blank/empty value to zero, and later when you apply Application.Min to it, zero is the smallest value.
So I thought the answer would be to make sure that combobox list contains numbers (doubles) as it does when it's first assigned values from a range, so a change to:
ComboBox2.Column(Y + 3 * ComboBox1.ListIndex) = Val(Me("TextBox" & Y))
should do it.
No such luck. Even if you try to assign a number (or even a date) like that, it becomes a string in the combobox.list. Why!? A combobox.list is perfectly capable of holding multiple sorts of data types.
So ignore all that and here's a work around, change one line:
sq(j \ 3) = Val(.Column(j + 2))
to:
sq(j \ 3) = IIf(Len(.Column(j + 2)) > 0, Val(.Column(j + 2)), Empty)