Avatar billede rickie Juniormester
07. maj 2003 - 09:23 Der er 19 kommentarer og
1 løsning

Celleopdeling

Luk annonce  Hej alle Eksperter!

Jeg har et spørgsmål vedrørende opdelning af en celle
Celle 1
Jan Larsen

Opdeles således

Celle1  Celle2
jan    Larsen

Jeg har følgende kode og den virker fint nok, men jeg vil gerne have at resultatet flyttes over til et nyt ark (Sheet2) Beregningen skal fortsat laves i Sheet1.

Jeg får også fejlmeddelelse hvis fex. .,-*-/ ingår i beregningen.
Hvordan undgår jeg dette? :-)

-----------------------------

Option Explicit
Option Base 1
Sub Separera_Namn()

Dim vaData As Variant, vaFNamn As Variant
Dim i As Integer, Start As Range
Set Start = Range("c3")

vaData = Range(Start.Address, Cells(65536, Start.Column).End(xlUp).Address)
ReDim vaFNamn(UBound(vaData), 2)
For i = 1 To UBound(vaData)
    vaFNamn(i, 1) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1))
    vaFNamn(i, 2) = Right(vaData(i, 1), Len(vaData(i, 1)) - Len(vaFNamn(i, 1)))
Next i
Start.Resize(i - 1, 2) = vaFNamn
End Sub
Avatar billede fobian Nybegynder
07. maj 2003 - 10:47 #1
Du kan skrive dine resultater til sheet2 ved at lave et gennemløb af dit array og anvende denne kode til at skrive til sheet2.

    Application.Worksheets("Sheet2").Cells(i, 1) = vaFNamn(i, 1)
    Application.Worksheets("Sheet2").Cells(i, 2) = vaFNamn(i, 2)


Du kan også gøre det samme med følgende kode:

Sub Makro1()
    Sheets("Ark1").Select
    Columns("C:C").Select
    Selection.Copy
    Sheets("Ark2").Select
    Columns("c:c").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.TextToColumns Destination:=Range("c1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1))
    Range("A1").Select
End Sub
Avatar billede rickie Juniormester
07. maj 2003 - 10:57 #2
Den er fin nok....sagen er bare den, at den nu deler Johan L Larsen op i 3 celler. Det må den ikke.
Johan i celle 1 och resterende datan i celle 2
Avatar billede popsy Novice
07. maj 2003 - 11:13 #3
Avatar billede fobian Nybegynder
07. maj 2003 - 11:19 #4
Det kan jeg godt se :-)

Hvad så med den første kode med gennemløb af array - har du prøvet det?
Avatar billede rickie Juniormester
07. maj 2003 - 11:39 #5
Desværre fobian. Jeg har ikke prøvet det og jeg er desværre ikke så dygtig.
Jeg fik lavet det fra starten af en kollega som ikke kan få fat på mere, så om du kan hjælpe mig med koden er det bare perfekt.

Popsy. Jeg har lukket spørgsmålet. Jeg fik oprettet den under en forkert kategori men fik vist glemt at lukke den. Tak for remindern :-)

Ha en god dag!
Avatar billede popsy Novice
07. maj 2003 - 11:43 #6
Tak i lige måde, en god dag er altid rar at ha'! :)
Avatar billede fobian Nybegynder
07. maj 2003 - 12:24 #7
Jeg har tilpasset din kode, så det nu burde virke med at splitte det op i to kolonner i Sheet2. Prøv at kopiere koden over i dit modul.

Option Explicit
Option Base 1
Sub Separera_Namn()

Dim vaData As Variant, vaFNamn As Variant
Dim i As Integer, Start As Range
Set Start = Range("c3")

vaData = Range(Start.Address, Cells(65536, Start.Column).End(xlUp).Address)
ReDim vaFNamn(UBound(vaData), 2)
For i = 1 To UBound(vaData)
    Application.Worksheets("Sheet2").Cells(i, 1) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1))
    Application.Worksheets("Sheet2").Cells(i, 2)  = Right(vaData(i, 1), Len(vaData(i, 1)) - Len(vaFNamn(i, 1)))
Next i
End Sub
Avatar billede rickie Juniormester
07. maj 2003 - 13:08 #8
Tusind tak! Har du også mulighed for, at se på hvorfor jeg får følgende meddelelse når der er .,-/*- i navnet.
Hvis et navn/firma står som rickie.com så kommer følgende meddelelse.

Application.Worksheets("Blad2").Cells(i, 1) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1))
Avatar billede fobian Nybegynder
07. maj 2003 - 15:10 #9
Jeg har lige ændret lidt i de to linier, som skriver til Blad2. Prøv at kopiere dem ind i stedet for de gamle. Jeg får ikke en fejlkode, hvis jeg prøver med navne med ,.-
Hvis det bliver ved, må du lige sige til :-)

  Application.Worksheets("Blad2").Cells(i, 1) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1) - 1)
    Application.Worksheets("Blad2").Cells(i, 2) = Right(vaData(i, 1), Len(vaData(i, 1)) - Len(Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1))))
Avatar billede rickie Juniormester
07. maj 2003 - 15:20 #10
Jeg får denne fejlmarkering:
Det virker så snart der ikke er ovenstående tegn med i navnet....underligt! :-)

Application.Worksheets("Blad2").Cells(i, 1) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1) - 1)
Avatar billede fobian Nybegynder
07. maj 2003 - 15:44 #11
Kan jeg ikke lige få dig til at kopiere din kode ind i en kommentar. Så kan jeg prøve at kopiere den ind i mit eget modul og se om jeg også for samme fejl.
Avatar billede rickie Juniormester
07. maj 2003 - 15:47 #12
Her er så koden...
---------------
Option Explicit
Option Base 1
Sub Separera_Namn()

Dim vaData As Variant, vaFNamn As Variant
Dim i As Integer, Start As Range
Set Start = Range("c3")

vaData = Range(Start.Address, Cells(65536, Start.Column).End(xlUp).Address)
ReDim vaFNamn(UBound(vaData), 2)
For i = 1 To UBound(vaData)
    Application.Worksheets("Blad2").Cells(i, 1) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1) - 1)
    Application.Worksheets("Blad2").Cells(i, 2) = Right(vaData(i, 1), Len(vaData(i, 1)) - Len(Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1))))
Next i
End Sub
------------
Såfremt du ønsker, at se mit excel dokument så kan jeg også sende en bid af den til dig :-)
Avatar billede fobian Nybegynder
07. maj 2003 - 15:55 #13
Jeg tester lige - så vender jeg tilbage i morgen :-)
Avatar billede rickie Juniormester
07. maj 2003 - 15:57 #14
Takker for det og ha en god aften! :-)
Avatar billede fobian Nybegynder
07. maj 2003 - 21:47 #15
Hej rickie

Så nu er den fixet :-)
Jeg har lavet en if sætning der ser om der er mellemrum i strengen og der splittes kun op, hvis der er mellemrum i strengen. Dvs. både fornavn og efternavn. Grunden til at du fik fejl var ikke at du brugte tegnene, men at der ikke var mellemrum i strengen.
Lad mig høre om det du´r :-)

Option Explicit
Option Base 1
Sub Separera_Namn()

Dim vaData As Variant, vaFNamn As Variant
Dim i As Integer, Start As Range
Set Start = Range("c3")

vaData = Range(Start.Address, Cells(65536, Start.Column).End(xlUp).Address)
ReDim vaFNamn(UBound(vaData), 2)
For i = 1 To UBound(vaData)
    If InStr(vaData(i, 1), " ") <> 0 Then
        Application.Worksheets("Blad2").Cells(i, 1) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1) - 1)
        Application.Worksheets("Blad2").Cells(i, 2) = Right(vaData(i, 1), Len(vaData(i, 1)) - Len(Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1))))
    Else
        Application.Worksheets("Blad2").Cells(i, 1) = vaData(i, 1)
    End If
Next i
End Sub
Avatar billede rickie Juniormester
07. maj 2003 - 23:12 #16
Det virker precis som det skal.....jubiiii! :-)

Mange tusind tak for hjälpen!
Avatar billede rickie Juniormester
07. maj 2003 - 23:15 #17
Hvordan angiver jeg en speciell mål celle.
Tex start er jo Blad1 "C3" og målet skal så fex väre Blad2 "F3"

Håber ikke at du er trät af mig :-)
Avatar billede fobian Nybegynder
07. maj 2003 - 23:25 #18
Nej da - bare jeg får nogle points ;-)

Hvis du kopierer denne kode ind i stedet for de tilsvarende linier i din kode, så bliver resultatet placeret fra c3 og nedefter samt d3 og nedefter.
Det er koden Cells(i+2, 3) der angiver hvor i arket værdierne skal placeres.
i+1 er rækken og 3 er kolonnen. Det vil sige at den første observation har række 1+2 = 3 og kolonne 3 = c. Når for next løkken gennemløbes stiger værdien for i og derved bliver rækkenummeret højere for hvert gennemløb.

Application.Worksheets("Blad2").Cells(i+2, 3) = Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1) - 1)
        Application.Worksheets("Blad2").Cells(i+2, 4) = Right(vaData(i, 1), Len(vaData(i, 1)) - Len(Left(vaData(i, 1), Application.Find(" ", vaData(i, 1), 1))))
Avatar billede rickie Juniormester
07. maj 2003 - 23:47 #19
Det er helt enkelt for sejt. Jeg gad godt nok väre ligeså god haj som du.
Endelig skulle jeg bare sende hele dokumentet til dig og så måtte du "charge me by the hour" L.O.L!

Du fortjener flere poäng end hvad jeg har angivet.

Tusind tak :-)
Avatar billede fobian Nybegynder
08. maj 2003 - 00:00 #20
Tak for de flotte ord - skulle det være en anden gang :-)
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