Gå til innhold

Excel - innhold i celle skal forsvinne ved bekreftelse og utfylling


Anbefalte innlegg

__A1____B1_______C1_____D1_

[ Vare |   2    |  Mottatt |      ]

  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅  ̅ ̅  ̅

 

 Er det mulig å få B1 til å nulle seg ut hvis man skriver "Ok" i D1? (eller går det ev an med å skrive tall, f.eks med ett ettall?)

 

Hvis det går; Går det da an at D1 blir nullet ut hvis man skriver inn nye tall i B1?

Lenke til kommentar
Videoannonse
Annonse

Dette er absolutt mulig. Men du støter på et par naturlover som jeg skal forsøke å ta begripelig.

 

Først, en celle ("firkant") kan inneholde enten en verdi, for eksempel et tall, eller en beregning, en formel som føler på og returnerer konsekvensen av andre celler. Aldri begge deler. Så skriver du 4 i en celle så er den umiddelbart dum som et brød, den kan ikke regne. Men andre celler kan regne med dette firetallet hvis de inneholder en formel.

 

Og så kan en formel gjøre bare en eneste ting; vise et resultat i cella formelen bor i, og bare der. Den kan ikke dytte resultater til andre celler eller sende deg mail om at noe har skjedd.

 

Men man kan gjøre alt i Excel, og veien her er programmering. Excel har et innebygget programmeringsspråk Visual Basic for Applications (herfra VBA), også kjent som makroer. Det har uendelige krefter, nok til å slette alle feriebildene på pc'en hvis du skriver Harald i en celle. Hvis man rigger det til sånn da, jeg tror ikke akkurat dette har skjedd.

 

VBA har en stor rekke "events", det vil si at hvis akkurat dette skjer akkurat der, så kjøres et stykke VBA-kode og gjør det koden sier. Dette er uendelig nyttig. Forstår jeg deg rett så vil du ar hvis du skriver Ok i D (kolonne fire) så vil du slette innholdet i B i samme rad (kolonne 2).

 

Slik gjør du det: Åpne VBA-editoren, for eksempel med Alt F11. I vinduet oppe venstre dobbelklikker du navnet på arket det er snakk om. Da ser du et stort hvitt ark med to rullefelter over. Velg Worksheet i det venstre og Change i det høyre. Da opprettes eventet "hva skjer når celleinnhold i dette arket forandrer seg".

 

Få den til å se slik ut:


Private Sub Worksheet_Change(ByVal Target As Range)
With Target(1) 'første eller eneste endrede celle
    If .Value = "Ok" Then 'hvis tekst stemmer
        If .Column = 4 Then 'kolonne D?
            Me.Cells(.Row, 2).Value = "" 'slett B samme rad
        End If
    End If
End With
End Sub

Håper dette var til litt hjelp. Beste hilsen Harald

  • Liker 1
Lenke til kommentar

Godt forklart, selv jeg skjønte det :)

Hmmm ... Trodde det var mulig uten VBA. De er ikke særlig begeistret for at vi leker oss med det på jobben.

 

Men det er mulig å taste inn nye tall i kolonne 2, så forsvinner "Ok" med samme løsning? For hvis man ikke klarer å fjerne "Ok", så er man like langt - da må man manuelt slette "Ok" i kolonne 4 istedet for tallverdiene i kolonne 2.

(skjemaet starter vel på linje 3 med bestilling og plukkliste)

 

Edit: Ser du er flink i excel og har erfaring i å undervise i det - har du tips om bøker(på norsk) for en som kan 0?

Endret av KarpeSkrotum
Lenke til kommentar

Takk. Det er en grunn til at jeg kalte det naturlover, det er ikke en leke dette.

 

Hvis jeg forstår deg rett:

 

 If .Column = 4 Then 'kolonne D?
 Me.Cells(.Row, 2).Value = "" 'slett B samme rad
Target(1).Value = "" 'Slett OK
  End If

 

Men pass på. Handlinger gjort av VBA har ingen angrefunksjon, det må også programmeres i VBA. Hvis dette er jobb på alvor skal du kanskje kontakte Ketil i http://www.excelguru.no/ for assistanse og kvalitetssikring.

 

Og dessverre, jeg har aldri sett en dugelig lærebok i Excel på norsk/for norskspråklig Excel. Jeg har vurdert å lage en, men ingen jeg har undervist har noen gang lest en databok. Det går stort sett i krim.

 

Beste hilsen Harald

Lenke til kommentar

Hvis jeg forstår deg rett:

 

 If .Column = 4 Then 'kolonne D?

 Me.Cells(.Row, 2).Value = "" 'slett B samme rad

Target(1).Value = "" 'Slett OK

  End If

 

Dette sletter vel både b og d.? (hvis jeg forstår det riktig)

Iom det er ingenting i Target(1).Value = "" 'Slett Ok

Tanken var at "Ok" skal stå helt til man skriver en ny verdi i kolonne 2 (B) Verdien her kan være fra en til flere. (sjeldent over 10) Det er selvfølgelig flere rader med forskjellige varer, ikke bare en rad (row, 2)

 

Det er på jobb ja, men det er ikke så viktig - tenkte bare å sjekke om det var mulig iom jeg har sett at forumet har enkelte guruer på feltet og at det forenkler arbeidet til noen på jobben.

VBA er vel ikke så farlig hvis man knytter det til rette ark/bok og har så lite kode som dette - man ser jo egentlig hva som skal skje? (at man ikke kan angre er greit nok)

 

En god engelsk bok for en som må lære fra grunnen av da? :)

Endret av KarpeSkrotum
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...