Chamar uma API externa para consultar os CEPs de uma cidade usando VBA pode ser realizado através de APIs públicas disponíveis. Uma das APIs que você pode usar para este propósito é a ViaCEP, que permite consultar informações de CEPs no Brasil.
Function ConsultarCEPsPorCidade(CEP As String) As String
    Dim httpObject As Object
    Set httpObject = CreateObject("MSXML2.XMLHTTP")
    Dim url As String
    url = "https://viacep.com.br/ws/" & CEP & "/json/"
    httpObject.Open "GET", url, False
    httpObject.Send
    If httpObject.Status = 200 Then
        ConsultarCEPsPorCidade = httpObject.responseText
    Else
        ConsultarCEPsPorCidade = "Erro na solicitação: " & httpObject.Status
    End If
    Set httpObject = Nothing
End Function
Sub ProcessarRespostaJSON()
    Dim CEP As String
    Dim resposta As String
    Dim linhas() As String
    Dim partes() As String
    Dim linha As String
    Dim i As Integer
    CEP = ThisWorkbook.Sheets(1).Range("A1").Value
    resposta = ConsultarCEPsPorCidade(CEP)
    ' Quebrar a resposta em linhas (cada CEP)
    linhas = Split(resposta, "},{")
    ' Processar cada linha
    For i = LBound(linhas) To UBound(linhas)
        linha = linhas(i)
        linha = Replace(linha, "{", "")
        linha = Replace(linha, "}", "")
        linha = Replace(linha, """", "")
        linha = Replace(linha, "[", "")
        linha = Replace(linha, "]", "")
        partes = Split(linha, ",")
        
        ' Atribuir os valores nas células
        ThisWorkbook.Sheets(1).Cells(1 + 3, 1).Value = ExtrairValorJSON(partes, "cep")
        ThisWorkbook.Sheets(1).Cells(2 + 3, 1).Value = ExtrairValorJSON(partes, "logradouro")
        ThisWorkbook.Sheets(1).Cells(3 + 3, 1).Value = ExtrairValorJSON(partes, "complemento")
        ThisWorkbook.Sheets(1).Cells(4 + 3, 1).Value = ExtrairValorJSON(partes, "bairro")
        ThisWorkbook.Sheets(1).Cells(5 + 3, 1).Value = ExtrairValorJSON(partes, "localidade")
        ThisWorkbook.Sheets(1).Cells(6 + 3, 1).Value = ExtrairValorJSON(partes, "uf")
        ThisWorkbook.Sheets(1).Cells(7 + 3, 1).Value = ExtrairValorJSON(partes, "ibge")
        ThisWorkbook.Sheets(1).Cells(8 + 3, 1).Value = ExtrairValorJSON(partes, "gia")
        ThisWorkbook.Sheets(1).Cells(9 + 3, 1).Value = ExtrairValorJSON(partes, "ddd")
        ThisWorkbook.Sheets(1).Cells(10 + 3, 1).Value = ExtrairValorJSON(partes, "saifi")
    Next i
End Sub
Function ExtrairValorJSON(partes() As String, chave As String) As String
    Dim parte As Variant
    For Each parte In partes
        If InStr(parte, chave) > 0 Then
            ExtrairValorJSON = Trim(Split(parte, ":")(1))
            Exit Function
        End If
    Next parte
    ExtrairValorJSON = ""
End Function
Cole o código no módulo que você criou no Editor do VBA.
Insira o nome da cidade na célula A1 e a sigla do estado na célula A2.
Execute a sub-rotina ConsultarCEPs.
Este exemplo faz uma solicitação GET para a API ViaCEP e retorna os dados em formato JSON, que será exibido na célula A3. Dependendo do volume de dados, você pode precisar de um processamento adicional para extrair e formatar as informações de maneira adequada para a sua necessidade.								
 
				 
				
					 
				 
		
		
		
		
				 
		
	 
		
	
 	   
	
		
	
 	   
	
		
	
 	   
	
				
				
		
		
					
				
				
									Criar uma função em VBA que converte números em valores por extenso pode ser um pouco complexo, devido às regras de numeração em português. Abaixo, segue uma função básica que pode converter números inteiros até 999. Se você precisar de uma função mais abrangente, que lide com números maiores e decimais, recomendo procurar uma biblioteca específica ou expandir o código.
Function NumeroPorExtenso(ByVal Numero As Integer) As String
    Dim Unidades As Variant
    Dim Dezenas As Variant
    Dim Centenas As Variant
    Dim NumExtenso As String
    Dim Resto As Integer
    ' Arrays de strings para as unidades, dezenas e centenas
    Unidades = Array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove")
    Dezenas = Array("", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa")
    Centenas = Array("", "cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos")
    ' Verificar centenas
    If Numero = 100 Then
        NumExtenso = "cem"
    Else
        NumExtenso = Centenas(Numero \ 100)
    End If
    Resto = Numero Mod 100
    ' Verificar dezenas
    If Resto >= 10 And Resto <= 19 Then
        NumExtenso = NumExtenso & " " & Array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove")(Resto - 10)
    Else
        NumExtenso = NumExtenso & " " & Dezenas(Resto \ 10)
        Resto = Resto Mod 10
    End If
    ' Verificar unidades
    NumExtenso = NumExtenso & " " & Unidades(Resto)
    ' Remover espaços extras
    NumeroPorExtenso = Trim(Replace(NumExtenso, "  ", " "))
End Function
Sub ConverterNumeroPorExtenso()
    Dim Numero As Integer
    Dim Extenso As String
    ' Lê o número da célula A1
    Numero = ThisWorkbook.Sheets(1).Range("A1").Value
    ' Converte para extenso
    Extenso = NumeroPorExtenso(Numero)
    ' Escreve o resultado na célula A2
    ThisWorkbook.Sheets(1).Range("A2").Value = Extenso
End Sub
  
Abra o Excel e pressione ALT + F11 para abrir o Editor do VBA.
No menu “Inserir”, escolha “Módulo” para criar um novo módulo.
Cole o código acima no módulo.
Execute a sub-rotina ConverterNumeroPorExtenso com um número na célula A1 da primeira planilha.
Este código irá ler o número da célula A1, converter para por extenso e colocar o resultado na célula A2. Note que este código é limitado a números inteiros até 999. Para números maiores ou com decimais, a função precisaria ser significativamente expandida.
								 
				 
				
					 
				 
		
		
		
		
				 
		
	 
		
	
 	   
	
		
	
 	   
	
		
	
 	   
	
		
		
	
   
	   
			Saibam VBA em Excel® - Uma marca registrada da Microsoft Corporation.