• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

AYUDA Selección Celdas discontínuas para Macro Excel (VBA)

Dimebag

|m|Moderator From Hell|m|
Miembro del equipo
Registrado
10 Oct 2013
Mensajes
5.794
Puntos
63
Buenas,

Primero de todo, avisar de que no tengo ni papa de Macros ni VB. Justo me estoy poniendo ahora con el tema, de modo que si alguien me puede recomendar algún manual / libro, también sería de ayuda.

Llevo horas comiéndome la cabeza con una chorradaza enorme con las macros de Excel. Pero es que por más que busco no encuentro como hacer lo que quiero:mad:

Mi consulta es tan chorra como la siguiente:

Dada la celda activa actual, necesito que seleccione lo siguiente:
  • Celda actual
  • Celda (Misma Fila, columna +5)
  • Celda (misma fila, columna +10)
  • Celda (Misma fila, Columna +15)
  • Seleccionar esas cuatro celdas (sólo esas cuatro, no todo el rango desde la celda inicial a la final!), luego ese rango lo usaré para copiarlo y llevarlo a otra hoja.

Lo único que encuentro es como hacer la selección de la primera celda a la última, pero lo que quiero es una selección discontinua:
Ej: Si selecciono B5, pues que la selección sea ("B5,B10,B15,B20")

El problema es tan chorra como ese, pero no consigo solucionarlo...
 
no me acuerdo mucho de Vba...

Lo más sencillo sería que hicieras la selección de uno, copias, pegas, selección de otro y más de lo mismo.
Si es de un gran número lo pondría en un bucle.

rollo

do while(x>20){
activesheet.cells(2,x).select
activesheet.cells(2,x).copy
sheet(-----).cells(j,k).paste
x=x+5

}

aunque creo que es posible definir un array con las celdas, supongo que con este array ya te dejaría hacerlo en plan "bonito".

respecto a webs: stackoverflow, microsoft tiene buenos ejemplos de funciones y sus usos y Exceltotal para complementar.

En cuanto a manuales el más extenso que he visto es el de vba for dummies, pero en cuanto necesitas algo específico tendrás que usar las webs.
 
Última edición:
Propiedad Worksheet.Range (Excel)
Propiedad Worksheet.Cells (Excel)

Dim encontrado As Boolean
Dim i As Integer
Dim j As Integer
Dim texto As String
Dim temporal As String
Dim buscar As Boolean
Dim insertar As Boolean

'Comprobamos que no se encuentre el nombre ya en la lista
buscar = True
insertar = False

i = 3
Do While buscar = True
If Worksheets("DB").Cells(i, 2) = UCase(Range("B17").Value) Then
buscar = False
MsgBox "No se ha insertado " & UCase(Range("B17").Value) & " ya esta en DB"
Else
i = i + 1
End If

If Worksheets("DB").Cells(i, 2) = "" Then
buscar = False
insertar = True
End If

Loop
If insertar = True Then
'Buscar una fila vacia para introducir nuevo sujeto
encontrado = False
i = 3
Do While encontrado = False
If Worksheets("DB").Cells(i, 2) = "" Then
encontrado = True
Else
i = i + 1
End If

Loop

'peso B19
Worksheets("DB").Cells(i, 29).Value = UCase(Range("B19").Value)
'temperatura F18
Worksheets("DB").Cells(i, 30).Value = UCase(Range("F18").Value)
'humedad F19
Worksheets("DB").Cells(i, 31).Value = UCase(Range("F19").Value)
'cadencia media B21
Worksheets("DB").Cells(i, 32).Value = UCase(Range("B21").Value)
'tlim B24
Worksheets("DB").Cells(i, 33).Value = UCase(Range("B24").Value)
'vo2final B25
Worksheets("DB").Cells(i, 34).Value = UCase(Range("B25").Value)
'fcfinal B26
Worksheets("DB").Cells(i, 35).Value = UCase(Range("B26").Value)
'rpefinal B27
Worksheets("DB").Cells(i, 36).Value = UCase(Range("B27").Value)
'tiempovo2max B28
Worksheets("DB").Cells(i, 37).Value = UCase(Range("B28").Value)
'fecha B18
Worksheets("DB").Cells(i, 38).Value = UCase(Range("B18").Value)
'hora D18
Worksheets("DB").Cells(i, 39).Value = UCase(Range("D18").Value)


'Nombre B17
Worksheets("DB").Cells(i, 2).Value = UCase(Range("B17").Value)
'FC Max D21
Worksheets("DB").Cells(i, 40).Value = UCase(Range("D21").Value)

'talla D19
Worksheets("DB").Cells(i, 26).Value = UCase(Range("D19").Value)
End If

Fragmento de un código mio en Visual Basic para un script de Excel.
 
Arriba