A função Split quebra a string Registro e retorno um vetor com as partes separadas por ;.
UBound vai retornar o tamanho desse vetor.
Peguei o ; como separador porque parece ser o padrão de colunas do seu arquivo.
Para organizar o código e facilitar a comparação acho melhor você atribuir variáveis com os nomes dos campos em vez de usar só Split, p.ex.
Type Cadastro
Nome As String
EstadoCivil As String
Idade As String
Codigo As Variant
End Type
Sub Importa_Txt()
Dim C As Cadastro
Dim Registro As String
Dim Arquivo As Variant
Dim L As Long
Dim U As Integer
Arquivo = Application.GetOpenFilename("Arquivo de Texto (*.txt),*.txt", Title:="Escolha o arquivo desejado")
Open Arquivo For Input As #1
L = 5
Do Until EOF(1)
Line Input #1, Registro
U = UBound(Split(Registro, ";"))
C.Nome = Split(Registro, ";")(0)
C.Idade = Split(Registro, ";")(1)
C.EstadoCivil = Split(Registro, ";")(3)
C.Codigo = ""
If U >= 20 Then
If Split(Registro, ";")(20) = "999" Then C.Codigo = CDbl(Split(Registro, ";")(11) / -100)
End If
If U >= 22 Then
If Split(Registro, ";")(22) = "999" Then C.Codigo = CDbl(Split(Registro, ";")(11) / 100)
End If
If C.Codigo <> "" Then
L = L + 1
Cells(L, 1) = C.Nome
Cells(L, 2) = C.Idade
Cells(L, 3) = C.EstadoCivil
Cells(L, 4) = C.Codigo
End If
Loop
Close #1
End Sub