Ayuda VBA - muy facil

Icaro

Buenas, voy al grano, necesito ayuda para realizar una tarea de una asignatura de bioinformatica que ni volvere a ver en mi vida ni tengo demasiado tiempo para prestarle.

La cuestion:
En VBA, escribe un programa para rellenar las celdas de la primera columna desde el 1 al 10000. En la segunda columna, señala con la palabra "par" aquellos que son pares e "impar" aquellos que son impares.

Pedir que me lo hicieran seria demasiado (aunque para alguien que controle no le llevara mas de 60 segundos), pero si alguno pudiera por lo menos orientarme se lo agradeceria mucho.

cabron

Hola

No te lo voy a hacer, entre otras cosas por que no se usar visual basic para aplicaciones ni conozco el api de excel para vba, pero lo que te piden no deja de ser una variante del típico problema que ponen en las primeras etapas del aprendizaje de cualquier lenguaje, así que te dejo como se resuelve de una forma genérica, a ti te toca buscar información más especfífica sobre como hacer esto en vba.

Lo que tienes que hacer es un bucle, una repetición de lo mismo, contando de 1 al 10000. En cada repetición compruebas si estás en una celda par o impar, la forma más típica de hacerlo es comprobar si el número de reptición del bucle en el que estás, es multiplo de 2 (da resto 0 al dividirlo entre dos). Algo así:

Repetir de 1 a 10000 

 Si el resto del nº de vuelta dividido entre 2 es igual a 0

       Celda par

Si no es 0

          Celda impar

Fin repeticiones

Esto más o menos en código de cualquier lenguaje queda así:


for (i = 0; i < 10000; i++)

  if i % 2 == 0
       par
  else
       impar
   end if
end for
C

Me voy a ir a la cama. Pero el VBA es pan comido para mí. En todas las empresas que he estado, con eso de que conozco VBA (especialmente aplicado a Excel y PowerPoint), siempre llevo el tema de integración del software con Office.

Mañana en la ofi me pongo en un rato y lo posteo. Si quieres envíame un mp con un e-mail y te envío el excel.

Salu2 ;)

P.D.: Buah, mientras veía como un pivón escandaloso tiraba su vida por la borda en El Juego de tu Vida de Telecinco, he escrito la función. Te la posteo (métela en un módulo de un libro que tenga una hoja llamada Hoja1):

Public Sub Rellena()

Dim lngI As Long

For lngI = 1 To 10000
    Worksheets("Hoja1").Cells(lngI, 1).Value = lngI
    If lngI Mod 2 = 0 Then
        Worksheets("Hoja1").Cells(lngI, 2).Value = "PAR"
    Else
        Worksheets("Hoja1").Cells(lngI, 2).Value = "IMPAR"
    End If
Next lngI

End Sub

Asumo que sabes acceder al Editor de VB en Excel. El acceso rápido con el teclado es ALT+F11.

Luego una vez que vuelves a la vista de hoja de cálculo, el acceso para ejecutar la función es el visor de macros: ALT+F8.

Cualquier duda me comentas.

Dod-Evers

Mmm, y si el excel está en inglés? Se puede hacer que vaya para todos? Son constantes internas el PAR o IMPAR?

Es sólo curiosidad, ...

Soltrac

#4 Van entre comillas, son strings.

Dod-Evers

#5 a eso llego xD

Soltrac

#6 Pos tonces pq preguntas si son constantes internas?? XDDDDD. No lo entiendo, es como si hubiera puesto "ESTERNO" y "CLEIDOMASTOIDEO".

C

Como bien habéis razonado, son cadenas fijas. Lo bueno del Excel es que da mucho juego. En el valor de la celda se podrían indicar funciones, referencias a otras celdas, etc. Es divertido lo de programar en VBA para Excel.

Por ejemplo, en el caso planteado, en vez de hacer mod 2 y escribir una cadena fija, se podría haber indicado una fórmula en la columna 2 que lo hiciera. De esta forma, si cambiamos el número de la primera columna, cambiaría automáticamente la valoración de si es PAR o IMPAR. Indico el código para los curiosos:

Public Sub Rellena()

Dim lngI As Long

For lngI = 1 To 10000
   Worksheets("Hoja1").Cells(lngI, 1).Value = lngI
   Range("B" & lngI).Select
   ActiveCell.FormulaR1C1 = "=IF(ISEVEN(RC[-1]),""PAR"",""IMPAR"")"
Next lngI

 End Sub
Dod-Evers

A ver, lo preguntaba porque si ese código lo pones en un excel con inglés, "PAR" lo tomará como la constante interna que se identifica dentro como un número par, y lo mismo con "IMPAR", es como en java cuando haces private static final MIVAR = "constante" y utilizas MIVAR.

A lo que iba es que para que funcionase en un excel en chino, habría que poner fórmulas como NUMERO MOD 2 == 0 y asi te quitas de par o impar.

Soltrac

#9 Tío me he perdido completamente....

Lo q está haciendo ahí es q si la columa es par (mod 2 == 0, línea 8 del código) muestre la cadena "PAR" y si no muestre la cadena "IMPAR" en la columna número 2. Eso funciona en un excel español, inglés o chino.

Otra cosa es q los ingleses o los chinos no sepan q significa PAR o IMPAR xDDDDDD.

bLaKnI

Otra manera, a palo seco! xD

Sub hayquemelol()
    Range("A1").Select
    
For i = 1 To 10000 ActiveCell.Value = i If i Mod 2 = 0 Then ActiveCell.Offset(0, 1).Value = "PAR" Else ActiveCell.Offset(0, 1).Value = "IMPAR" ActiveCell.Offset(1, 0).Select Next End Sub
Dod-Evers

#10 vale, joer, me lie del todo xD
Lo siento.

Yo tenía en mi cabeza lo de las funciones Par(numero) impar(numero)...

Nada, corramos un estúpido velo.

NeB1

#10 se me acaba de caer un mito :P

Usuarios habituales

  • NeB1
  • Dod-Evers
  • bLaKnI
  • Soltrac
  • cabron
  • Icaro