Hola Davidk, muchas gracias por formular de nuevo la pregunta.
Me pareció muy interesante el planteamiento y nada fácil de resolver, por eso le he dedicado bastante tiempo.
Como bien tu dices en tu formulación, no se puede usar otra columna para hacer los cálculos y cuando se ingrese un nuevo porcentaje, los valores actuales son los que se deben modificar y no los que originalmente se ingresaron.
Bajo estas premisas, estuve revisando alternativas y la vía que encontré fue a través de una Macro. Te digo de antemano que no soy experto en Macros, sin embargo he trabajado algo en esto y he aprendido un poco con tutoriales y por ensayo y error.
A continuación la respuesta:
Premisas:
1. Para esta solución se ha elegido la columna B para el ingreso de los datos, desde la posición B1 en adelante. Cuando aparezca una celda de la columna B en blanco la Macro se detendrá
2. En la celda C1 se ingresará el valor del porcentaje.
Procedimiento
1. Abrir el programa Excel
2. Ahora vamos a "Herramientas" "Macro" "Grabar nueva Macro..." y en el cuadro de diálogo que se abre donde dice "Nombre de la Macro" escribimos Porcentaje y luego "Aceptar"
3. Cuando se cierra el cuadro de diálogo mencionado en el punto 2, aparece en la hoja una barra pequeña que es la barra de grabación de Macros. Entonces le das con el mouse al botón azul que dice detener grabación.
Comentario: lo que hemos hecho hasta ahora es crear una Macro con el nombre "Porcentaje" la cual no contiene instrucciones. Lo que haremos a continuación es copiar en el Editor de Macros las instrucciones listadas en el siguiente punto
4. Ahora vamos de nuevo a "Herramientas" "Macro" "Macros" y en el cuadro de diálogo que se abre seleccionas en "Nombre de la Macro" Porcentaje y luego le das a "Modificar", abriéndose el Editor de Visual Basic que es donde se programan las Macros
Entonces ubicas el cursor debajo de la línea donde dice Macro grabada el **/YY/2007 por Nombre y copias las siguientes instrucciones (utiliza Ctrl C y Ctrl V):
Range("C1").Select
Selection.NumberFormat = "0.00%"
Range("C1").Select
Selection.Copy
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Font.ColorIndex = 2
Range("B1").Select
Do Until ActiveCell = ""
ActiveCell.Offset(0, 200).Activate
ActiveCell.FormulaR1C1 = "=RC[-200]"
ActiveCell.Offset(0, 1).Activate
ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-200]"
Selection.Copy
ActiveCell.Offset(0, 1).Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, -202).Activate
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[202]"
ActiveCell.Offset(1, 0).Activate
Loop
Luego cierras el Editor de Visual Basic
5. Ahora le damos formato a la Celda C1 que es donde vamos a ingresar el Porcentaje: nos ubicamos en dicha celda y vamos a "Formato" "Celdas" y en la pestaña "Número" seleccionamos Porcentaje y dos decimales y le damos Aceptar
6. Ahora vamos a asignar una tecla para ejecutar la Macro desde el Teclado: "Herramientas" "Macro" "Macros" y en el cuadro que aparece seleccionamos el nombre de la Macro que en nuestro caso es Porcentaje y luedo seleccionamos Opciones, abriéndose otra ventana, donde dice "Tecla de método abreviado CTRL+, colocamos en el recuadro una u y le damos Aceptar. Esto quiere decir que cuando estemos en la hoja de Excel y le demos a Ctrl+u se ejecutará automáticamente la Macro con nombre Porcentaje.
Es hora de hacer una prueba. Sigamos los siguientes pasos:
1. En la celda C1 escribimos 100 y luego Enter. Si está bien el formato aparecerá 100%
2. Ahora nos ubicamos en la celda B1 e ingresamos 100, en la B2 200 y en la B3 300 y luego Enter
3. Ahora le damos Ctrl+u y verás como se ejecutan un serie de pasos automáticamente observándose hasta parpadeos en el monitor. Cuando se detiene la Macro, verás que los valores se mantienen o sea que hasta aquí todo va bien
4. Ahora ingresamos 200 en la Celda C1 y Enter. Ahora Ctrl+u, ejecutándose la Macro. Entonces verás que en B1, B2 y B3 se transforman en 200, 400 y 600. Si ahora asignas 100 a la celda C1 y luego Ctrl+u, verás que los valores se mantienen, cumpliéndose con tu condición de que el nuevo porcentaje afectará a los valores actuales y no a los originales. Puedes continuar ingresando nuevos porcentajes y éstos se aplicarán siempre a los valores en pantalla y no a los originales, que es una de tus condiciones.
Explicación:
La Macro desarrollada lo que hace es tomar los valores de la columna B y los lleva a otra columna muy hacia la derecha la cual no se puede ver directamente. Luego estos valores los afecta con el porcentaje en la celda C1 y los resultados los coloca a la derecha de esa columna. Luego esos resultados son de nuevo llevados a la Columna B que es la que usamos originalmente para ingresar los datos y la que siempre vemos en pantalla.
Aquí si se quiere no se cumple con tu condición de no poder utilizarse otra u otras columnas para lograr el resultado, pero no encontré otra forma. De todas formas esto es transparente para el usuario, ya que quien ingresa los datos solo usa la Columna B y la Celda C, lo demás lo hace la Macro.
Disculpa lo largo de esta respuesta, pero no encontré otra forma.
Entiendo que esta solución, Yo mismo la encuentro bastante pobre desde el punto de vista de Programación en Visual Basic, ya que obviamente yo no sé programar, pero lo importante es que hace el trabajo. Sería cuestión de buscar ayuda con un programador y pulir esta solución para hecrla mas práctica y versátil.
Espero que hayas podido seguir todos los pasos y que te haya funcionado el ejemplo y además que te sirva como solución a tu requerimiento.
Si lo consideras necesario ubícame por: robertrosa57@yahoo.es
Saludos!