¿Cómo diseño la fórmula?

Necesito, que en un rango(por ej. A1:H9)me lea los valores mayores que cero y me los vaya colocando seguidos en las celdas (por ej. J1 K1 L1 ... Etc). Gracias de antemano. Uviman.

3 respuestas

Respuesta
1
Te recomiendo que pruebes con la siguiente macro, que creo cumple lo que requieres:
Sub Extraer_Positivos()
Range("A1").Select
VALORES = ""
For COL = 1 To 8
For FIL = 1 To 9
If ActiveCell.Value > 0 And ActiveCell.Value < "A" Then
VALORES = VALORES & "|" & ActiveCell.Value
End If
ActiveCell.Offset(1, 0).Select
Next FIL
ActiveCell.Offset(-9, 1).Select
Next COL
Range("I1").Select
CELDA = ""
While Not VALORES = ""
If Mid(VALORES, 1, 1) = "|" Then
ActiveCell.Value = CELDA
CELDA = ""
ActiveCell.Offset(0, 1).Select
Else
CELDA = CELDA & Mid(VALORES, 1, 1)
End If
VALORES = Mid(VALORES, 2, 1000)
Wend
End Sub
Te pido que si con eso se resolvió tu duda, finalices la pregunta por favor. En caso contrario pídeme una aclaración y con gusto te contestaré
Respuesta
1
Existe una fórmula matricial TRASPONER(<rango>) que podría ayudarte. Pero como tu pedido incluye una condición, ésta no te será útil.
Tendremos que recurrir a una macro que haga el trabajo.
A tal fin asumiré que el rango que mencionas está aislado de otras celdas (esto te servirá para rangos distintos al mencionado, bastando sólo que le indique una celda de tal bloque.
También asumiré que la forma de barrer la tabla será por columnas (podría ser por filas, como alternativa).
Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "Módulo") y pega el siguiente código:
Sub TraspoTabla()
Set ElRango = Range("A1").CurrentRegion
IniTrasp = "J1"
Proxcel = 0
For Col = 1 To ElRango.Columns.Count
For Fil = 1 To ElRango.Rows.Count
If ElRango.Cells(Fil, Col).Value > 0 Then
Range(IniTrasp).Offset(0, Proxcel).Value = ElRango.Cells(Fil, Col).Value
Proxcel = Proxcel + 1
End If
Next Fil
Next Col
End Sub
Cierra el editor de Visual Basic y graba el archivo.
Luego, en la hoja, donde está la tabla, ejecuta la macro TraspoTabla.
Espero que esto ayude a resolver tu problema.
Si así fuera, agradeceré un comentario y que la finalices.
(Recuerda que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
A cambio de mi tiempo, sólo te pido dos cosas:
- Finaliza (con puntaje y comentario) esta pregunta
- Ingresa al sitio www.porloschicos.com y presiona el
Botón de donación (es gratis).
Confío en que lo harás.
Te agradezco sinceramente tu amabilidad al contestar tan deprisa. Lo intentaré, aunque el lenguaje de las macros está aún un poco oscuro para mí.
Respuesta
1
Vete al editor de Visual Basic(Alt+F11), crea un nuevo módulo y escribe este código:
Sub a()
'Primera celda de resultados
Range("J1").Select
'Rango donde tiene que buscar los valores mayores que 0
For Each cell In Range("A1:H9")
If cell.Value > 0 Then
ActiveCell.Value = cell.Value
ActiveCell.Offset(0, 1).Select
End If
Next cell
End Sub
Ahora ya puedes cerrar el editor de Visual Basic y ejecutar la macro (Alt+F8) que se llama "a"
Si quieres cambiar los rangos de origen de datos o resultados, te he puesto un comentario en las lineas que tendrías que modificar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas