Want to get rid of delay() function, FastLED, PLEASE HELP

Ça dépend. It depends.

The update of one 24 pixel strip takes ~1 ms. If you only need to update 8, you'd save 666 us. If time is tight, multiple strips is a way to go.

But if you have 1 ms, just use one strip of 24, and use program logic to address (<- see what I did there?) only the subsection or LED you want. The rest of the strip is unchanged; the show.strip puts out the new buffer contents.

It certainly makes the one thing we know you want to do simpler. Here's @blackfin's Pattern1 void function written as if you have but one strip:

void Pattern1( void )
{
    static uint32_t tPattern = 0ul;
    static uint8_t led=0;

    tNow = millis();
    if( (tNow - tPattern) >= 100ul )  {
        tPattern = tNow;
        
        leds[led] = CRGB::Red;
        FastLED.show();
        leds[led] = CRGB::Black;

        led++;
        if( led == NUM_LEDS )
            led = 0;            
    } 
}

The above assumes other changes in the sketch, in particular the LED buffer leds goes back to one dimension. And the strips are daisy chained and hooked up (and declared) as one strip to rule them all.

If you have other patterns you want to express in functions like Pattern1, they can always be written to aim at a single strip. What else you gonna be doing?

I'm mostly on the single strip rant discussion because I like to keep the hardware simple and conserve resources (I/O pins in this case).

But it will work your way if you have the pins and perhaps need the time you might save.

If you had 100s of LEDs, there could be a case for using multiple strips each with its own I/O pin and internal representation.

a7