-
AutorEntradas
-
22 diciembre, 2017 a las 3:44 pm #7273
AnónimoInactivo<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> -
AutorEntradas
- Debes estar registrado para responder a este debate.