Home Foros Foro dudas 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 5 años, 11 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.