Está en la página 1de 6

Macro_Texto

Convertir datos de tabla dinámica en tabla de datos independizada.

I_Crear_Tabla_Dinamica
Permite crear Tabla Dinámica a partir de los datos de Lineas de Medición extraida
del Presto.

II_Crear_Macro_Texto
Permite crear rango de datos a partir de los datos de la Tabla Dinámica.

III_Ajuste_Partidas
Ayuda a reubicar las columnas y filas de las caterogiras del NRM1.

IV_Crear_Jerarquias
Crear los niveles de jerarquias para iniciar con el trabajo de formato condicional.

V_Actualizacion_Tablas
Actualiza datos.

Borrar_Tabla_Dinamica
Elimina la Tabla Dinámica creada a partir de los datos de Lineas de Medición.

Borrar_Tabla_Datos
Elimina la tabla de datos creada a partir de la Tabla Dinámica.

**************************PARA EXCEL:
/////////////////////////////////////
Sub AgruparFilas()
Dim celda As Range
Dim fila As Range
Dim FilaInicial As Integer
Dim FilaFinal As Integer
Dim ValorAgrupacion As Integer

FilaInicial = 3
FilaFinal = 3810
ValorAgrupacion = InputBox("Ingresa el valor para agrupar:")

For Each celda In Range("A" & FilaInicial & ":A" & FilaFinal)
If celda.Value = ValorAgrupacion Then
Set fila = celda.EntireRow
fila.Group
End If
Next celda
End Sub

'Secuencia regresiva, la formula agrupa tomando en cuenta la siguiente secuencia,


si el mayor valor de la columna A es 6 deberá agrupar:
1.- Primero los valores que sean 6;
2.- Luego deberá agrupar el 5 y nuevamente el 6;
3.- Seguiría con los valores 4 para continuar con el 5 y ultimo con 6
4.- Continuaria con los valores 3 y siguiendo el 4, 5 y el 6.
Y asi sucesivamente hasta iniciar con el valor mas pequeño mayor o igual a 1 y
terminaria con el mayor valor de la columna A.

//////////////////////////////////////

Sub AgruparFilas()
Dim celda As Range
Dim fila As Range
Dim FilaInicial As Integer
Dim FilaFinal As Integer
Dim ValorMaximo As Integer
Dim ValorAgrupacion As Integer
Dim i As Integer

FilaInicial = 3
FilaFinal = 1375
ValorMaximo = WorksheetFunction.Max(Range("A" & FilaInicial & ":A" &
FilaFinal))

For ValorAgrupacion = ValorMaximo To 1 Step -1


For i = 2 To ValorAgrupacion
For Each celda In Range("A" & FilaInicial & ":A" & FilaFinal)
If celda.Value = ValorAgrupacion Then
Set fila = celda.EntireRow
fila.Group
End If
Next celda
Next i
Next ValorAgrupacion
End Sub

'En esta versión de la macro, se utiliza un bucle For anidado para seguir la
secuencia que mencionaste. El bucle externo For ValorAgrupacion = ValorMaximo To 1
Step -1 recorre los valores desde el mayor hasta el valor 1, en orden descendente.

Dentro de este bucle, el bucle interno For i = 1 To ValorAgrupacion se encarga de


repetir el agrupamiento para cada número de la secuencia. Luego, se recorren todas
las celdas en la columna A y se agrupan las filas que tengan el valor actual de
ValorAgrupacion.

De esta manera, la macro agrupará las filas según la secuencia que especificaste,
comenzando desde el número más grande en la columna A y avanzando hacia el número
más pequeño. Cada número se agrupa junto con los números mayores que él, siguiendo
el patrón que mencionaste.

Recuerda ajustar los valores de FilaInicial y FilaFinal según las filas en las que
deseas realizar el agrupamiento en tu hoja de cálculo.'

///////////////////////////////////////////////////////////////////////////////////
///////////////////

Sub AplicarSangrias()
Dim inicioFila As Long
Dim finFila As Long
Dim i As Long

FilaInicial = 3 ' Fila inicial


FilaFinal = 1375 ' Fila final

For i = FilaInicial To FilaFinal ' Itera a través de las filas especificadas


Dim sangriaNivel As Long
sangriaNivel = Cells(i, "A").Value ' Obtiene el valor numérico de la celda
en la columna A

' Asigna el nivel de sangría a la celda correspondiente en la columna D


Cells(i, "D").IndentLevel = sangriaNivel
Next i
End Sub

///////////////////////////////////////////////////////////////////////////////////
///////////////////

Sub A_DAR_FORMATO()
'
' A_DAR_FORMATO Macro
'

'
Columns("B:B").Select
Selection.NumberFormat = "0"
Columns("B:B").EntireColumn.AutoFit
Columns("B:B").Select
With Selection
.HorizontalAlignment = xlLeft
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("C:C").Select
With Selection
.VerticalAlignment = xlGeneral
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("E:E").Select
Selection.NumberFormat = "0.0000"
Columns("F:F").Select
Selection.NumberFormat = "0.00"
Columns("G:G").Select
Selection.NumberFormat = "0.00"
Columns("H:H").Select
Selection.NumberFormat = "0.00"
Range("A10:H3122").Select
Range("B10").Activate
Selection.Replace What:="ñ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End Sub

///////////////////////////////////////////////////////////////////////////////////
///////////////////

Sub EnumerarElementos()
Dim lastRow As Long
Dim i As Long
Dim counter As Long
Dim pasteCell As Range
Dim ws As Worksheet

' Define la hoja de trabajo actual


Set ws = ThisWorkbook.ActiveSheet

' Selecciona los elementos en las columnas A, B y C


ws.Range("A:C").Select

' Crea un filtro


ws.AutoFilterMode = False ' Elimina cualquier filtro existente
ws.Range("A:C").AutoFilter

lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row ' Obtiene la última fila


de la columna C

counter = 1 ' Inicializa el contador

For i = 1 To lastRow ' Itera a través de las filas de la columna C


If ws.Cells(i, "C").Value <> "" Then ' Verifica si la celda en la columna C
no está vacía
ws.Cells(i, "A").Value = counter ' Asigna el valor del contador a la
celda en la columna A
counter = counter + 1 ' Incrementa el contador
End If
Next i

Set pasteCell = ws.Cells(lastRow + 1, "A") ' Establece la celda para pegar los
números

ws.Range("A1:A" & lastRow).Copy pasteCell ' Copia y pega los números en la


celda siguiente a la última con valores en la columna A

' Ordena las filas de menor a mayor según los datos numéricos de la columna A
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=Range("A1:A" & lastRow), SortOn:=xlSortOnValues,
Order:=xlAscending
ws.Sort.SetRange Range("A:C")
ws.Sort.Header = xlYes
ws.Sort.MatchCase = False
ws.Sort.Orientation = xlTopToBottom
ws.Sort.SortMethod = xlPinYin
ws.Sort.Apply

' Desactiva el filtro


ws.AutoFilterMode = False

' Limpia la selección


Application.CutCopyMode = False
End Sub

1.- Identifica los valores existentes en la columna C.


2.- Enumera los datos de la columna C en la columna A.
3.- Copia los datos de la columna A en la celda siguiente a la ultima celda con
datos.
4.- Genera el filtro y ordena de menor a mayor las filas.

/////////////////////////////////////

Sub ObtenerNombresArchivos()
Dim carpeta As Object
Dim archivo As Object
Dim contador As Long
Dim rutaCarpeta As String

' Establece la ruta de la carpeta que contiene los archivos


rutaCarpeta = "E:\2.- TRABAJOS\CGEB - San Borja\01.- MODELOS PERMANENTE -
REVIT\REVIT - CONCRETO - ARQ - IISS - CORTE 2023 (06)JUN 20\RVT-200135 - GL"

' Reemplaza con la ruta de tu carpeta

' Crea un objeto de la carpeta


Set carpeta = CreateObject("Scripting.FileSystemObject").GetFolder(rutaCarpeta)

contador = 1 ' Inicializa el contador para las filas en Excel

' Itera a través de los archivos de la carpeta


For Each archivo In carpeta.Files
' Coloca el nombre del archivo en la celda correspondiente en Excel
Cells(contador, 1).Value = archivo.Name
contador = contador + 1 ' Incrementa el contador de filas
Next archivo
End Sub

1.- Cambias la ruta, a la carpeta con los elementos que necesitas

//////////////////////////////////////////

**************************PARA GOOGLESHEET:
function AgruparFilas() {
var FilaInicial = 46;
var FilaFinal = 266;
var ValorAgrupacion = 3; //Esta variable va de forma inversa al codigo de la fila
10 OJO.

for (var i = FilaInicial; i <= FilaFinal; i++) {


var celda = SpreadsheetApp.getActiveSheet().getRange("A" + i);
if (celda.getValue() == ValorAgrupacion) {
var fila = celda.getSheet().getRange(i, 1, 1,
celda.getSheet().getLastColumn());
fila.shiftRowGroupDepth(1); //Considerar comenzar con el nivel mas alto
(nivel mas alto numerico) e ir bajando progresivamente de forma inversa al
ValorAgrupación.
fila.collapseGroups()
}
}
}

También podría gustarte