Ah, let's try this,
In[1]:= X = {-2, 6};
spx = {-2, -1.90577, -1.81153, -1.59327, -1.375, -1.35785, -1.3407, -1.24655, -1.22941, -1.11811, -0.934054,
-0.80167, -0.75, -0.625, -0.5, -0.25, -0.0981238, 0.303752, 0.651876, 0.94833, 1, 1.5, 1.75, 2.11731, 2.5,
2.5625, 2.625, 3.3125, 3.75, 4, 4.00964, 4.01928, 4.25964, 4.36731, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6};
spfw = {33.3632, 43.263, 51.6709, 55.5421, 57.1266, 57.2511, 57.3756, 58.059, 58.0778, 58.1995, 56.846,
55.1903, 54.5739, 53.0828, 51.1542, 48.9959, 48.0325, 42.2533, 36.408, 30.7952, 30.1551, 28.6446,
23.138, 19.4168, 6.47053, 5.90328, 5.32951, -0.513959, -0.750527, -6.38895, -6.39157, -6.39418,
-6.36456, -6.09357, -6.28599, -5.25369, -4.19539, -2.18625, -0.133803, 2.90414, 6.171};
spfn = {33.3632, 40.2933, 46.5882, 51.9781, 55.5583, 55.5708, 55.5762, 55.4604, 55.4393, 55.0045,
530116, 51.1309, 50.4546, 48.1226, 45.6012, 43.402, 42.066, 37.5522, 32.6864, 28.1979, 28.0685,
25.7067, 17.5943, 13.5547, -2.97428, -3.21054, -3.36422, -5.05466, -5.1301, -6.4392, -6.76879,
-6.48231, -7.20196, -7.00719, -7.53373, -6.00246, -4.41058, -2.8187, -1.16621, 2.35765, 6.04694};
myintervals = Reap[
For[i = 1, i < Length@spfn, i++,
If[(((0 < spfn[[i]]) && (0 < spfn[[i + 1]])) || ((spfw[[i]] <
0) && (spfw[[i + 1]] < 0))),
Sow[Interval[{spx[[i]], spx[[i + 1]]}]]]
]
][[2, 1]]
Out[5]= {Interval[{-2, -1.90577}], Interval[{-1.90577, -1.81153}], Interval[{-1.81153, -1.59327}],
Interval[{-1.59327, -1.375}], Interval[{-1.375, -1.35785}], Interval[{-1.35785, -1.3407}],
Interval[{-1.3407, -1.24655}], Interval[{-1.24655, -1.22941}], Interval[{-1.22941, -1.11811}],
Interval[{-1.11811, -0.934054}], Interval[{-0.934054, -0.80167}], Interval[{-0.80167, -0.75}],
Interval[{-0.75, -0.625}], Interval[{-0.625, -0.5}], Interval[{-0.5, -0.25}], Interval[{-0.25, -0.0981238}],
Interval[{-0.0981238, 0.303752}], Interval[{0.303752, 0.651876}], Interval[{0.651876, 0.94833}],
Interval[{0.94833, 1}], Interval[{1, 1.5}], Interval[{1.5, 1.75}], Interval[{1.75, 2.11731}],
Interval[{3.3125, 3.75}], Interval[{3.75, 4}], Interval[{4, 4.00964}], Interval[{4.00964, 4.01928}],
Interval[{4.01928, 4.25964}], Interval[{4.25964, 4.36731}], Interval[{4.36731, 4.5}], Interval[{4.5, 4.75}],
Interval[{4.75, 5}], Interval[{5, 5.25}], Interval[{5.25, 5.5}], Interval[{5.75, 6}]}
In[6]:= IntervalUnion @@ myintervals
Out[6]= Interval[{-2, 2.11731}, {3.3125, 5.5}, {5.75, 6}]
I'll explain a little, starting with your first post.
Print[] turns expressions into text that you can read, but the result of that isn't something Mathematica can calculate with. So instead I am just going to have your If make Intervals for Mathematica to calculate with.
Now sometimes your If may find an Interval and sometimes not. So I suppose I would like a sort of bag that it could put each interval it finds into the bag. Once the For is finished I would like to do an IntervalUnion on the contents of the bag. Reap creates a "bag" where Sow can put things and after the Reap is finished it gives you the contents of the bag. You can read the examples in the help system.
Now the help shows IntervalUnion[Interval[..],Interval[..]] but what we got from Reap was {Interva[..],Interval[..]} and that is wrapped in {} to make it a list. We want to strip off those {} outside the Interval and put that inside IntervalUnion. @@ will do that. You can look up @@ in the help system and try to understand how it works.
So this has introduced some new ideas for you to try to understand.
See if this works for you.