Steve, I formatted your post for better readability. You can use the # icon on editor to enclose your code in Code tags, which will emulate the VBA editor in style. The number List icon is only available if you use the Go Advanced editor.
One thing about posting here, we will tell you if your code is easily understandable. You variable names are all made of acronyms which only make sense to a coder who is familiar with the entire project, which is not use, and in 6 months won't be you, and in a year, won't be your replacement.
The numbered list of Names appears to be a list of Constants, but isn't. LSRange is not a Range, (LSMax?) Some of those variables are used like they were Constants, but have to be reset to their "constant" value after being used as changeable variables. The character string "unit" is used in the names of Variables, Constants, and Subs. If you decide to follow these guidelines, you can carefully use Ctrl+H with "Find Whole Word Only," to edit all name instances at once.
The value of (3 * (Unit - 1)) is always = 0. Why use it?
"i" should be named NewRowNum, simply because i, j, and k are standard loop counters.
The following also applies to PBStart(j). You might want to rename PBi to PBj or even rename both to **step
For LSStart = LSStart To LSRange Step LSi
'
'
'
Next LSStart
LSStart = 10
Should read
For i = LSStart To LSMax Step LSstep
'
'
'
Next i
There is no clue or hint about Sub Unit2.
Sub Unit1 calls itself, but I don't see any exit point?!?!?
IOW, and in ending, I don't have a clue what your code snippet is doing.
I'm sorry if most of this is already known to you. We have to respond below the highest level of knowledge discernible from the post itself.