Avatar billede zkov82 Nybegynder
18. maj 2005 - 18:05 Der er 21 kommentarer og
1 løsning

vælge celle ud fra navn på kollone og række

Jeg har et program, som skal vælge en celle i et excel ark. Som en hver anden tabel, ønsker jeg ud fra et navn i en række og et navn i en kollone at vælge en celle. Fx. hvis jeg ønsker at se målscoren for  Randers i Superligaen, så skal jeg finde den celle hvor målscoren står :)
Avatar billede martin_moth Mester
19. maj 2005 - 07:46 #1
Måske lidt mere specifikt...
Avatar billede thesurfer Nybegynder
20. maj 2005 - 13:34 #2
Jeg tror at jeg har forstået det.. du har en værdi, som du ønsker at finde positionen (kolonne + række) på?

Så skal du lave 2 loops.. en til kolonner, og en til rækker.. og så skal du "teste" indholdet af cellen, og hoppe ud, hvis den har fundet det du ønsker..
Avatar billede zkov82 Nybegynder
20. maj 2005 - 14:02 #3
thesurfer> Det lige nøjagtig jeg mener, men jeg er bare i tvivl om hvordan jeg laver det.... Et af problemer er bla hvordan jeg gemmer værdierne for kolonner og rækker, og derefter "sammenkæder" dem så man finder den ønskede celle og læser værdien deri.
Avatar billede thesurfer Nybegynder
20. maj 2005 - 14:06 #4
Teoretisk, er det ment:
- række 1, kolonne 1, check cellens indhold
- række 1, kolonne 2, check cellens indhold
- række 1, kolonne 3, check cellens indhold
-- når der ikke er flere kolonner i rækken, går man videre til næste række.
- række 2, kolonne 1, check cellens indhold
- række 2, kolonne 2, check cellens indhold
- række 2, kolonne 3, check cellens indhold

osv..
Avatar billede thesurfer Nybegynder
20. maj 2005 - 14:09 #5
Hmm.. tror faktisk at jeg havde misforstået dit spørgsmål.. læste lige titlen igen:

"vælge celle ud fra navn på kollone og række"

Pseudo-kode:

for i = 0 to Antallet_af_kolonner
  if KolonneNavn = "målscoren" then kid = KolonneNummer
  exit for
next

for i = 0 to Antallet_af_rækker
  if RækkeNavn = "målscoren" then rid = RækkeNummer
  exit for
next

Så har du kolonnenummeret i variablen "kid" og rækkenummeret i "rid"..
Avatar billede thesurfer Nybegynder
20. maj 2005 - 14:10 #6
dammit.. :-)

OK, dvs:

Eksempel - Kolonnen hedder "Superliga" og Rækken hedder "Randers"

for i = 0 to Antallet_af_kolonner
  if KolonneNavn = "Superlige" then kid = KolonneNummer
  exit for
next

for i = 0 to Antallet_af_rækker
  if RækkeNavn = "Randers" then rid = RækkeNummer
  exit for
next

Gå til cellen med id'en kid og rækken med id'en rid.. så vil du finde målscoren..
Avatar billede thesurfer Nybegynder
20. maj 2005 - 14:11 #7
Hvis det ikke er det, må du lige givet et eksempel.. du kan f.eks uploade et test-fil, så vi kan test..
Avatar billede thesurfer Nybegynder
20. maj 2005 - 14:15 #8
Der kan forekomme stavefejl :-)
Avatar billede zkov82 Nybegynder
20. maj 2005 - 14:29 #9
thesurfer> Det er lige præcis hvad jeg mener. Et af problemer er som jeg siger at "sammenkæde" værdier, fx. hvis "Superlige" findes i F1 og "randers" findes i A8, så skal      jeg læse i cellen F8.
Avatar billede thesurfer Nybegynder
20. maj 2005 - 14:43 #10
Som jeg skrev (i 20/05-2005 14:10:51): "Gå til cellen med id'en kid og rækken med id'en rid.."

Dvs, du henviser ikke selv "F8".. men kan sikkert godt..

Jeg går ud fra at det er VBA, som bruges i Excel, Word osv.. altså, ikke et rigtigt VB-program..

Jeg har ikke arbejdet med VBA før, og kan sikkert ikke lave et eksemple/kode til dig, da VBA og VB bruger forskellige metoder..

Men nu er det i det mindste afklaret.. og der foreligger eksempler.. så kan det være, at VBA-folkene kan hjælpe dig..
Avatar billede zkov82 Nybegynder
20. maj 2005 - 15:43 #11
thesurfer> Ja...du har til dels ret. Problemet er bare at jeg har en VB-program som skal opdatere excel. Om den kan gøre det direkte (læs: udenom VBA) ved jeg ikke, men det er bla det jeg ønsker svar på. Ellers kan jeg ikke se hvordan det kan lade sig gøre, kan VB evt. kalde til VBA med argumenter?
Kan du følge mig?
Avatar billede thesurfer Nybegynder
20. maj 2005 - 20:36 #12
Du har altså et Visual Basic program..? Dvs, du kan bruge en .exe fil?
Avatar billede thesurfer Nybegynder
20. maj 2005 - 21:44 #13
Jeg har lavet et lille eksempel.. følg instruktionerne og se om det var det du mente:

Option Explicit
Dim i As Integer
Dim j As Integer
Dim fundet As Boolean

' ----------------------------------------------------------
'
' Indsæt følgende controls (control, controlnavn på formen):
'
' CommandButton, "Command1"
' Label, "Label1"
' TextBox, "txtFind"
'
' Hold CTRL nede og tryk på T-tasten.
' Vælg "Microsoft FlexGrid Control 6.0".
' Indsæt en MSFlexGrid (gult ikon) på formen,
' og giv den navnet "g1".
'
' ----------------------------------------------------------

Private Sub Command1_Click()
If txtFind.Text <> "" Then

' nulstil:
g1.Row = 0: g1.Col = 0
fundet = False

  For i = 0 To g1.Rows - 1
    g1.Row = i
    For j = 0 To g1.Cols - 1
      g1.Col = j
      If g1.Text = txtFind.Text Then
        fundet = True
        Exit For
      End If
    Next
   
    If g1.Text = txtFind.Text Or fundet = True Then Exit For
  Next

  If fundet = True Then
    MsgBox "Fundet '" & txtFind.Text & "' i: Række " & g1.Row & ", kolonne " & g1.Col
  Else
    MsgBox "'" & txtFind.Text & "' blev ikke fundet!"
  End If
End If
End Sub

Private Sub Form_Load()
' indsæt titler:
g1.Row = 0: g1.Col = 1: g1.Text = "points"
g1.Row = 0: g1.Col = 2: g1.Text = "målscoren"
g1.Row = 0: g1.Col = 3: g1.Text = "andet"

' indsæt titler:
g1.Row = 1: g1.Col = 0: g1.Text = "København"
g1.Row = 2: g1.Col = 0: g1.Text = "Randers"
g1.Row = 3: g1.Col = 0: g1.Text = "Århus"

' indsæt test - værdier
g1.Row = 1: g1.Col = 1: g1.Text = "1"
g1.Row = 1: g1.Col = 2: g1.Text = "2"
g1.Row = 1: g1.Col = 3: g1.Text = "3"

g1.Row = 2: g1.Col = 1: g1.Text = "4"
g1.Row = 2: g1.Col = 2: g1.Text = "5"
g1.Row = 2: g1.Col = 3: g1.Text = "6"

g1.Row = 3: g1.Col = 1: g1.Text = "7"
g1.Row = 3: g1.Col = 2: g1.Text = "8"
g1.Row = 3: g1.Col = 3: g1.Text = "9"
End Sub

Private Sub g1_Click()
MsgBox g1.Row & ", " & g1.Col
End Sub
Avatar billede zkov82 Nybegynder
23. maj 2005 - 18:39 #14
Det minder meget godt om det jeg har brug for..... Men da jeg er newbie på området, kan jeg stadig ikke få det til at køre, jeg mangler vist at "oprette" forbindelse til excelarket....,
Avatar billede thesurfer Nybegynder
23. maj 2005 - 18:46 #15
Upload lige en test-fil.. dvs, et excel-ark med de rette felter, men med nogle test/tilfældige data..
Avatar billede zkov82 Nybegynder
23. maj 2005 - 18:57 #16
Jeg har smidt et ark her:
test.coutbound.dk/Morten_Kasper/temp.xls

Det jeg ønsker er at opdatere cellen B2 på baggrund af navnene mjc og wla.

Jeg ved godt det er lidt anderledes end det første eksempel jeg gav, men jeg var ikke sikker på at folk kunne forstå det hvis jeg brugte det jeg virkeligt skulle bruge.
Avatar billede zkov82 Nybegynder
23. maj 2005 - 18:58 #17
hov....glemte noget:
Når jeg mener opdatere, betyder det at den skal tælles en op.
Avatar billede thesurfer Nybegynder
13. juni 2005 - 02:51 #18
Jeg beklager at jeg ikke har svaret, før nu.. Pga mail-problemet her på Eksperten, skal jeg dagligt checke ca 200 spørgsmål, for at se om der er kommet nye indlæg.. jeg må have overset dit spørgsmål..

Jeg har downloadet xls-filen, og vil kigge på det, i løbet af den næste par dage..

/theSurfer
Avatar billede thesurfer Nybegynder
13. juni 2005 - 04:01 #19
Mener du sådan her?: http://frip.dk/thesurfer/e/q/618768/01.exx (omdøb "exx" til "exe")

/theSurfer
Avatar billede zkov82 Nybegynder
20. juni 2005 - 13:27 #20
Ja....det ser klasse ud, det ligner noget af det jeg skal bruge.  Kan jeg få kildekoden?
Avatar billede thesurfer Nybegynder
20. juni 2005 - 23:01 #21
..har set dit indlæg.. uploader koden snarest!.. har travlt.. smutter.. :-)

/theSurfer
Avatar billede thesurfer Nybegynder
25. juni 2005 - 01:53 #22
Det må du meget undskylde.. har været igang med at sortere mails (omkring 700 stks), og glemte at vende tilbage til dig..

Her er koden:

Option Explicit
Dim r As Integer
Dim c As Integer
Dim rowid As Integer, colid As Integer
Dim fundet As Boolean

' ----------------------------------------------------------
'
' Indsæt følgende controls (control, controlnavn på formen):
'
' CommandButton, "Command1"
' Label, "Label1"
' TextBox, "txtFind"
'
' Hold CTRL nede og tryk på T-tasten.
' Vælg "Microsoft FlexGrid Control 6.0".
' Indsæt en MSFlexGrid (gult ikon) på formen,
' og giv den navnet "g1".
'
' ----------------------------------------------------------

Private Sub cmdExecute_Click()
If txtPM.Text = "" Or IsNumeric(txtPM.Text) = False Then
  ' værdien der skal lægges til/trækkes fra, mangler:
  MsgBox "Fejl i +/- værdien!"
  Exit Sub
End If

If txtRow.Text <> "" And txtCol.Text <> "" Then
' der står noget i begge felter.. fortsæt..

' nulstil:
fundet = False
rowid = -1
colid = -1

g1.Row = 0: g1.Col = 0 ' gå til felt 0,0
For r = 1 To g1.Rows - 1 ' start ved 1 og gå felterne igennem til max
  g1.Row = r ' gå til feltet-værdien, der er i "r"
  If LCase(g1.Text) = LCase(txtRow.Text) Then ' sammenlign med textboks med grid-felt (små bogstaver)
    rowid = r ' søgeordet er fundet, noter felt-tallet fra "r"
    Exit For ' hop ud af For-Next løkken
  End If
Next

g1.Row = 0: g1.Col = 0 ' gå til felt 0,0
For c = 1 To g1.Cols ' start ved 1 og gå felterne igennem til max
  g1.Col = c ' gå til feltet-værdien, der er i "c"
  If LCase(g1.Text) = LCase(txtCol.Text) Then ' sammenlign med textboks med grid-felt (små bogstaver)
    colid = c ' søgeordet er fundet, noter felt-tallet fra "c"
    Exit For ' hop ud af For-Next løkken
  End If
Next

If colid = -1 Or rowid = -1 Then ' undersøg om begge felter er fundet
  ' et/begge felter blev IKKE fundet!
  MsgBox "Kombinationen '" & txtCol.Text & "' og '" & txtRow.Text & "' blev ikke fundet!"
Else
  ' begge felter BLEV fundet...
 
  g1.Row = rowid: g1.Col = colid ' gå til de fundne felter
 
  If cboPM.ListIndex = 0 Then ' check om det er "+" der er valgt
    g1.Text = CDbl(g1.Text) + CDbl(txtPM.Text) ' "+" er valgt, læg til
  Else
    g1.Text = CDbl(g1.Text) - CDbl(txtPM.Text) ' "-" er valgt, træk fra
  End If
End If

Else
  ' Der er ikke skrevet noget i begge søgefelter.. enten ingen felter, eller kun 1
  MsgBox "Du skal skrive både bynavn og gruppe!"
End If
End Sub

Private Sub Form_Load()
' indsæt titler:
g1.Row = 0: g1.Col = 1: g1.Text = "points"
g1.Row = 0: g1.Col = 2: g1.Text = "målscoren"
g1.Row = 0: g1.Col = 3: g1.Text = "andet"

' indsæt titler:
g1.Row = 1: g1.Col = 0: g1.Text = "København"
g1.Row = 2: g1.Col = 0: g1.Text = "Randers"
g1.Row = 3: g1.Col = 0: g1.Text = "Århus"

' indsæt test - værdier
g1.Row = 1: g1.Col = 1: g1.Text = "1"
g1.Row = 1: g1.Col = 2: g1.Text = "2"
g1.Row = 1: g1.Col = 3: g1.Text = "3"

g1.Row = 2: g1.Col = 1: g1.Text = "4"
g1.Row = 2: g1.Col = 2: g1.Text = "5"
g1.Row = 2: g1.Col = 3: g1.Text = "6"

g1.Row = 3: g1.Col = 1: g1.Text = "7"
g1.Row = 3: g1.Col = 2: g1.Text = "8"
g1.Row = 3: g1.Col = 3: g1.Text = "9"

' vælg "+" som standard
cboPM.Text = cboPM.List(0)
End Sub


Private Sub g1_Click()
MsgBox g1.Row & ", " & g1.Col
End Sub


/theSurfer
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester