Home Foros FOROS PARA AYUDAROS ENTRE VOSOTROS. EL PROFESOR AQUÍ NO RESPONDE Foro de Excel Duda: Función ImportarDatosDinámicos en VBA

Duda: Función ImportarDatosDinámicos en VBA

  • Este debate tiene 0 respuestas, 1 mensaje y ha sido actualizado por última vez el hace 6 años, 6 meses por Anónimo.
Viendo 1 entrada (de un total de 1)
  • Autor
    Entradas
  • #7273

    Anónimo
    Inactivo

    <p class=»MsoNormal»>Buenos días. Me pongo en contacto con usted por una duda que no he sido capaz de encontrar en ningún foro, tutorial, video, etc.</p>
    <p class=»MsoNormal»>Para situar mi problema, estoy aprendiendo VBA a la vez que lo aplico a mi trabajo, pero no doy con la sintaxis adecuada para que se ejecute correctamente.</p>
    <p class=»MsoNormal»>El enunciado de mi problema sería el siguiente: tengo una tabla dinámica con un filtro por región (región1, región2 y región3). Columnas divididas en meses del año (enero a diciembre) y filas con tres tipos de ofertas (oferta1, oferta2 y oferta3). Los datos son cuenta de número ofertas.</p>
    <p class=»MsoNormal»>Quiero extraer los datos de noviembre totales para cada región y hasta ahora lo hacía usando la función ImportarDatos y copiando el valor, pero es un trabajo muy lento y pesado para el ordenador y más si lo extrapolamos a que son muchas tablas dinámicas, regiones, etc.</p>
    <p class=»MsoNormal»>He leído que mediante matrices que guarden los valores y luego lo copien en un rango se ahorra mucho tiempo.</p>
     
    <p class=»MsoNormal»>Estoy intentando copiar cada valor por región a un hueco de la matriz, pero no conozco la sintaxis. ¿Podría ayudarme?</p>
    <p class=»MsoNormal»><b><u>Primera opción (lenta)</u></b></p>
    <p class=»MsoNormal»>Sub Cuenta()</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»).CurrentPage = _</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>        <span lang=»EN-US»>»(All)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>With ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región») </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región1″).Visible = True</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región2″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región3″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>End With</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Range(«A20″).Select</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>ActiveCell.FormulaR1C1 = _</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>        </span>»=GETPIVOTDATA(«»Ofertas»», R4C2,»»Mes»»,11)»</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>Range(«A21″).Select</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Range(«A20″).Select</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Selection.Copy</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>        :=False, Transpose:=False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>ActiveSheet.Paste</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Application.CutCopyMode = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»> </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»).CurrentPage = _</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>        <span lang=»EN-US»>»(All)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>With ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región») </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región1″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región2″).Visible = True</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región3″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>End With</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Range(«A21″).Select</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>ActiveCell.FormulaR1C1 = _</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>        </span>»=GETPIVOTDATA(«»Ofertas»», R4C2,»»Mes»»,11)»</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>Range(«A22″).Select</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Range(«A21″).Select</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Selection.Copy</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>        :=False, Transpose:=False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>ActiveSheet.Paste</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Application.CutCopyMode = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»> </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»).CurrentPage = _</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>        <span lang=»EN-US»>»(All)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>With ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región») </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región1″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región2″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región3″).Visible = True</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>End With</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Range(«A22″).Select</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>ActiveCell.FormulaR1C1 = _</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>        </span>»=GETPIVOTDATA(«»Ofertas»», R4C2,»»Mes»»,11)»</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>Range(«A21″).Select</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Range(«A22″).Select</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Selection.Copy</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>        :=False, Transpose:=False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>ActiveSheet.Paste</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Application.CutCopyMode = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»> </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»> </span></p>
    <p class=»MsoNormal»><b><u>Segunda opción (¿más rápida?</u></b><b><u><span lang=»EN-US»>)</span></u></b></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Dim i As Byte, j As Byte</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Dim fila As Byte, columna As Byte</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Dim rango As Range</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>Dim vector() As Long</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»> </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>i = 3</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>j = 1</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»> </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>ReDim vector(i, j)</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>  Set rango = Range(«Z20», «Z22″)</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>  For fila = 1 To i</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    For columna = 1 To j</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>        </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>If i = 1 Then</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>     </span>ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»).CurrentPage = _</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>        <span lang=»EN-US»>»(All)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    With ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»)</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región1″).Visible = True</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región2″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región3″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    End With</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    </span><span style=»background: red; mso-highlight: red;»>vector(fila, columna) = GETPIVOTDATA(«»Ofertas»», R4C2,»»Mes»»,11)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>ElseIf i = 2 Then</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>     </span>ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»).CurrentPage = _</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>        <span lang=»EN-US»>»(All)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    With ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»)</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región1″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región2″).Visible = True</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región3″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    End With</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    </span><span style=»background: red; mso-highlight: red;»>vector(fila, columna) = GETPIVOTDATA(«»Ofertas»», R4C2,»»Mes»»,11)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>Else: i = 3 Then</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>     </span>ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»).CurrentPage = _</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>        <span lang=»EN-US»>»(All)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    With ActiveSheet.PivotTables(«Tabla dinámica1»).PivotFields(«Región»)</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región1″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región2″).Visible = False</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>.PivotItems(«Región3″).Visible = True</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    End With</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    </span><span style=»background: red; mso-highlight: red;»>vector(fila, columna) = GETPIVOTDATA(«»Ofertas»», R4C2,»»Mes»»,11)»</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>End If</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»> </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt; text-indent: 35.4pt;»><span lang=»EN-US»>Next columna</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    Next fila</span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    </span></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»><span lang=»EN-US»>    </span>rango.Value = vector</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>End Sub</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>————————-</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>La zona en rojo es la que no sé cómo relacionar para agregar el dato. Es posible que falten variables porque como comento, soy nuevo programando.</p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»></p>
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>Espero que puedan ayudarme.</p>
     
    <p class=»MsoNormal» style=»margin-bottom: .0001pt;»>Muchas gracias.</p>

Viendo 1 entrada (de un total de 1)
  • Debes estar registrado para responder a este debate.