¿Tienes una hoja de Excel con columnas como Nombre, Sitio web y Teléfono y necesitas convertirla en un listado lineal para Word o InDesign sin perder ceros iniciales en los teléfonos? Aquí tienes un conjunto de rutas claras, con fórmulas, pasos y trucos para cada escenario.
Cuándo conviene convertir una tabla en lista
Transformar una tabla a una lista vertical es útil cuando el destino es maquetación, catálogos o listados rápidos donde cada registro se compone de varias líneas consecutivas. Por ejemplo:
Empresa X
www.ejemplo.com
0123456789
Repetido para cada fila de tu Excel, listo para pegar en Word o para alimentar una Combinación de datos en InDesign.
Ruta rápida con Excel con funciones dinámicas
Si cuentas con funciones dinámicas, puedes convertir la tabla a lista con una sola fórmula. Supongamos que tu rango de datos está en A2:C100
con el orden Nombre, Web, Teléfono.
Rango básico sin línea en blanco
En una celda vacía escribe:
=TRANSPOSE(TOROW(A2:C100,1,FALSE))
- El segundo argumento
1
omite celdas vacías. - El tercer argumento
FALSE
indica que se recorre por filas y apila Nombre → Web → Teléfono de cada registro. - El resultado es una sola columna lista para copiar a Word.
Agregar una línea en blanco entre registros
Cuando quieres visualmente separar cada empresa con una línea vacía, usa:
=TRANSPOSE(TOROW(HSTACK(A2:C100,""),,FALSE))
HSTACK(...,"")
agrega una columna vacía al final de cada fila; al apilarla, se convierte en un salto de línea entre registros.
Compatibilidad sin funciones dinámicas
Si no dispones de funciones dinámicas, utiliza esta fórmula rellenando hacia abajo (una celda y copia hasta cubrir todos los elementos):
=INDEX($A$2:$C$100, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$100))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$100))+1)
La lógica recorre columnas y filas “en zigzag” para producir un único listado vertical. Ajusta los rangos a tu hoja.
Rango realmente dinámico sin contar filas a mano
Convierte tu rango en una tabla estructurada de Excel con Insertar → Tabla y nómbrala, por ejemplo, Empresas
. Luego, en lugar de A2:C100
usa referencias estructuradas:
=TRANSPOSE(TOROW(Empresas[[Nombre]:[Teléfono]],1,FALSE))
Así, cuando agregues o elimines filas de la tabla, la lista se actualizará automáticamente.
Limpiar y normalizar antes de apilar
Si tus celdas contienen espacios extra o saltos de línea internos, límpialas previamente en una columna auxiliar:
=SUBSTITUTE(TRIM(CLEAN(A2)),CHAR(160)," ")
Luego usa estas columnas “limpias” en las fórmulas de apilado. Evitarás que un salto interno en una celda descoloque el listado final.
Copiar el resultado a Word sin sorpresas
- Copia la columna resultante.
- En Word, usa Pegar especial → Texto sin formato. Así evitas arrastrar formatos de celda que puedan alterar el interlineado.
Word con combinar correspondencia en modo directorio
Si prefieres que Word genere el listado directamente desde Excel, usa el tipo de combinación Directorio o Catálogo:
- Prepara tu tabla en Excel con encabezados claros: Nombre, Web, Teléfono.
- En Word: Correspondencia → Iniciar combinación → Directorio.
- Seleccionar destinatarios → Usar una lista existente y selecciona el archivo de Excel.
- Inserta los campos, cada uno en su propia línea:
«Nombre» «Web» «Teléfono»
- Finaliza y combina para crear el documento consolidado.
Ventaja principal: puedes regenerar el documento cuando cambien los datos sin rehacer el trabajo.
Control de formato en los teléfonos durante la combinación
Si necesitas forzar ceros a la izquierda o un ancho específico, utiliza un formato en el campo:
{ MERGEFIELD Telefono \# "0000000000" }
Entre las llaves se insertan con Ctrl+F9. Ajusta el número de ceros al largo deseado.
Copiar y convertir a texto en Word
Un método universal cuando no quieres fórmulas:
- Copia el rango desde Excel.
- En Word, pégalo. Si se pega como tabla, ve a Tabla → Convertir en texto y elige Tabulaciones como separador.
- Usa Ctrl+H para reemplazar tabuladores por párrafos:
- Buscar:
^t
- Reemplazar:
^p
- Buscar:
Resultado: cada celda se convierte en una línea. Si quieres una línea en blanco entre registros, realiza un reemplazo adicional por bloques según el patrón de tus columnas.
Flujo directo con combinación de datos en InDesign
Cuando el destino final es InDesign, evitar pasos intermedios simplifica la maquetación:
- Prepara el CSV desde Excel con codificación UTF‑8 y la columna de teléfono como texto o generada con
TEXT
para conservar ceros. - En InDesign, abre Ventana → Utilidades → Combinación de datos y selecciona el CSV.
- Diseña un marco de texto con tres líneas y coloca los marcadores:
<<Nombre>>
<<Web>>
<<Teléfono>>
Genera el documento. Obtendrás una página por registro o un flujo continuo, según tu plantilla.
Preservar ceros iniciales y formato de teléfonos
El reto clásico es que algunos procesos convierten 012345
en 12345
. Para evitarlo:
- Trata el teléfono como texto en Excel antes de exportar o combinar:
- Formatea la columna como Texto y vuelve a escribir o pega valores.
- O usa una columna auxiliar con:
=TEXT(B2,"0000000000")
Ajusta el número de ceros al largo que necesites.
- Si los teléfonos tienen longitudes variables pero quieres conservar lo que ves, aplica un formato personalizado con ceros suficientes (por ejemplo, diez o doce) y luego usa:
=B2
en otra columna, copiando y pegando solo valores cuando todo luzca correcto, o usa.Text
con VBA (ver más abajo) para volcar exactamente lo mostrado.
Para señales especiales como +
, extensiones o guiones, trata la columna como texto desde el principio o construye el valor con fórmula:
="+"&TEXT(B2,"0000000000")
Evita “arreglar” ceros con reemplazos globales. Busca la causa en el tipo de dato y corrígelo ahí.
Power Query para listas extensas y repetibles
Power Query es ideal cuando el proceso se repetirá y los datos crecen. Flujo sugerido:
- Convierte el rango en tabla con encabezados.
- Desde la ficha de datos, carga la tabla en Power Query.
- Añade un índice para conservar el orden original.
- Selecciona las columnas Nombre, Web, Teléfono y aplica Deshacer dinamización.
- Crea una columna “Orden” con valores para ordenar como Nombre = uno, Web = dos, Teléfono = tres.
- Ordena por índice y luego por “Orden”.
- Conserva solo la columna Value y carga como tabla de una sola columna.
Plantilla de script en lenguaje M (ajusta nombres de columnas y tabla):
let
Origen = Excel.CurrentWorkbook(){[Name="Empresas"]}[Content],
Tipo = Table.TransformColumnTypes(Origen,{{"Nombre", type text},{"Web", type text},{"Teléfono", type text}}),
Indice = Table.AddIndexColumn(Tipo,"Idx",0,1,Int64.Type),
Unpvt = Table.UnpivotOtherColumns(Indice,{"Idx"},{"Atributo","Valor"}),
Orden = Table.AddColumn(Unpvt,"Orden", each if [Atributo]="Nombre" then 1 else if [Atributo]="Web" then 2 else 3, Int64.Type),
Sort1 = Table.Sort(Orden,{{"Idx", Order.Ascending},{"Orden", Order.Ascending}}),
Final = Table.SelectColumns(Sort1,{"Valor"})
in
Final
Ventajas: reproducible, documentado y eficiente con miles de registros.
Macro de Excel para convertir la selección en lista
Si prefieres un botón que haga todo, esta macro toma el rango seleccionado y lo apila en una columna nueva. Usa .Text
para volcar exactamente lo que ves en la celda (ideal si aplicaste formatos con ceros a la izquierda).
Sub TablaEnListaVertical()
Dim rng As Range, cel As Range
Dim shOut As Worksheet
Dim r As Long, c As Long, outRow As Long
Dim cols As Long
Dim insertarLineaVacia As Boolean```
If TypeName(Selection) <> "Range" Then
MsgBox "Selecciona un rango antes de ejecutar.", vbExclamation
Exit Sub
End If
Set rng = Selection
Set shOut = Worksheets.Add
shOut.Name = "ListadoVertical"
outRow = 1
cols = rng.Columns.Count
insertarLineaVacia = True 'cambia a False si no quieres línea vacía
For r = 1 To rng.Rows.Count
For c = 1 To rng.Columns.Count
shOut.Cells(outRow, 1).Value = rng.Cells(r, c).Text
outRow = outRow + 1
Next c
If insertarLineaVacia Then
shOut.Cells(outRow, 1).Value = ""
outRow = outRow + 1
End If
Next r
Columns(1).AutoFit
MsgBox "Listado generado en la hoja '" & shOut.Name & "'.", vbInformation
```
End Sub </code></pre>
<p>Consejos para la macro:</p>
<ul>
<li>Si quieres forzar un ancho fijo de teléfono, aplica primero un formato personalizado con ceros a la izquierda en la columna de teléfono; la macro leerá ese aspecto con <code>.Text</code>.</li>
<li>Para evitar línea vacía, pon <code>insertarLineaVacia = False</code>.</li>
</ul>
<h2>Errores frecuentes y cómo evitarlos</h2>
<ul>
<li><strong>Perder ceros a la izquierda</strong>: ocurre cuando el teléfono es numérico y se exporta o combina sin formato. Solución: convertir a texto o aplicar <code>TEXT</code> antes de exportar.</li>
<li><strong>Saltos de línea indeseados</strong>: celdas con <code>Alt+Enter</code> generan cortes en el listado. Usa <code>CLEAN</code> y <code>SUBSTITUTE(,CHAR(10)," ")</code> en columnas auxiliares.</li>
<li><strong>Orden alterado en herramientas de datos</strong>: al deshacer dinamización, conserva y ordena por un índice.</li>
<li><strong>Guiones y paréntesis</strong>: si tu objetivo es estandarizar, normaliza en una columna auxiliar; si no, mantenlos como texto desde el origen.</li>
<li><strong>Pegado que trae formato raro</strong>: en Word usa <em>Pegar especial → Texto sin formato</em>.</li>
</ul>
<h2>Tabla de decisión rápida</h2>
<table>
<thead>
<tr>
<th>Escenario</th>
<th>Ruta recomendada</th>
<th>Puntos clave</th>
</tr>
</thead>
<tbody>
<tr>
<td>Necesito un listado ya mismo</td>
<td>Fórmulas con funciones dinámicas</td>
<td><code>TOROW</code> y <code>TRANSPOSE</code> generan la lista al instante</td>
</tr>
<tr>
<td>No tengo funciones dinámicas</td>
<td>Fórmula con <code>INDEX</code></td>
<td>Rellena hacia abajo; resulta igual de válido</td>
</tr>
<tr>
<td>Documento repetible y automatizado</td>
<td>Word con directorio</td>
<td>Se regenera al cambiar datos</td>
</tr>
<tr>
<td>Maquetación profesional</td>
<td>InDesign con combinación de datos</td>
<td>Plantilla con tres líneas por registro</td>
</tr>
<tr>
<td>Volúmenes grandes</td>
<td>Power Query</td>
<td>Automatiza, documenta y escala</td>
</tr>
</tbody>
</table>
<h2>Plantillas de fórmulas listas para pegar</h2>
<p>Apilar por filas, omitiendo vacíos:</p>
<pre><code>=TRANSPOSE(TOROW(A2:C100,1,FALSE))
</code></pre>
<p>Apilar con línea vacía entre registros:</p>
<pre><code>=TRANSPOSE(TOROW(HSTACK(A2:C100,""),,FALSE))
</code></pre>
<p>Compatibilidad sin funciones dinámicas (copiar hacia abajo):</p>
<pre><code>=INDEX($A$2:$C$100, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$100))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$100))+1)
</code></pre>
<p>Formatear teléfono como texto con ceros a la izquierda:</p>
<pre><code>=TEXT(B2,"0000000000")
</code></pre>
<h2>Variantes útiles</h2>
<ul>
<li><strong>Separadores visibles</strong>: en lugar de una línea en blanco, puedes insertar una fila con guiones:
<pre><code>=TRANSPOSE(TOROW(HSTACK(A2:C100,"———"),,FALSE))
Bloques por páginas en Word: una vez pegado el listado, usa Buscar y reemplazar para convertir cada línea en blanco en salto de página si necesitas un registro por página (^p^p
→ ^m
).
Marcadores y estilos: aplica un estilo de párrafo a Nombre y otro a Web y Teléfono con un reemplazo por patrón si deseas jerarquía visual.
Guía paso a paso compacta
- Deja limpios los datos en Excel y asegúrate de que Teléfono sea texto o esté formateado correctamente.
- Elige ruta: fórmulas, Word directorio, Power Query, macro o InDesign según tu flujo y volumen.
- Genera la lista y verifica que no se pierdan ceros, signos
+
, espacios o guiones. - Pega en Word como texto sin formato, o configura la combinación en Word o InDesign para automatizar.
Preguntas frecuentes
¿Por qué desaparece el cero inicial solo en algunos casos?
Porque al exportar o combinar, el sistema trata el teléfono como número y elimina ceros no significativos. La prevención es declararlo texto o aplicar formato con TEXT
antes del proceso.
¿Puedo mantener formatos como +34 912 345 678
?
Sí. Trata la columna como texto y copia lo que ves. Si generas desde fórmulas, construye el valor final con el prefijo y espacios deseados.
¿Es mejor Directorio o Carta en Word para este caso?
Directorio, porque no separa por carta; produce una sola secuencia de registros, justo lo que necesitas en un listado lineal.
¿Cómo inserto una línea en blanco cada tres celdas sin fórmulas dinámicas?
En la macro anterior activa la línea vacía o, en Word, añade una línea en blanco tras cada bloque con reemplazos basados en patrones.
Checklist de calidad antes de pegar en Word o generar en InDesign
- Columnas limpias, sin saltos internos ni espacios extra.
- Teléfonos como texto o regenerados con
TEXT
con los ceros necesarios. - Orden correcto de campos: Nombre, Web, Teléfono.
- Verificación visual en las primeras diez entradas del listado.
- Si usas Power Query o Word, guarda el flujo para poder regenerar sin esfuerzo.
Ejemplo completo de principio a fin
Partimos de una tabla con encabezados y diez filas. Creamos una versión del teléfono como texto:
=TEXT(C2,"0000000000")
Apilamos con línea en blanco para separaciones visuales:
=TRANSPOSE(TOROW(HSTACK(A2:A11,B2:B11,D2:D11,""),,FALSE))
Copiamos el resultado y, en Word, pegamos como texto sin formato. Si necesitamos que cada empresa empiece en una nueva página, reemplazamos ^p^p
por ^m
. En InDesign, alternativamente, configuramos el CSV con las tres columnas y usamos combinación de datos con un marco que contenga exactamente tres líneas por registro.
Conclusión práctica
Elige la vía más corta según tus herramientas: fórmulas para rapidez, Word con directorio para automatizar desde Excel, Power Query para procesos repetibles y macro si quieres un botón resolutivo. En todos los casos, declara los teléfonos como texto o usa TEXT
para conservar ceros. Con estos pasos, tu listado se generará limpio, consistente y listo para pegado o maquetación.
Resultado esperado:
Empresa A
www.ejemplo.com
0123456789
Empresa B
[www.otra.com](http://www.otra.com)
0987654321
…