ANEXO Código de programación. CÓDIGO HOJA ÍNDICE 'CommandButton de ÍNDICE a lista de MÉTRICAS/ INDICADORES Private Sub IndexIndic_Click() Sheets("Métricas").Select End Sub 'CommandButton de ÍNDICE a BENCHMARKING Private Sub IndexBench_Click() Sheets("Benchmarking").Select End Sub 'CommandButton de ÍNDICE a lista de NECESIDADES Private Sub IndexNec_Click() Sheets("Necesidades").Select End Sub 'CommandButton de ÍNDICE a QFD Private Sub IndexQFD_Click() Sheets("QFD").Select End Sub CÓDIGO HOJA BENCHMARKING 'CommandButton: Benchmarking_Índice Private Sub BenchInd_Click() Sheets("Índice").Select End Sub 'CommandButton: Benchmarking_QFD Private Sub BenchQFD_Click() Sheets("QFD").Select End Sub Private Sub DatProdButton_Click() Call DatosExtProd End Sub Private Sub Worksheet_Change(ByVal Target As Range) ‘Declaración de variables Dim UltLineaBen As Long Dim ben As Integer ben = ActiveSheet.Range("H5") UltLineaBen = Range("A" & Rows.Count).End(xlUp).Row Application.ScreenUpdating = False If Target.Column = 1 Then If Cells(Target.Row, 1).Value = "" And Target.Row <> (UltLineaBen + 1) And ben > 0 Then Range("A" & Target.Row).Select Selection.Delete Shift:=xlUp End If End If Application.ScreenUpdating = True End Sub CÓDIGO HOJA NECESIDADES 'Botón para importar métricas desde .txt Private Sub DatExtButton_Click() Call DatosExtNec End Sub 'CommandButton: Necesidades_Índice Private Sub NecIndex_Click() Sheets("Índice").Select End Sub 'CommandButton: Necesidades_Benchmarking Private Sub NecBench_Click() Sheets("Benchmarking").Select End Sub 'CommandButton: Necesidades_Métricas Private Sub NecMet_Click() Sheets("Métricas").Select End Sub 'CommandButton: Necesidades_QFD Private Sub NecQFD_Click() Sheets("QFD").Select End Sub 'Botón para PRIORIZAR NECESIDADES y mostrar el FORMULARIO... Private Sub PriorizNec_Click() PriorizNecForm.Show End Sub 'Botón para ORGANIZAR LAS NECESIDADES y mostrar el FORMULARIO... Private Sub OrgNec_Click() answer = MsgBox("¿Desea eliminar alguna necesidad redundante?", vbYesNo + vbQuestion) If answer = vbYes Then 'No hacemos nada...porque debe aparecer página con lista de necesidades y al eliminar alguna... '...necesidad debe ejecutarse código ...Private Sub Worksheet_Calculate()... Else Worksheets.Add(After:=Worksheets("Necesidades")).Name = "Necesidades organizadas" Sheets("Necesidades").Select OrganizNec.Show End If End Sub 'Botón de AYUDA para PRIORIZAR NECESIDADES... Private Sub PriorizHelpButton_Click() Ayuda1.Show End Sub 'Control de procedimiento de priorización SUMA FIJA... Sub ControlSuma() Dim i As Integer Dim UltLineaNec As Long Dim val As Integer UltLineaNec = Range("A" & Rows.Count).End(xlUp).Row For i = 0 To UltLineaNec - 1 val = val + Sheets("Necesidades").Range("B1").Offset(i, 0).Value Next i If val = 100 Then MsgBox "Ha asignado todos los puntos disponibles (100)", vbInformation End If End Sub 'REORGANIZAR LISTA Private Sub Worksheet_Change(ByVal Target As Range) ‘Declaración de variables Dim UltLineaNec As Long Dim nec As Integer nec = ActiveSheet.Range("D2") UltLineaNec = Range("A" & Rows.Count).End(xlUp).Row Application.ScreenUpdating = False If Target.Column = 1 Then If Cells(Target.Row, 1).Value = "" And Target.Row <> (UltLineaNec + 1) And nec > 0 Then Range("A" & Target.Row).Select Selection.Delete Shift:=xlUp End If End If Application.ScreenUpdating = True End Sub CÓDIGO HOJA QFD 'CommandButton: QFD_Índice Private Sub ButtonQFDIndex_Click() Sheets("Índice").Select End Sub 'CommandButton: QFD_Indicadores Private Sub QFDMet_Click() Sheets("Métricas").Select End Sub 'CommandButton: QFD_Necesidades Private Sub QFDNec_Click() Sheets("Necesidades").Select End Sub 'ANÁLISIS COMPETITIVO de la casa de la calidad Private Sub BenchmButton_Click() Call AnComp End Sub 'BENCHMARKING TÉCNICO de la casa de la calidad Private Sub BenchTcnButton_Click() Call BenTcn End Sub 'RESULTADOS de la casa de la calidad Private Sub ResButton_Click() Call FinQFD End Sub 'TEJADO de la casa de la calidad Private Sub RelEsp_Click() Call RoofHoQ End Sub 'Opción de imprimir... Private Sub PrintCurrentSheet_Click() ActiveSheet.PrintOut End Sub 'CommandButton EJECUTAR Private Sub RunButton_Click() Call CompCellsNec Call CompCellsMet Call CompHoQ End Sub 'CommandButton LIMPIAR Private Sub CleanButton_Click() Call LimpiarHoQNec Call LimpiarHoQMet Call LimpiarComHoQ End Sub 'CommandButton: Valores IDEALES/ OBJETIVOS Private Sub ValIdObjButton_Click() Call ValueIdObjetive End Sub CÓDIGO HOJA MÉTRICAS Private Sub DatMetButton_Click() Call DatosExtMet End Sub 'Establecer UNIDADES a los indicadores Private Sub UnitsInd_Click() UnitsMet.Show End Sub 'CommandButton: Índice Private Sub MetIndex_Click() Sheets("Índice").Select End Sub 'CommandButton: Lista de necesidades Private Sub MetNec_Click() Sheets("Necesidades").Select End Sub 'CommandButton: Benchmarking Private Sub MetBench_Click() Sheets("Benchmarking").Select End Sub 'CommandButton: QFD Private Sub MetQFD_Click() Sheets("QFD").Select End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim UltLineaMet As Long Dim met As Integer met = ActiveSheet.Range("E2") UltLineaMet = Range("A" & Rows.Count).End(xlUp).Row Application.ScreenUpdating = False If Target.Column = 1 Then If Cells(Target.Row, 1).Value = "" And Target.Row <> (UltLineaMet + 1) And met > 0 Then Range("A" & Target.Row).Select Selection.Delete Shift:=xlUp End If End If Application.ScreenUpdating = True End Sub CÓDIGO FORMULARIOS ESCALA NUMÉRICA 'Botón APLICAR... Private Sub CommandButton1_Click() Dim n As Object Dim Dir As Integer Dim pun As Variant necp = LDNec.Value Set n = Sheets("Necesidades").Range("A:A").Find(necp) Dir = Range(n.Address).Row pun = LDPunt.Value Sheets("Necesidades").Select Cells(Dir, 2).Select With Selection .Value = pun .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Me.LDNec.Clear Me.LDPunt.Clear End Sub 'Botón CANCELAR... Private Sub CommandButton2_Click() End End Sub Private Sub RepPropButton_Click() ‘Declaración de variables Dim i As Integer Dim UltLin As Long Dim suma As Integer Dim valor As Integer Dim total As Variant Sheets("Necesidades").Activate UltLin = Range("A" & Rows.Count).End(xlUp).Row For i = 0 To UltLin - 1 suma = suma + Range("B1").Offset(i, 0).Value Next i For i = 0 To UltLin - 1 If Range("B1").Offset(i, 0).Value <> "" Then valor = Sheets("Necesidades").Range("B1").Offset(i, 0).Value Sheets("Necesidades").Range("C1").Offset(i, 0).NumberFormat = "0.00%" total = valor / suma Range("C1").Offset(i, 0).Select With Selection .Value = total .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With End If Next i End Sub Private Sub LDNec_Enter() Sheets("Necesidades").Activate Me.LDNec.Clear For x = 1 To Range("A" & Rows.Count).End(xlUp).Row If Cells(x, 1) <> Empty Then LDNec.AddItem Range("A" & x).Value Next x End Sub Private Sub LDPunt_Enter() LDPunt.Clear Sheets("Puntuación").Activate Range("A1").Select Do While ActiveCell.Value <> "" LDPunt.AddItem ActiveCell ActiveCell.Offset(1, 0).Select Loop Sheets("Necesidades").Activate End Sub ORGANIZAR NECESIDADES Private Sub CancelButton1_Click() End End Sub Private Sub CancelButton2_Click() End End Sub Private Sub ComboBox1_Click() 'ComboBox1.RemoveItem (Me.ComboBox1.ListIndex) End Sub Private Sub ApButton_Click() Dim iCtr As Long Dim i As Integer Dim j As Integer Dim uf As Integer Dim UltLinea As Integer uf = Sheets("Necesidades organizadas").Range("A" & Rows.Count).End(xlUp).Row prim = ComboBox1.Value Sheets("Necesidades organizadas").Range("A1").Offset(uf, 0).Font.Bold = True Sheets("Necesidades organizadas").Range("A1").Offset(uf, 0) = prim 'Me.ComboBox1.Clear ComboBox1.RemoveItem (Me.ComboBox1.ListIndex) Me.ListNecPrimBox.RemoveItem ListIndex Sheets("Necesidades organizadas").Select For i = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.Selected(i) = True Then uf = Sheets("Necesidades organizadas").Range("A" & Rows.Count).End(xlUp).Row Sheets("Necesidades organizadas").Range("A1").Offset(uf, 0) = ListBox1.List(i) End If Next i For iCtr = Me.ListBox1.ListCount - 1 To 0 Step -1 If Me.ListBox1.Selected(iCtr) = True Then Me.ListBox1.RemoveItem iCtr Me.ListNecBox.RemoveItem iCtr End If Next iCtr End Sub Private Sub AceptarButton2_Click() answer = MsgBox("¿Está seguro que desea finalizar?", vbYesNo + vbQuestion) Application.ScreenUpdating = False If answer = vbYes Then UltLinea = Sheets("Necesidades organizadas").Range("A" & Rows.Count).End(xlUp).Row Range("A2:A" & UltLinea).Select Selection.Copy Sheets("Necesidades").Select Range("A1").Select ActiveSheet.Paste Sheets("Necesidades").Select UltLinea = Sheets("Necesidades").Range("A" & Rows.Count).End(xlUp).Row Range("A1:A" & UltLinea).Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .color = 6750105 End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext End With Sheets("Necesidades organizadas").Delete End Application.ScreenUpdating = True Else 'No hacemos nada para seguir con el trabajo que estabamos realizando... End If End Sub 'BOTONES PARA DESPLAZARNOS ENTRE LAS PESTAÑAS DEL FORMULARIO... Private Sub NextButton1_Click() MultiPage1.Value = 1 End Sub 'Pestaña anterior Private Sub BackButton1_Click() MultiPage1.Value = 0 End Sub 'CommandButton para actualizar ListBox1... Private Sub RefreshIcon_Click() Dim iCtr As Long Me.ListBox1.Clear For iCtr = 0 To Me.ListNecBox.ListCount - 1 Me.ListBox1.AddItem Me.ListNecBox.List(iCtr) Next iCtr End Sub 'Completar ListNecBox con lista de necesidades... Private Sub ListNecBox_Enter() Me.ListNecBox.Clear For x = 1 To Range("A" & Rows.Count).End(xlUp).Row If Cells(x, 1) <> Empty Then ListNecBox.AddItem Range("A" & x).Value Next x End Sub 'Botón para agregar items al listbox de necesidades primarias...(AGREGAR) Private Sub AddButton_Click() Dim iCtr As Long For iCtr = 0 To Me.ListNecBox.ListCount - 1 If Me.ListNecBox.Selected(iCtr) = True Then Me.ListNecPrimBox.AddItem Me.ListNecBox.List(iCtr) Me.ComboBox1.AddItem Me.ListNecBox.List(iCtr) End If Next iCtr For iCtr = Me.ListNecBox.ListCount - 1 To 0 Step -1 If Me.ListNecBox.Selected(iCtr) = True Then Me.ListNecBox.RemoveItem iCtr End If Next iCtr End Sub 'Botón para agregar items al listbox de todas las necesidades...(QUITAR) Private Sub QuitButton_Click() Dim iCtr As Long For iCtr = 0 To Me.ListNecPrimBox.ListCount - 1 If Me.ListNecPrimBox.Selected(iCtr) = True Then Me.ListNecBox.AddItem Me.ListNecPrimBox.List(iCtr) End If Next iCtr For iCtr = Me.ListNecPrimBox.ListCount - 1 To 0 Step -1 If Me.ListNecPrimBox.Selected(iCtr) = True Then Me.ListNecPrimBox.RemoveItem iCtr Me.ComboBox1.RemoveItem iCtr End If Next iCtr End Sub PRIORIZAR NECESIDADES 'Botón ACEPTAR... Private Sub CommandButton1_Click() PriorizNecForm.Hide If OptionButton1.Value = True Then EscNumForm.Show End If If OptionButton2.Value = True Then SumFijaForm.Show End If End Sub 'Botón CANCELAR... Private Sub CommandButton2_Click() End End Sub SUMA FIJA Private Sub CommandButton1_Click() 'If val < 0 Then 'MsgBox "Recuerda que tiene 100 puntos a repartir entre todas las necesidades", vbInformation 'End If Dim valMax As Integer Dim val As Integer Dim pun As Variant Dim n As Object Dim Dir As Integer Dim i As Integer Dim UltLin As Long Sheets("Necesidades").Activate UltLin = Range("A" & Rows.Count).End(xlUp).Row For i = 0 To UltLin - 1 val = val + Range("B1").Offset(i, 0).Value Next i valMax = 100 - val pun = PunSumFijaBox.Text If val + pun = 100 Then MsgBox "Ha asignado todos los puntos disponibles (100)", vbInformation End If 'Busco la fila de la necesidad seleccionada mediante lista despegable... necp = LDNecp.Value Set n = Sheets("Necesidades").Range("A:A").Find(necp) Dir = Range(n.Address).Row If pun > valMax Then MsgBox "Ha excedido la puntuación máxima disponible. Recuerde dispone de 100 puntos a distribuir entre todos los enunciados de necesidades", vbInformation val = val - pun Me.LDNecp.Clear Me.PunSumFijaBox.Text = "" End If If pun <= valMax Then Sheets("Necesidades").Select Cells(Dir, 2).Select With Selection .Value = pun .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Me.LDNecp.Clear Me.PunSumFijaBox.Text = "" End If End Sub 'botón FINALIZAR... Private Sub CommandButton2_Click() answer = MsgBox("¿Está seguro que desea finalizar? Recuerde que no se imprimirá la última selección si no ha ejecutado previamente Aplicar.", vbYesNo + vbQuestion) If answer = vbYes Then End 'Organizamos... Else 'No hacemos nada para seguir con el trabajo que estabamos realizando... End If End Sub Private Sub CommandButton3_Click() Dim i As Integer Dim UltLin As Long Dim suma As Integer Dim valor As Integer Dim total As Variant Sheets("Necesidades").Activate UltLin = Range("A" & Rows.Count).End(xlUp).Row For i = 0 To UltLin - 1 suma = suma + Range("B1").Offset(i, 0).Value Next i For i = 0 To UltLin - 1 If Range("B1").Offset(i, 0).Value <> "" Then valor = Sheets("Necesidades").Range("B1").Offset(i, 0).Value Sheets("Necesidades").Range("C1").Offset(i, 0).NumberFormat = "0.00%" total = valor / suma Range("C1").Offset(i, 0).Select With Selection .Value = total .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With End If Next i End Sub Private Sub LDNecp_Enter() Sheets("Necesidades").Activate Me.LDNecp.Clear For x = 1 To Range("A" & Rows.Count).End(xlUp).Row If Cells(x, 1) <> Empty Then LDNecp.AddItem Range("A" & x).Value Next x End Sub Private Sub SpinButton1_Change() PunSumFijaBox.Text = SpinButton1.Value End Sub UNIDADES DE MÉTRICAS Private Sub FinUnitsMet_Click() answer = MsgBox("¿Está seguro que desea finalizar? Recuerde que no se imprimirá la última selección si no ha ejecutado previamente Aplicar.", vbYesNo + vbQuestion) If answer = vbYes Then End 'Organizamos... Else 'No hacemos nada para seguir con el trabajo que estabamos realizando... End If End Sub Private Sub MetBox_Enter() Sheets("Métricas").Activate Me.MetBox.Clear For x = 1 To Range("A" & Rows.Count).End(xlUp).Row If Cells(x, 1) <> Empty Then MetBox.AddItem Range("A" & x).Value Next x End Sub Private Sub CommandButton1_Click() Dim c As Object Dim Dir As Integer Dim udad As Variant met = MetBox.Value Set c = Sheets("Métricas").Range("A:A").Find(met) Dir = Range(c.Address).Row If UnitsSym.Value = "" Then udad = TextBox1.Value Else udad = UnitsSym.Value End If Sheets("Métricas").Select Cells(Dir, 2).Select With Selection .Value = udad .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Me.MetBox.Clear Me.UnitsName.Clear Me.UnitsSym.Clear Me.TextBox1.Text = "" End Sub Private Sub UnitsSym_Enter() UnitsSym.Clear Sheets("Unidades").Activate indice = UnitsName.ListIndex + 1 Cells(2, indice).Select Do While ActiveCell.Value <> "" UnitsSym.AddItem ActiveCell ActiveCell.Offset(1, 0).Select Loop Sheets("Métricas").Select End Sub Private Sub UnitsName_Enter() UnitsName.Clear Sheets("Unidades").Activate Range("A1").Select Do While ActiveCell.Value <> "" UnitsName.AddItem ActiveCell ActiveCell.Offset(0, 1).Select Loop Sheets("Métricas").Activate End Sub CÓDIGO MÓDULOS ANÁLISIS COMPETITIVO Sub AnComp() 'ANÁLISIS COMPETITIVO... Application.ScreenUpdating = False 'Declaración de variables Dim ben As Variant Dim nec As Variant 'Declaración de índices de bucles For Dim i As Integer Dim j As Integer 'Asignar valor a variables "ben", "nec", "met"... ben = Sheets("Benchmarking").Range("H5") nec = Sheets("Necesidades").Range("D2") 'Creamos una nueva hoja llamada ..."BenchQFD"... Worksheets.Add(After:=Worksheets("QFD")).Name = "Análisis competitivo" Sheets("Análisis competitivo").Select Range("B3").Select Selection.Font.Bold = True Selection.Font.Size = 24 ActiveCell.FormulaR1C1 = "ANÁLISIS COMPETITIVO/ COMPETITIVE ANALYSIS" 'Subrayado... Selection.Font.Underline = xlUnderlineStyleSingle For i = 1 To nec Sheets("Análisis competitivo").Activate Range("B7:D7").Offset(i, 0).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Sheets("Necesidades").Select Range("A1").Offset(i - 1, 0).Select Selection.Copy Sheets("Análisis competitivo").Select Range("B7:D7").Offset(i, 0).Select ActiveSheet.Paste With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .ReadingOrder = xlContext End With Next i For j = 1 To ben Sheets("Análisis competitivo").Activate Range("D5:D7").Offset(0, j).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Sheets("Benchmarking").Select Range("A7").Offset(j - 1, 0).Select Selection.Copy Sheets("Análisis competitivo").Select ActiveSheet.Paste Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .ReadingOrder = xlContext End With Next j For i = 1 To nec For j = 1 To ben Range("E8").Offset(i - 1, j - 1).Select Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next j Next i 'Quitamos la cuadrícula de la hoja... ActiveWindow.DisplayGridlines = False Application.ScreenUpdating = True MsgBox "En este análisis competitivo se establecerá la importancia de las necesidades de los productos competidores. Utilice una escala 1-5", vbInformation End Sub BENCHMARKING TÉCNICO Sub BenTcn() 'BENCHMARKING TÉCNICO... Application.ScreenUpdating = False 'Declaración de variables Dim ben As Variant Dim met As Variant 'Declaración de índices de bucles For Dim i As Integer Dim j As Integer 'Asignar valor a variables "ben", "nec", "met"... ben = Sheets("Benchmarking").Range("H5") met = Sheets("Métricas").Range("E2") 'Creamos una nueva hoja llamada ..."BenchQFD"... Worksheets.Add(After:=Worksheets("QFD")).Name = "Benchmarking técnico" Sheets("Benchmarking técnico").Select Range("B3").Select Selection.Font.Bold = True Selection.Font.Size = 24 ActiveCell.FormulaR1C1 = "BENCHMARKING TÉCNICO/ TECHNICAL BENCHMARKING" Selection.Font.Underline = xlUnderlineStyleSingle For i = 1 To met Sheets("Benchmarking técnico").Activate Range("B7:D7").Offset(i, 0).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Sheets("Métricas").Select Range("A1").Offset(i - 1, 0).Select Selection.Copy Sheets("Benchmarking técnico").Select Range("B7:D7").Offset(i, 0).Select ActiveSheet.Paste With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext End With Next i For j = 1 To ben Sheets("Benchmarking técnico").Activate Range("E5:E7").Offset(0, j).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Sheets("Benchmarking").Select Range("A7").Offset(j - 1, 0).Select Selection.Copy Sheets("Benchmarking técnico").Select ActiveSheet.Paste Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext End With Next j For i = 1 To met For j = 1 To ben + 1 Range("E8").Offset(i - 1, j - 1).Select Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next j Next i 'Copiar las UNIDADES... For i = 0 To met - 1 Sheets("Métricas").Activate Range("B1").Offset(i, 0).Select Selection.Copy Sheets("Benchmarking técnico").Activate Range("E8").Offset(i, 0).Select Selection.NumberFormat = "General" ActiveSheet.Paste Application.CutCopyMode = False 'Adecuar al formato de celdas...(quitar relleno y bordes exteriores) With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next i 'Celda combinada con título: Unidades... Range("E5:E7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin ActiveCell.FormulaR1C1 = "Unidades" Range("E5:E7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .ReadingOrder = xlContext End With 'Quitamos la cuadícula de la hoja... ActiveWindow.DisplayGridlines = False Application.ScreenUpdating = True MsgBox "En el benchmarking técnico se establecerán los valores (rango de valores) de los productos competidores. Recuerde asignar a todas las métricas sus unidades", vbInformation End Sub COMPOSICIÓN MATRICES Sub CompCellsNec() Application.ScreenUpdating = False Dim fil As Variant Dim j As Integer fil = Sheets("Necesidades").Range("D2") For j = 1 To fil Sheets("QFD").Activate Range("E9:G9").Offset(j, 0).Select With Selection .HorizontalAlignment = xlCenter .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Sheets("Necesidades").Select Range("A1").Offset(j - 1, 0).Select Selection.Copy Sheets("QFD").Select Range("E9:G9").Offset(j, 0).Select ActiveSheet.Paste With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .ReadingOrder = xlContext End With Next j 'PRIORIZACIÓN... For j = 1 To fil 'Copiar las prioridades y eliminar color de fondo de celdas... Sheets("Necesidades").Select Range("B1").Offset(j - 1, 0).Select Selection.Copy Sheets("QFD").Select Range("D9").Offset(j, 0).Select ActiveSheet.Paste With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .ReadingOrder = xlContext End With With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Sheets("QFD").Activate Range("D9").Offset(j, 0).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next j Application.ScreenUpdating = True End Sub Sub CompCellsMet() Application.ScreenUpdating = False Dim col As Variant Dim i As Integer col = Sheets("Métricas").Range("E2") For i = 1 To col Sheets("QFD").Activate Range("G6:G9").Offset(0, i).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Sheets("Métricas").Select Range("A1").Offset(i - 1, 0).Select Selection.Copy Sheets("QFD").Select ActiveSheet.Paste Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = True .ReadingOrder = xlContext End With Next i Application.ScreenUpdating = True End Sub Sub CompHoQ() Application.ScreenUpdating = False Dim K As Integer Dim m As Integer Dim fil As Variant Dim colum As Variant fil = Sheets("Necesidades").Range("D2") colum = Sheets("Métricas").Range("E2") Sheets("QFD").Activate For K = 1 To fil For m = 1 To colum Range("H10").Offset(K - 1, m - 1).Select Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next m Next K Application.ScreenUpdating = True End Sub LIMPIEZA MATRICES Sub LimpiarHoQMet() ' Acceso directo: CTRL+l Application.ScreenUpdating = False Dim i As Integer Dim colum As Integer colum = Sheets("Métricas").Range("E2") For i = 1 To colum + 1 Sheets("QFD").Activate Range("G6:G9").Offset(0, i).Select Selection.ClearContents Selection.UnMerge Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Next i Range("E6:G9").Select With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin End With Application.ScreenUpdating = True End Sub Sub LimpiarHoQNec() ' Acceso directo: CTRL+n Application.ScreenUpdating = False Dim fil As Integer Dim j As Integer fil = Sheets("Necesidades").Range("D2") For j = 1 To fil + 1 Range("D9").Offset(j, 0).Select Selection.ClearContents Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Sheets("QFD").Activate Range("E9:G9").Offset(j, 0).Select Selection.ClearContents Selection.UnMerge Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Next j Sheets("QFD").Range("D6:D9").Select With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin End With Sheets("QFD").Range("E6:G9").Select With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin End With Application.ScreenUpdating = True End Sub Sub LimpiarComHoQ() Application.ScreenUpdating = False ‘Declaración de variables Dim l As Integer Dim z As Integer Dim fil As Variant Dim colum As Variant fil = Sheets("Necesidades").Range("D2") colum = Sheets("Métricas").Range("E2") Sheets("QFD").Activate For l = 1 To fil + 1 For z = 1 To colum + 1 Range("H10").Offset(l - 1, z - 1).Select Selection.ClearContents Selection.UnMerge Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Next z Next l Application.ScreenUpdating = True End Sub DATOS EXTERNOS Sub DatosExtNec() answer = MsgBox("Recuerde que debe seleccionar la celda a partir de la cuál desea importar los datos (A1). ¿Está seguro que desea continuar?", vbYesNo + vbQuestion) If answer = vbYes Then Dim DestBook As Workbook, SourceBook As Workbook Dim DestCell As Range Dim RetVal As Boolean ' Turn off screen updating. Application.ScreenUpdating = False ' Set object variables for the active book and active cell. Set DestBook = ActiveWorkbook Set DestCell = ActiveCell ' Show the Open dialog box. RetVal = Application.Dialogs(xlDialogOpen).Show("*.txt") ' If Retval is false (Open dialog canceled), exit the procedure. If RetVal = False Then Exit Sub ' Set an object variable for the workbook containing the text file. Set SourceBook = ActiveWorkbook ' Copy the contents of the entire sheet containing the text file. Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Copy ' Activate the destination workbook and paste special the values ' from the text file. DestBook.Activate DestCell.PasteSpecial Paste:=xlValues ' Close the book containing the text file. SourceBook.Close False Else 'No hacemos nada para seguir con el trabajo que estabamos realizando... End If End Sub Sub DatosExtMet() answer = MsgBox("Recuerde que debe seleccionar la celda a partir de la cuál desea importar los datos (A1). ¿Está seguro que desea continuar?", vbYesNo + vbQuestion) If answer = vbYes Then Dim DestBook As Workbook, SourceBook As Workbook Dim DestCell As Range Dim RetVal As Boolean ' Turn off screen updating. Application.ScreenUpdating = False ' Set object variables for the active book and active cell. Set DestBook = ActiveWorkbook Set DestCell = ActiveCell ' Show the Open dialog box. RetVal = Application.Dialogs(xlDialogOpen).Show("*.txt") ' If Retval is false (Open dialog canceled), exit the procedure. If RetVal = False Then Exit Sub ' Set an object variable for the workbook containing the text file. Set SourceBook = ActiveWorkbook ' Copy the contents of the entire sheet containing the text file. Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Copy ' Activate the destination workbook and paste special the values ' from the text file. DestBook.Activate DestCell.PasteSpecial Paste:=xlValues ' Close the book containing the text file. SourceBook.Close False Else 'No hacemos nada para seguir con el trabajo que estabamos realizando... End If End Sub Sub DatosExtProd() answer = MsgBox("Recuerde que debe seleccionar la celda a partir de la cuál desea importar los datos (A7). ¿Está seguro que desea continuar?", vbYesNo + vbQuestion) If answer = vbYes Then Dim DestBook As Workbook, SourceBook As Workbook Dim DestCell As Range Dim RetVal As Boolean ' Turn off screen updating. Application.ScreenUpdating = False ' Set object variables for the active book and active cell. Set DestBook = ActiveWorkbook Set DestCell = ActiveCell ' Show the Open dialog box. RetVal = Application.Dialogs(xlDialogOpen).Show("*.txt") ' If Retval is false (Open dialog canceled), exit the procedure. If RetVal = False Then Exit Sub ' Set an object variable for the workbook containing the text file. Set SourceBook = ActiveWorkbook ' Copy the contents of the entire sheet containing the text file. Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Copy ' Activate the destination workbook and paste special the values ' from the text file. DestBook.Activate DestCell.PasteSpecial Paste:=xlValues ' Close the book containing the text file. SourceBook.Close False Else 'No hacemos nada para seguir con el trabajo que estabamos realizando... End If End Sub RESULTADOS QFD Sub FinQFD() Dim nec As Integer Dim met As Integer Dim j As Integer Dim val1 As Variant Dim val2 As Variant Dim sumaproduct As Variant Dim total As Variant Dim Sum As Variant Dim rel As Variant Dim esc As Variant Application.ScreenUpdating = False nec = Sheets("Necesidades").Range("D2").Value met = Sheets("Métricas").Range("E2").Value 'INCIDENCIA TÉCNICA ABSOLUTA Sheets("QFD").Activate Range("E9:G9").Offset(nec + 1, 0).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin ActiveCell.FormulaR1C1 = "Incidencia Téc. Absoluta" With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .color = 5287936 End With 'FÓRMULA SUMAPRODUCTO(;)... For i = 1 To met For j = 1 To nec Sheets("QFD").Activate Range("H9").Offset(j, i - 1).Select val1 = Selection.Value Sheets("Necesidades").Activate Range("C1").Offset(j - 1, 0).Select val2 = Selection.Value sumaproduct = sumaproduct + val1 * val2 Next j Sheets("QFD").Activate Range("G9").Offset(nec + 1, i).Select If sumaproducto <> 0 Then Selection.Value = sumaproduct End If With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = False End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin 'Inicializo la variable sumaproduct para la siguiente iteración... sumaproduct = 0 Next i 'INCIDENCIA TÉCNICA RELATIVA 'Sheets("QFD").Activate 'Range("E9:G9").Offset(nec + 2, 0).Select 'With Selection '.HorizontalAlignment = xlCenter '.VerticalAlignment = xlBottom '.ReadingOrder = xlContext '.MergeCells = True 'End With 'Selection.BorderAround _ 'LineStyle:=xlContinuous, Weight:=xlThin 'ActiveCell.FormulaR1C1 = "Incidencia Téc. Relativa" 'With Selection.Interior '.Pattern = xlSolid '.PatternColorIndex = xlAutomatic '.color = 5287936 'End With 'For j = 1 To met 'Sheets("QFD").Activate 'Range("G9").Offset(nec + 1, j).Select 'total = total + Selection.Value 'Next j 'For j = 1 To met 'Sheets("QFD").Activate 'Range("G9").Offset(nec + 1, j).Select 'rel = Selection.Value 'esc = rel / total 'Range("G9").Offset(nec + 2, j).Select 'Selection.Value = esc 'With Selection '.HorizontalAlignment = xlCenter '.VerticalAlignment = xlBottom '.ReadingOrder = xlContext 'End With 'Selection.BorderAround _ 'LineStyle:=xlContinuous, Weight:=xlThin 'Next j Application.ScreenUpdating = True End Sub RELACIÓN MÉTRICAS Sub RoofHoQ() Application.ScreenUpdating = False 'Declaración de variables Dim met As Variant Dim i As Integer Dim j As Integer Dim m As Integer Dim K As Integer met = Sheets("Métricas").Range("E2") 'Añadimos nueva hoja dónde generar el tejado de la casa de la calidad Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Roof HoQ" Sheets("Roof HoQ").Select Range("C4").Select Selection.Font.Bold = True Selection.Font.Size = 20 ActiveCell.FormulaR1C1 = "RELACIÓN ENTRE ESPECIFICACIONES/ RELATIONSHIPS BETWEEN ENGINEERING SPECIFICATIONS" 'Subrayado... Selection.Font.Underline = xlUnderlineStyleSingle 'COLUMNAS... For j = 1 To met Sheets("Roof HoQ").Activate Range("E8:E10").Offset(met + 1, j).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .WrapText = True .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Selection.Font.Bold = True Sheets("Métricas").Select Range("A1").Offset(j - 1, 0).Select Selection.Copy Sheets("Roof HoQ").Select ActiveSheet.Paste Application.CutCopyMode = False Next j 'FILAS... For i = 1 To met Sheets("Roof HoQ").Activate Range("C8:E8").Offset(i, 0).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Selection.Font.Bold = True Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Sheets("Métricas").Select Range("A1").Offset(i - 1, 0).Select Selection.Copy Sheets("Roof HoQ").Select ActiveSheet.Paste Application.CutCopyMode = False Next i For K = 0 To met - 2 For m = K + 1 To met - 1 Range("F9").Offset(m, K).Select Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next m Next K 'Quitamos la cuadícula de la hoja... ActiveWindow.DisplayGridlines = False Application.ScreenUpdating = True MsgBox "Debe tener en cuenta la posible relación (positiva o negativa) entre especificaciones. Existen muchos símbolos posibles para definir esta relación pero, lo más simple es utilizar + y -. En algunas circustancias si la relación es muy fuerte se puede utilizar ++ y --, respectivamente", vbInformation End Sub VALORES IDEALES/ OBJETIVOS Sub ValueIdObjetive() 'VALORES IDEALES /OBJETIVOS... Application.ScreenUpdating = False 'Declaración de variables Dim met As Variant 'Declaración de índices de bucles For Dim i As Integer Dim j As Integer met = Sheets("Métricas").Range("E2") 'Creamos una nueva hoja llamada ..."IdObj"... Worksheets.Add(After:=Worksheets("QFD")).Name = "IdObj" Sheets("IdObj").Select Range("B3").Select Selection.Font.Bold = True Selection.Font.Size = 24 ActiveCell.FormulaR1C1 = "VALOR IDEAL / OBJETIVO" Selection.Font.Underline = xlUnderlineStyleSingle For i = 1 To met Sheets("IdObj").Activate Range("B7:D7").Offset(i, 0).Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Sheets("Métricas").Select Range("A1").Offset(i - 1, 0).Select Selection.Copy Sheets("IdObj").Select Range("B7:D7").Offset(i, 0).Select ActiveSheet.Paste With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext End With Next i 'Copiar las UNIDADES... 'Celda combinada con título: Unidades... Range("E5:E7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Selection.Font.Bold = True ActiveCell.FormulaR1C1 = "Unidades" Range("E5:E7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .ReadingOrder = xlContext End With For i = 0 To met - 1 Sheets("Métricas").Activate Range("B1").Offset(i, 0).Select Selection.Copy Sheets("IdObj").Activate Range("E8").Offset(i, 0).Select 'Selection.NumberFormat = "General" ActiveSheet.Paste Application.CutCopyMode = False 'Adecuar al formato de celdas...(quitar relleno y bordes exteriores) With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next i Sheets("IdObj").Activate Range("F5:H7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Selection.Font.Bold = True ActiveCell.FormulaR1C1 = "Mínimo aceptable" Range("F5:H7").Select Range("I5:K7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .ReadingOrder = xlContext .MergeCells = True End With Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Selection.Font.Bold = True ActiveCell.FormulaR1C1 = "Ideal" For i = 1 To met Range("F7:H7").Offset(i, 0).Select Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Range("I7:K7").Offset(i, 0).Select Selection.BorderAround _ LineStyle:=xlContinuous, Weight:=xlThin Next i 'Quitamos la cuadícula de la hoja... ActiveWindow.DisplayGridlines = False Application.ScreenUpdating = True 'MsgBox "En el benchmarking técnico se establecerán los valores (rango de valores) de los productos competidores. Recuerde asignar a todas las métricas sus unidades", vbInformation End Sub