Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  12 4909
Hei!

Jeg har et Excel-ark med forhåndsutfylte verdier i ulike celler. Jeg ønsker å legge til følgende funksjon: Jeg trykker på cellene med verdier, huker av en boks i cellen e.l. og celleverdien legges automatisk til en en søyle i samme regneark. Rekkefølgen på verdiene som legges til i søylen må tåle å være tilfeldig.


Er dette i det hele tatt mulig å få til?
Der burde i alle fall være mulig ved å lage en makro.
LEIK
Pope's Avatar
Trådstarter
Det er meget mulig, men jeg trenger litt drahjelp. Skulle ønske dette var Python :/
Jeg skjønner ikke problemstillingen, er ikke det her bare vanlig måte å lage søylediagram på?
Queen of Blades
Jonta's Avatar
DonorCrew
Hvordan ville du løst det i Python da?

En tegning hadde vært kjekt

Som jeg forstår det vil du ha noe slikt:

Kode

| Frukt | #Henriette | Kryss Henriette | #Birgit | Kryss Birgit |
|-------+------------+-----------------+---------+--------------|
| Eple  |         15 | X               |       6 | X            |
| Mango |       3000 |                 |      90 | X            |
| Banan |          2 | X               |       1 | X            |


Søylediagram:

Eplesøyle: 21 =======================================
Mangosøyle: 90 ================================================
Banansøyle: 3 ======
Jeg ville kopiert verdien fra cellen du trykker på til en egen liste, og deretter brukt denne listen til å generere søylene dine.

https://excel.tips.net/T003070_Mouse...nt_in_VBA.html
LEIK
Pope's Avatar
Trådstarter
Nei, jeg har nok vært litt for vag her ja.
Dette er det jeg ønsker:



Det må ikke nødvendigvis være avhukningsbokser og knapper, men dette har jeg sett på som en mulighet. Rekkefølgen på verdiene i listen spiller ingen rolle. Om jeg fjerner haken i en boks etter at verdier er overført til Ark2, og deretter trykker på knappen igjen bør denne verdien fjernes fra listen.
Sist endret av Pope; 9. oktober 2019 kl. 23:59. Grunn: Fikset bilde
▼ ... over en uke senere ... ▼
LEIK
Pope's Avatar
Trådstarter
Nytt spørsmål:

Jeg ønsker å få fire celler til å oppføre seg som valgknapper (radio buttons).
Når en verdi settes i en celle E9 skal celle F9, G9 H9 tømmes. Følgende kode fungerer greit til dette:

Kode

If Target.Address = "$E$9" Then [F9,G9,H9].ClearContents
If Target.Address = "$F$9" Then [E9,G9,H9].ClearContents
If Target.Address = "$G$9" Then [E9,F9,H9].ClearContents
If Target.Address = "$H$9" Then [E9,F9,G9].ClearContents
Utfordringen er at jeg har 65 rader med spørsmål som har fire svaralternativer (E9:H74), så jeg tenker at en for-løkke kunne gjort jobben mye mer effektivt, men litt usikker på hvordan jeg gjør dette med VBA. Noen som har mulighet til å hjelpe?
I see you...
NAPse's Avatar
Har du forsøkt å google "for loop VBA"?
Hvis du ser for deg hvordan det kan løses med en løkke vil det jo være fornuftig å undersøke om/hvordan løkker virker i VBA.

Kode

Dim i As Integer

For i = 1 To 6
    Cells(i, 1).Value = 100
Next i
LEIK
Pope's Avatar
Trådstarter
Googlet og testet i flere timer før jeg spurte her.

Men takk likevel. Skal se videre på det i morgen
I see you...
NAPse's Avatar
Jeg er litt usikker på hva du er ute etter.
Dersom jeg ikke er helt på viddene er du ute etter noe slikt(?):


Dette er hvertfall løst med dette VBA-scriptet som er slengt sammen litt tankeløst. Det kan nok løses mye bedre.

Kode

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

' Cellene vi ser etter oppdatering av
    Set KeyCells = Range("E9:H47")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

'     Display a message when one of the designated cells has been changed.
        
'       Ved oppdatering av kol. E
        If Target.Column = 5 And Target.Value <> "" Then
            Cells(Target.Row, Target.Column + 1).ClearContents
            Cells(Target.Row, Target.Column + 2).ClearContents
            Cells(Target.Row, Target.Column + 3).ClearContents
            
'        Ved oppdatering av kol. F
        ElseIf Target.Column = 6 And Target.Value <> "" Then
            Cells(Target.Row, Target.Column - 1).ClearContents
            Cells(Target.Row, Target.Column + 1).ClearContents
            Cells(Target.Row, Target.Column + 2).ClearContents
            
'       Ved oppdatering av kol. G
        ElseIf Target.Column = 7 And Target.Value <> "" Then
            Cells(Target.Row, Target.Column - 2).ClearContents
            Cells(Target.Row, Target.Column - 1).ClearContents
            Cells(Target.Row, Target.Column + 1).ClearContents
            
'       Ved oppdatering av kol. H
        ElseIf Target.Column = 8 And Target.Value <> "" Then
            Cells(Target.Row, Target.Column - 1).ClearContents
            Cells(Target.Row, Target.Column - 2).ClearContents
            Cells(Target.Row, Target.Column - 3).ClearContents
        End If
    End If
End Sub
Modifisert fra dette eksempelet.
LEIK
Pope's Avatar
Trådstarter
Dette et nøyaktig hva jeg var ute etter. Fant en annen tilnærming som også fungerte og fikk dermed redusert scriptet fra ca 300 linjer (!) til bare noen få. Legger ut scriptet når jeg er på jobb-pc’n

Dette scriptet jeg bruker. Scriptet ditt gjør eksakt samme jobben, NAPse Kombinert med et script som fyller celler med haker når jeg dobbeltklikker på cellen fungerer dette utmerket.

Kode

Private Sub Worksheet_Change(ByVal Target As Range)
    
If Target.Row >= 9 Then
    With Target
        
        If .Column = 5 Then

            Application.EnableEvents = 0

            .Cells.Offset(, 1).ClearContents
            .Cells.Offset(, 2).ClearContents
            .Cells.Offset(, 3).ClearContents

            Application.EnableEvents = 1

        End If
    
        If .Column = 6 Then

            Application.EnableEvents = 0

            .Cells.Offset(, -1).ClearContents
            .Cells.Offset(, 1).ClearContents
            .Cells.Offset(, 2).ClearContents

            Application.EnableEvents = 1

        End If
    
        If .Column = 7 Then

            Application.EnableEvents = 0

            .Cells.Offset(, -2).ClearContents
            .Cells.Offset(, -1).ClearContents
            .Cells.Offset(, 1).ClearContents

            Application.EnableEvents = 1

        End If
    
        If .Column = 8 Then

            Application.EnableEvents = 0

            .Cells.Offset(, -3).ClearContents
            .Cells.Offset(, -2).ClearContents
            .Cells.Offset(, -1).ClearContents

            Application.EnableEvents = 1

        End If
        End With
End If
    
End Sub
Sist endret av Pope; 20. oktober 2019 kl. 17:42. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
LEIK
Pope's Avatar
Trådstarter
Jeg har støtt på en ny utfordring:

Har et script som fyller visse celler i en range med en bakgrunnsfarge:
SPOILER ALERT! Vis spoiler

Kode

Private Sub skjemaOK_Click()
Dim lngRow As Long
Dim lngCol As Long

'Fjerner farge i alle celler
ThisWorkbook.ActiveSheet.Cells.ClearFormats

'figurens høyde og bredde
Range(Cells(2, 2).Address(), Cells(høydeBoks * 2 + 2, breddeBoks * 2 + 2).Address()).Interior.ColorIndex = 15

'tegner inn ruter
For lngRow = 3 To (høydeBoks * 2 + 2) Step 2
    For lngCol = 3 To (breddeBoks * 2 + 2) Step 2
        With ActiveSheet
            .Cells(lngRow, lngCol).Interior.ColorIndex = 2
        End With
    Next lngCol
Next lngRow


'lukker userform
Unload byggInfo
End Sub

Hvis høydeBoks.value = 4 og breddeBoks.value = 3 blir figuren slik:



Dette kjøres når jeg klikker OK i en userform.

Jeg ønsker å aktivere dobbeltklikk-event for de samme cellene. Altså, når userform lukkes skal det skje noe når jeg dobbelklikker de hvite cellene.

Jeg forstår ikke hvordan dette skal gjøres når jeg ikke kan legge inn en sub som aktiverer dobbelklikk-event inni skjemaOK_click-subben. Håper dette gir mening.