Hey there![]()
Perhaps a visual aide will help?
Repeat(16, "abc")
dilettante's method, using the Mid() statement:
anhn's method, using concatenation:Code:"................................................" "abc............................................." "abcabc.........................................." "abcabcabc......................................." "abcabcabcabc...................................." "abcabcabcabcabc................................." "abcabcabcabcabcabc.............................." "abcabcabcabcabcabcabc..........................." "abcabcabcabcabcabcabcabc........................" "abcabcabcabcabcabcabcabcabc....................." "abcabcabcabcabcabcabcabcabcabc.................." "abcabcabcabcabcabcabcabcabcabcabc..............." "abcabcabcabcabcabcabcabcabcabcabcabc............" "abcabcabcabcabcabcabcabcabcabcabcabcabc........." "abcabcabcabcabcabcabcabcabcabcabcabcabcabc......" "abcabcabcabcabcabcabcabcabcabcabcabcabcabcabc..." "abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc"
anhn uses Log to determine how many concatenations are needed and a recursive call to get the exact number of reps.Code:"abcabc" "abcabcabcabc" "abcabcabcabcabcabcabcabc" "abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc"
anhn's method clearly has fewer steps, but the slowness of concatenation makes the end result only marginally faster. (Or so it seems, I didn't compare them significantly)
A blend of the two should prove to be faster still:
Code:Function Repeat(ByVal Number As Long, ByVal Text As String) As String Dim lngLength As Long Dim n As Long If Number < 1 Then Exit Function n = Len(Text) lngLength = Number * n Repeat = Space(lngLength) Mid(Repeat, 1, n) = Text Do While n < lngLength Mid(Repeat, n + 1, n) = Mid$(Repeat, 1, n) n = n + n Loop End Function




Reply With Quote