Jump to content

sadeliano

Members
  • Content Count

    28
  • Joined

  • Last visited

  1. Buenos tardes, gusto en saludarles, les escribo para ver si me pueden ayudar con una duda que tengo con una macro, tengo que copiar de varios archivos que se encuentran en un misma carpeta y cuyos nombres varían solamente es la fecha por ejemplo “Reporte Diario_02052017”, es decir lo único que cambia son los últimos 8 caracteres del nombre de estos archivos, de los mimos deseo copiar determinados rangos de datos que se encuentran en varias columnas, las columnas siempre serán las mismas (B14, F14, H14, I14, K14, L14 Y M14) hasta la última fila con valor, luego esos rangos los debe pegar en determinadas columnas en el archivo "BD INFORME MENSUAL DE VaR.xls" en la hoja "BASE DE DATOS". les explico lo que hice y en donde están mis dudas, adapte la siguiente sintaxis que encontré, pero solo copiando el rango K14:M14 hasta la última fila con valor solo para ver si realiza el proceso, al correr la macro solo me está tomando los datos de un solo archivo en la carpeta, la del último día registrado (18052017), no me está copiando el del resto de los archivos dentro de la carpeta, que es lo que quiero, que de todos los archivos dentro de la carpeta copie el mismo rango de valores y los pegue en el archivo BD INFORME MENSUAL DE VaR.xls. Mi otra duda está en cómo debo hacer para que el rango B14 hasta la última fila con valor lo pegue en la columna A en la última fila disponible del archivo BD INFORME MENSUAL DE VaR.xls, el rango F14, H14, I14 hasta la última fila con valor lo pegue a partir de la columna D en la última fila disponible y el rango K14, L14 Y M14 hasta la última fila con valor lo pegue en la columna G en la última fila disponible. Esperando me puedan ayudar con la siguiente duda, quedo a la espera de su siempre oportuna recomendación. Saludos cordiales Sub UnirDatosVersion2() Application.ScreenUpdating = False ruta = ThisWorkbook.Path ChDir ruta archi = Dir("*.xls*") Set h1 = ThisWorkbook.Sheets("BASE DE DATOS") nFilaFin = Range("a" & Rows.Count).End(xlUp).Row On Error Resume Next ffin = h1.UsedRange.Find(what:="*").Row ActiveCell.SpecialCells(xlLastCell).Select On Error Resume Next Do While archi <> "" If InStr(1, archi, "BD INFORME MENSUAL DE VaR") = 0 Then Workbooks.Open archi If Err.Number = 0 Then Sheets(1).Select Range("K14:M14", Range("K14:M14").End(xlDown)).Copy _ h1.Range("G" & nFilaFin + 1) End If Err.Number = 0 Application.DisplayAlerts = False Workbooks(archi).Close Application.DisplayAlerts = True End If archi = Dir() Loop End Sub
  2. Buenos días, tengo el siguiente problema, como podran observar en el ejemplo adjunto lo que quiero es colocar la peor calificación que corresponda a cada número de cliente, es decir en función del número de cliente que aparece en la columna B colocar la pero calificación que en este caso va de A a D siendo D la peor, por lo que para cada número de cliente que se repite debe sustituir por la peor calificacón que tenga, he intentando con formulas condicionales pero no he podido, quisiera ver si con una macro se puede llevar a cabo esta sustitución en forma mas rapida y eficiente. Agradezco su ayuda de antemano. PEOR CALIFICACION POR CLIENTE.xls
  3. Buenos días ioyama, gracias por tu tiempo y ayuda, disculpa al ver tu plantilla me surge una duda, ya que por ejemplo, si te vas al grupo12, en el mes de sep-14, celda J14, en mi caso la calificación es E y luego vienen cuatro D, pero si en vez de haber sido una calificación E es una C o una B en la matriz de la hoja dos donde está la formula coloca en N14 una D, cuando debería aparecer una E ya que la D en la matriz original aparece seguida cuatro veces desde la celda K14 a N14, por lo que en N14 debe aparecer una E y de allí para adelante debe aparecer la E, pero es a partir de N14 que se debería poner una E. Lo otro que observo, y disculpa nuevamente, si no fui claro en mi solicitud, es que solo debe cambiar a E cuando aparezca una calificación D o E cuatro veces seguidas de forma independiente, en este caso si aparece por ejemplo E dos veces seguida y luego D dos veces seguidas y luego aparece una C o una B no debe colocar E, ya que solo están apareciendo dos veces seguidas cada calificación en forma independiente, no es una suma. Espero me puedas ayudar reiterando mi agradecimiento por tu tiempo y ayuda. Saludos cordiales.
  4. Buenas tardes, tengo el siguiente archivo donde se encuentra una hoja llamada MATRIZ en donde tengo en las columnas los meses de los dos últimos años 2014 y 2015 y en las filas grupos a ser calificados con las letras desde la A a la E, donde E es la peor calificación. Lo que intento, es buscar en cada fila aquellas situaciones donde la calificación D y E se repitan 4 veces consecutivas y sustituir a partir de ese cuarto momento repetido hasta el final de la fila por la peor calificación, en este caso por la letra E, es decir si las calificaciones D y E se repiten en algún momento 4 veces seguidas sustituir a partir de la cuarta repetición por la letra E dejando dicho que el numero de filas puede cambiar, ya que por ahora hay 15 grupos, pero puede ser más o menos, por los que el rango a evaluar es variable, pero si es fijo el numero de columnas, siempre se van a evaluar dos años. Espero me puedan ayudar he intentando resolverlo a partir de funciones de contar en sus diversas variantes pero siempre quedo atado a un proceso a mano al final para sustituir; la idea es poder hacerlo rápido a través de una rutina que evalué cada fila y donde se cumpla la condición sustituya por la peor calificación a partir de ese momento. Gracias de antemano por su receptividad, espero por sus sugerencias MATRIZ.xls
  5. Muchas gracias a tierra_pampa y Dr Hyde ambas soluciones me han funcionado, la tierra_pampa aplicada sobre mi código original y la de Dr Hyde como una forma equivalente y alternativa a la que realice, muchas gracias nuevamente a ambos por su tiempo y ayuda, con esto doy el tema por finalizado y solucionado. Saludos cordiales.
  6. Adjunte el archivo que debe leer la macro, el otro archivo no lo puedo adjuntar, ya que el puro codigo sobrepasa los 100k permitidos por archivo, pero simplemente lo que hay que hacer es pegar el codigo en un archivo nuevo y llamarlo "Escenario", desde ese archivo el debe copiar la información del archivo DATOS DEL SISTEMA que es el que estoy adjuntando. Gracias por el apoyo. Saludos DATOS DEL SISTEMA.xls
  7. Buenos días, tengo el siguiente código que intenta copiar el mismo rango desde el archivo "DATOS DEL SISTEMA" hacia el archivo "Escenario" en la hoja Datos, siempre y cuando el nombre de la hoja del primero sea igual al encabezado de columna de la hoja Datos del segundo archivo, la intención es que si falta alguna variable el proceso no se detenga y salte al siguiente con datos, y luego en el archivo Escenario, elimine las columnas que queden sin datos, ya que no todos los días hay datos para todas las variables, esto cambia día a día. Necesito que en la hoja datos solo aparezcan las columnas en forma consecutiva co n las que tengan información. El problema es que la macro me borra todo al final, al principio me estaba funcionando bien, pero no se qué paso, no lo quiere hacer, me gustaría por favor si pueden revisarla a ver si dan con el error y me pueden ayudar a corregirla: Windows("Escenario.xls").Activate Sheets("Datos").Select Range("B2:O21").Select Selection.ClearContents Windows("Escenario.xls").Activate Worksheets("DATOS").Range("B1").Value = "30" Worksheets("DATOS").Range("C1").Value = "60" Worksheets("DATOS").Range("D1").Value = "90" Worksheets("DATOS").Range("E1").Value = "120" Worksheets("DATOS").Range("F1").Value = "180" Worksheets("DATOS").Range("G1").Value = "270" Worksheets("DATOS").Range("H1").Value = "360" Worksheets("DATOS").Range("I1").Value = "720" Worksheets("DATOS").Range("J1").Value = "1080" Worksheets("DATOS").Range("K1").Value = "2160" Worksheets("DATOS").Range("L1").Value = "4320" Worksheets("DATOS").Range("M1").Value = "5200" Worksheets("DATOS").Range("N1").Value = "USD" Worksheets("DATOS").Range("O1").Value = "LT" Range("B1:O1").Select Selection.Font.Bold = True Application.ScreenUpdating = False For Each celda In Hoja1.Range("B1:O1") Windows("DATOS DEL SISTEMA.xls").Activate For Each sh In ActiveWorkbook.Worksheets If sh.Name = celda.Value Then sh.Select Range("E4:E23").Select Application.CutCopyMode = False Selection.Copy Windows("Escenario.xls").Activate Cells(2, celda.Column).Select ActiveSheet.Paste Application.CutCopyMode = False End If Next sh Next celda Application.ScreenUpdating = True Columns("B:O").EntireColumn.AutoFit Windows("Escenario.xls").Activate Dim n As Integer 'n° columnas Dim i As Integer n = ActiveSheet.UsedRange.Columns.Count For i = n To 1 Step -1 Range("B2:O21").Select If ActiveSheet.Cells(2, i) = "" Then ActiveSheet.Cells(2, i).Select Selection.EntireColumn.Delete End If Next i [b2].Select MsgBox "Columnas Vacias Eliminadas" Range("B1", Range("B1").End(xlDown).End(xlToRight)).Select
  8. Buenos días principiant, muchisimas graciaspor por tu pronta respuesta, tu propuesta funciona excelente, es justo lo que necesitaba, gracias nuevamente por tu ayuda. Recibe un saludo cordial de mi parte.
  9. Buenas tardes, tengo la siguiente macro que busca repetir el valor que hay en la celda B3 tantas veces hacia abajo como indique el valor de la celda B2 y que al ultimo valor copiado le sume 100. hasta este punto me ha salido bien, mi duda es que esta evaluación debo hacerla para varias columnas, es decir, puedo tener tantas columnas como variables quiera evaluar, por supuesto todas ellas van a tener valores diferentes, pero estarán ubicadas en la misma fila solo que en diferentes columnas, por ej: (C2, C3); (D2, D3) y asi hasta N2, N3. Mi pregunta es, si se puede mejorar la sintaxis de tal manera que no tenga necesidad de copiar ésta tantas veces como columnas a evaluar tenga y cómo hacer para que la macro no se detenga por ejemplo, si en (C3, C4) no hay datos (las celdas esten vacias) y continue evaluando la siguientes columnas hasta que encuentre la ultima que tenga valores para evaluar en esas celdas. Espero me puedan ayudar, gracias de antemano, saludos cordiales Sub CrearFlujos() VA = Range("B2").Value VB = Range("B3").Value For a = 1 To VA If a = VA Then Cells(a + 5, 2).Value = VB + 100 Else Cells(a + 5, 2).Value = VB End If Next a End Sub MACRO REPETIR DATOS.xls
  10. Buenas tardes, tengo la siguiente duda, he realizado una macro para copiar y pegar un rango fijo de datos de una determinada cantidad de hojas que representan activos, los cuales son extraídos diariamente de un sistema y convertidos a un archivo Excel por el propio sistema, el cual llamo Hoja de Extracción.xls, las hojas siempre quedaran inidentificadas con el mismo nombre (TOTAL, VE, US ACTIVO1, ACTIVO2....ACTIVOn). De cada una de estas hojas siempre voy a tomar el rango B4:B23, el cual se copiara y pegara en el archivo Plantilla de Carga.xls en la columna identificada con el nombre de cada hoja del archivo Hoja de Extracción.xls. Introduje en la macro la expresión On erro GoTo TOTAL con la intención de que en el caso que un activo un día determinado no aparezca en la Hoja de Extracción.xls la macro no se detenga y continúe copiando el siguiente activo, ya que no todos los días están todos los activos porque pudieron ser vendidos, pero pueden volver a salir nuevamente si son comprados. Mi problema es que no lo hace, se detiene cuando falta alguno de los activos que están incluidos en la macro. Adjunto estoy colocando dos pequeños archivos con lo que estoy intentando hacer para ver si me pueden ayudar, no soy muy experto en esto de las macro. Gracias de antemano por su colaboración. Saludos cordiales Hoja de Extracción.rar Plantilla de Carga.rar
  11. Disculpa pero detecte una falla en lo que me recomendaste, ya que funciona bien pero si llegase a faltar otro activo en el archivo origen, esta macro solo funciona para el activo que definí con la sentencia continua:, cómo hago si en vez de un activo son dos o más, la idea es que la rutina continúe independientemente si hay o no información para un activo determinado, y si al día siguiente vuelve a salir información para ese activo tome el rango y lo pegue en el archivo destino siempre en la misma columna que he destinada para ese activo. Me explico mejor, yo recibo un archivo un libro origen: SALIDAS SIMULACIONES DEL VaR.xls con varias posibles hojas ACTIVO1, ACTIVO2, ACTIVO3, ACTIVO4 ... ACTIVOn pudiendo faltar uno o varios de ellos. En el código paso una por una por esas hojas copiando la columna B3:B24 de cada hoja para pegarla en otro libro destino DATOS DEL SIAR PARA ESTIMACION DEL C-VaR y EVT.xls donde voy pegando de manera continúa en las celdas B2, C2, D2 y E2 que ha sido identificada con el nombre de cada activo del archivo origen si faltara una de las hojas ACTIVOx se detendría el proceso, Si algún activo no muestra información para un día en particular esa hoja no estará en el archivo origen y la rutina se detiene, hice lo que me recomendaste y puse la sentencia en donde estaba el activo que faltaba y el corre bien pero si faltara otro activo no lo hace. Qué hace falta para que no se detenga y copie los datos independientemente si falta información para más de un activo, la idea es que si no hay salte al siguiente activo que si tiene y asi hasta completar todos los activos que muestren información. Disculpa las molestias y espero me puedan ayudar. Saludos cordiales
  12. muchas gracias por tu ayuda, he aclarado mi duda con tu recomendación, doy el tema por cerrado, saludos cordiales.
  13. Buenas tardes, me gustaría saber si me pueden ayudar con la siguiente macro, todos los días recibo un archivo con los datos de unos ACTIVOS que son colocados en diferentes hojas dependiendo del activo (ACTIVO1, ACTIVO2,…ACTIVOn), es decir, hay una hoja para cada activo. Hice una macro en el archivo "DATOS DEL SIAR PARA ESTIMACION DEL C-VaR y EVT.xls" con la intención de extraer solo el rango que me interesa el cual es fijo para cada activo ("B4:B23"). La macro me funciona bien pero tengo el problema que no siempre hay información para algún activo en particular, y yo hice la macro considerándolos todos. Por ejemplo, si el día de mañana no hay información para el ACTIVO3 esa hoja no va a estar en el archivo que recibo, por lo que, me genera un error de depuración y se detiene sin completar la rutina, no me pega nada. Mi pregunta es: existe alguna forma de decir en la macro, que si una hoja determinada no está continúe el proceso, que no se detenga y pegue el resto de las hojas que si tienen información, es decir que completa la rutina con los activos que si aparecen en el archivo y que no se detenga porque falta alguno en particular. Windows("SALIDAS SIMULACIONES DEL VaR.xls").Activate Sheets("ACTIVO1").Select Range("B4:B23").Select Selection.Copy Windows("DATOS DEL SIAR PARA ESTIMACION DEL C-VaR y EVT.xls").Activate Range("B2").Select ActiveSheet.Paste Windows("SALIDAS SIMULACIONES DEL VaR.xls").Activate Sheets("ACTIVO2").Select Range("B4:B23").Select Application.CutCopyMode = False Selection.Copy Windows("DATOS DEL SIAR PARA ESTIMACION DEL C-VaR y EVT.xls").Activate Range("C2").Select ActiveSheet.Paste Windows("SALIDAS SIMULACIONES DEL VaR.xls").Activate Sheets("ACTIVO3").Select Range("B4:B23").Select Application.CutCopyMode = False Selection.Copy Windows("DATOS DEL SIAR PARA ESTIMACION DEL C-VaR y EVT.xls").Activate Range("D2").Select ActiveSheet.Paste Windows("SALIDAS SIMULACIONES DEL VaR.xls").Activate ActiveWindow.ScrollWorkbookTabs Sheets:=-3 Sheets("ACTIVO4").Select Range("B4:B23").Select Application.CutCopyMode = False Selection.Copy Windows("DATOS DEL SIAR PARA ESTIMACION DEL C-VaR y EVT.xls").Activate Range("E2").Select ActiveSheet.Paste[/CODE] Agradeciéndoles de antemano su ayuda quedo a la espera de su siempre oportuna respuesta, Saludos cordiales.
  14. muchas gracias por su ayuda me funciono a la perfección, disculpen lo tarde de la respuesta me encontraba de vacaciones. Doy el tema por solucionado y cerrado Saludos
  15. Buenas tardes, tengo la siguiente macro: Sub prueba() Sheets("Hoja1").Select Range("b65536:d65536").Select Selection.End(xlUp).Select Selection.Copy Range("g3:g5").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True[/SIZE] End Sub Mi intención es copiar la última fila con valor en el rango de b a d y luego pegarlo como valor y traspuesto en el rango g4:g6, este rango va a ser fijo siempre, lo que se va a actualizar son los datos que se pondrán en las columnas b a d. Al correr la macro copia el valor de la última fila con valor, pero de la columna b solamente, no copia el rango completo de b a d. Espero me puedan ayudar con la sintaxis, ya que no se qué es lo que pueda estar mal en la macro, ya he probado otras sintaxis pero siempre copia solamente un valor, el que aparece en la última fila de la columna b, y lo que quiero es que me tome todo el rango (b, c y d) y luego lo pegue traspuesto y como valor en el rango g4:g6. Saludos y gracias de antemano por su ayuda. PRUEBA.rar
×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 6254 personas - Aprender Excel - Total: 4.7 / 5