こんなんでいかがですか?

すいません、VB4しかやってないんです、VBAはやったけど(ぼそ):脳内構成99%が「食」の奇跡(笑)
メモ帳で書いたのをVisual Studio に貼り付けてエラーでなかったからとりあえずエントリ。

Imports System
Imports System.Text

Public Class Program


    Public Shared Sub Main()


        Dim items As String() = {"A""B""C""D""E""F""G"}

        Console.WriteLine(Program.BuildFromBitAndItems(69, items, "-"))

    End Sub


    Public Shared Function BuildFromBitAndItems(ByVal bit As IntegerByVal items As String(), ByVal joinString As StringAs String

        ' 対象を拾い出すのは別メソッドにお願い。
        Dim pickedItems As List(Of String) = Program.Pickup(Of String)(bit, items)


        ' 文字列の組み立てはこのメソッドでいいか。
        Dim result As New StringBuilder

        For i As Integer = 0 To pickedItems.Count - 1

            If i = pickedItems.Count - 1 Then

                result.Append(pickedItems(i))

            Else

                result.Append(pickedItems(i))
                result.Append(joinString)

            End If

        Next

        Return result.ToString

    End Function


    Public Shared Function Pickup(Of T)(ByVal bit As IntegerByVal items As T()) As List(Of T)

        Dim base2 As String = Convert.ToString(bit, 2)

        If base2.Length > items.Length Then

            Throw New ArgumentException("配列の長さが足りないっぽいけど・・・。")

        End If

        Dim pickedItems As New List(Of T)

        Dim lastIndex As Integer = base2.Length - 1

        ' Step って久しぶりに使ったよ・・・。
        For i As Integer = lastIndex To 0 Step -1

            If base2.Chars(i) = "1"Then

                pickedItems.Add(items(lastIndex - i))

            End If

        Next

        Return pickedItems

    End Function


End Class