PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBALäsa in onumrerade raderLäsa in onumrerade rader
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2023-09-08 16:55
 

Hej,

Är det någon som kan hjälpa mig med en kod för att läsa valfria rader från "koden" nedan.

Jag har en "snurra" som ska läsa in data från "koden".

Första gången vill jag läsa in rad2, rad3 och rad7. nästa gång vill jag läsa in rad1 och rad6.

Sedan fortsätter det med olika variationer.

Jag är tacksam för svar.

//Folke 

Sheets("Rankning").Cells(10, 5).Value = Sheets("Ram").Range("E5")
Sheets("Rankning").Cells(12, 5).Value = Sheets("Ram").Range("E7")
Sheets("Rankning").Cells(14, 5).Value = Sheets("Ram").Range("E9")
Sheets("Rankning").Cells(16, 5).Value = Sheets("Ram").Range("E11")
Sheets("Rankning").Cells(18, 5).Value = Sheets("Ram").Range("E13")
Sheets("Rankning").Cells(20, 5).Value = Sheets("Ram").Range("E15")
Sheets("Rankning").Cells(22, 5).Value = Sheets("Ram").Range("E17")
Sheets("Rankning").Cells(24, 5).Value = Sheets("Ram").Range("E19")
Nytt inlägg
 2023-09-08 17:53
 

Hej Folke,

Lite oklart vad det är du vill ha hjälp med.

Du har postat VBA-kod som kopierar data mellan celler i två arbetsblad i ditt Exceark.

Vad menar du med "läsa valfria rader"..? Normalt sett kör man VBA-kod - inte läser den.

Vad betyder "läsa in data från koden"..? I vanliga fall finns både käll- och destinationsdata i en Excelfil, eller i en extern datakälla, inte i själva "koden".

Sen skriver du; "Sedan fortsätter det med olika variationer", vad betyder det..? Är det ett repetetivt mönster du vill följa, eller vill du ha någon form av inputfönster, eller textfil som styr "variationerna"..?

Tror du måste förtydliga det hela för att vi ska kunna hjälpa dig.

Nytt inlägg
 2023-09-08 18:46
 

 Hej,

Det är lite svårt att beskriva allt i ord, jag skulle behöva lite mer utrymme för att visa det i bilder.

Det vore bra om jag kunde bifoga några bilder.

Jag ska försöka att formulera till en mer begriplig text.

//Folke

 

Nytt inlägg
 2023-09-08 19:27
 
 Ändrad av Gondi  på 2023-09-08 18:28:13

Hej igen,

Det går alldeles utmärkt att infoga bilder här på forumet.

Starta Windows Skärmklippverktyget genom att skriva in "skärmklipp" i sökrutan i Windows.

Gör ett nytt skärmklipp med ALT+N med Exceldokumentet i förgrunden.

Kopiera skärmklippet med CTRL+C i Skärmklippverktyget.

Klistra in skärmklippet här på forumet med CTRL+V

Så här exempelvis;

Nytt inlägg
 2023-09-09 05:30
 

Hej igen Folke,

För att förtydliga vad för typ av information vi behöver för att kunna bistå med hjälp kommer här en liten översikt.

I stort sett all programmering är baserad på tre grundläggande "byggstenar".

  1. Läs in källdatan. Det kan vara från ett Excelark, textfil, Inputfönster, eller annan extern datakälla. (Input)
  2. Utför beräkningar, eller någon form av manipulation av datan. (Compute)
  3. Skriv ut datan. Resultatet skrivs ut till Excel, textfil, skärm, skrivare eller annan extern datakälla. (Output)

Således behöver du besvara dessa tre frågor.

  1. Var finns källdatan?
  2. Vilken typ av beräkning eller manipulation av datan vill du göra?
  3. Var vill du skriva ut resultatet?

"Svårare" än så är det inte... :-)

 

 

Nytt inlägg
 2023-09-09 08:16
 
 Ändrad av Haglund  på 2023-09-09 16:11:18

Hej Igen,

Jag ska försöka att beskriva vad jag behöver hjälp med lite bättre.

Jag har gjort ett litet travsystem, där grundsystemet kan se ut enl, nedan.

Jag delar sedan i systemet i ett antal mindre ”delsystem” (Antal delar)

I tabellen ”Antal hästar i varje delsystem” kan man se, som rubriken säger” antal hästar

I varje delsystem.

”Antal delar” anger hur många delar de olika loppen är uppdelade i.

 

Detta Ark kallas ”Ram”

Jag använder sedan följande kod för att ”flyttar över” de olika delarna från ark ”Ram” till ark ”Rakning”

For Lopp1 = 1 To Worksheets("Ram").Range("C23")

 For Lopp2 = 1 To Worksheets("Ram").Range("E23")

  For Lopp3 = 1 To Worksheets("Ram").Range("G23")

   For Lopp4 = 1 To Worksheets("Ram").Range("I23")

    For Lopp5 = 1 To Worksheets("Ram").Range("K23")

     For Lopp6 = 1 To Worksheets("Ram").Range("M23")

               Worksheets("Rankning").Range("C10:M24").ClearContents            

      Select Case Lopp1

               Case 1

             Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C5")

             Sheets("Rankning").Cells(12, 3).Value = Sheets("Ram").Range("C7")

             'Sheets("Rankning").Cells(14, 3).Value = Sheets("Ram").Range("C9")

              Case 2

             Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C9")

             Sheets("Rankning").Cells(12, 3).Value = Sheets("Ram").Range("C11")

             'Sheets("Rankning").Cells(14, 3).Value = Sheets("Ram").Range("C15")

              'Case 3

             'Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C13")

             'Sheets("Rankning").Cells(12, 3).Value = Sheets("Ram").Range("C15")

               'Case 4

             'Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C15")

      End Select     

      Select Case Lopp2

               Case 1

             Sheets("Rankning").Cells(10, 5).Value = Sheets("Ram").Range("E5")

             Sheets("Rankning").Cells(12, 5).Value = Sheets("Ram").Range("E7")

            'Sheets("Rankning").Cells(14, 5).Value = Sheets("Ram").Range("E9")

               Case 2

            Sheets("Rankning").Cells(10, 5).Value = Sheets("Ram").Range("E9")

             Sheets("Rankning").Cells(12, 5).Value = Sheets("Ram").Range("E11")

             'Sheets("Rankning").Cells(14, 5).Value = Sheets("Ram").Range("E15")

               'Case 3

             'Sheets("Rankning").Cells(10, 5).Value = Sheets("Ram").Range("E13")

             'Sheets("Rankning").Cells(12, 5).Value = Sheets("Ram").Range("E15")            

      End Select     

      Select Case Lopp3

               Case 1

             Sheets("Rankning").Cells(10, 7).Value = Sheets("Ram").Range("G5")

             'Sheets("Rankning").Cells(12, 7).Value = Sheets("Ram").Range("G7")

            'Sheets("Rankning").Cells(14, 7).Value = Sheets("Ram").Range("G9")

               'Case 2

             'Sheets("Rankning").Cells(10, 7).Value = Sheets("Ram").Range("G7")

             'Sheets("Rankning").Cells(12, 7).Value = Sheets("Ram").Range("G11")

             'Sheets("Rankning").Cells(14, 7).Value = Sheets("Ram").Range("G15")

             'Case 3

             'Sheets("Rankning").Cells(10, 7).Value = Sheets("Ram").Range("G9")

            'Sheets("Rankning").Cells(12, 7).Value = Sheets("Ram").Range("G15")           

      End Select     

             Select Case Lopp4

               Case 1

             Sheets("Rankning").Cells(10, 9).Value = Sheets("Ram").Range("I5")

             Sheets("Rankning").Cells(12, 9).Value = Sheets("Ram").Range("I7")

             'Sheets("Rankning").Cells(14, 9).Value = Sheets("Ram").Range("I9")

               'Case 2

             'Sheets("Rankning").Cells(10, 9).Value = Sheets("Ram").Range("I7")

             'Sheets("Rankning").Cells(12, 9).Value = Sheets("Ram").Range("I11")

             'Sheets("Rankning").Cells(14, 9).Value = Sheets("Ram").Range("I13")

              'Case 3

             'Sheets("Rankning").Cells(10, 9).Value = Sheets("Ram").Range("I13")

             'Sheets("Rankning").Cells(12, 9).Value = Sheets("Ram").Range("I15")             

       End Select      

              Select Case Lopp5

               Case 1

             Sheets("Rankning").Cells(10, 11).Value = Sheets("Ram").Range("K5")

             Sheets("Rankning").Cells(12, 11).Value = Sheets("Ram").Range("K7")

             'Sheets("Rankning").Cells(14, 11).Value = Sheets("Ram").Range("K9")

               Case 2

             Sheets("Rankning").Cells(10, 11).Value = Sheets("Ram").Range("K11")

             Sheets("Rankning").Cells(12, 11).Value = Sheets("Ram").Range("K13")

             'Sheets("Rankning").Cells(14, 11).Value = Sheets("Ram").Range("K15")

              Case 3

              Sheets("Rankning").Cells(10, 11).Value = Sheets("Ram").Range("K9")

             'Sheets("Rankning").Cells(12, 11).Value = Sheets("Ram").Range("K15")           

      End Select

           Select Case Lopp6

               Case 1

             Sheets("Rankning").Cells(10, 13).Value = Sheets("Ram").Range("M5")

             Sheets("Rankning").Cells(12, 13).Value = Sheets("Ram").Range("M7")

             'Sheets("Rankning").Cells(14, 13).Value = Sheets("Ram").Range("M9")

               Case 2

             Sheets("Rankning").Cells(10, 13).Value = Sheets("Ram").Range("M9")

             Sheets("Rankning").Cells(12, 13).Value = Sheets("Ram").Range("M11")

             'Sheets("Rankning").Cells(14, 13).Value = Sheets("Ram").Range("M15")

               'Case 3

             'Sheets("Rankning").Cells(10, 13).Value = Sheets("Ram").Range("M13")

             'Sheets("Rankning").Cells(12, 13).Value = Sheets("Ram").Range("M15")

      End Select

             Här ligger andra delar av programmet.

                 

                Next Lopp6

               Next Lopp5

              Next Lopp4

             Next Lopp3

            Next Lopp2

           Next Lopp1

Ark ”Rankning” är själva underlaget för reducering av travsystemet.

 

Bilden nedan visar hästar från det sista delsystemet.

Detta ark kallas Rankning

Programmet fungerar bra, problemet uppstår när jag vill ändra antal hästar i de olika delsystemen, då måste jag gå in i koden och ändra.

Om jag t.ex tar bort häst nr. 8 i lopp 1, måste jag lägga in en apostrof enl. nedan. (gul markerat)

Om man vill lägga til en häst tar man bort apostrofen och ser till att Cellerna blir rätt enl nedan. (Röd markerat)

      Select Case Lopp1

               Case 1

             Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C5")

             Sheets("Rankning").Cells(12, 3).Value = Sheets("Ram").Range("C7")

             'Sheets("Rankning").Cells(14, 3).Value = Sheets("Ram").Range("C9")

              Case 2

           Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C9") 

           Sheets("Rankning").Cells(12, 3).Value = Sheets("Ram").Range("C11")

             'Sheets("Rankning").Cells(14, 3).Value = Sheets("Ram").Range("C15")

              'Case 3

             'Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C13")

             'Sheets("Rankning").Cells(12, 3).Value = Sheets("Ram").Range("C15")

               'Case 4

             'Sheets("Rankning").Cells(10, 3).Value = Sheets("Ram").Range("C15") 

      End Select

 

För att slippa ändra i koden, tänkte jag att man kanske kan använda tabellen ”Antal hästar i varje delsyst” 

Jag skulle vilja styra programmet med de variabler som finns i tabellen.

Jag hoppas att detta förklarar vad jag menar lite bättre.

Mvh//Folke

Nytt inlägg
 2023-09-11 15:22
 
 Ändrad av Gondi  på 2023-09-11 14:31:48

Hej igen Folke,

För att göra programmet dynamiskt måste du arbeta med variabler (a, b, c, x, y, z, etc.). Det går inte att göra som du har gjort att hårdkoda - Sheets("Rankning").Cells(10,3) - varje enskild cell du vill kopiera från ett arbetsblad till ett annat, då blir inte koden dynamisk.

Skapa variabler för;

  • antal lopp
  • antal hästar i varje lopp
  • totalt antal rader
  • antal delsystem
  • antal hästar i varje delsystem
  • en tvådimensionell matrisvarabel (array) för vilka hästar som ska kopieras över från "ramen" till varje delsystem (reduceringen)

Sen skapar du exempelvis For-Next loopar som går igenom hästarna delsystem-för-delsystem och kopierar över "rätt" hästar enligt matrisvariablen.

Det finns tyvärr ingen enkel "quick-fix" att hjälpa dig med det, utan all kod måste skrivas om så formatet Sheets("Rankning").Cells(x,y).value används med ovan definerade variabler. Den kompletta koden med For-Next loopar som gör jobbet kommer dessutom bara bli en bråkdel så lång.

 

Nytt inlägg
 2023-09-11 16:16
 

Hej  Gondi,

Jag förstår hur du menar, jag får jobba vidare och se om jag fixar det.

Men jag har känslan att jag har nästan allt på plats, utom då att jag måste göra Select Case till For....Next,

och att göra cellerna dynamiska.

Tack för hjälpen.

//Folke

 

Nytt inlägg
 2023-09-12 02:46
 
 Ändrad av Gondi  på 2023-09-12 01:50:15

Hej igen Folke,

Du kan ju återanvända delar av koden jag skrev åt dig i den förra posten (www.excelforum.se/Forumetsstartsida/t...) när datan skulle läsas in från en CSV-fil och skrivas in i Excel.

        'Write array values to ActiveSheet

       

        writeCol = 3 'start writing in column C

       

        For i = 1 To UBound(arr, 1)

            writeRow = 10 'start writing in row 10

                For j = 2 To UBound(arr, 2)

                    If Len(arr(i, j)) > 0 Then

                        ActiveSheet.Cells(writeRow, writeCol) = arr(i, j)

                    End If

                    writeRow = writeRow + 2

                Next

            writeCol = writeCol + 2

        Next

 

Principen blir ungefär densamma fast med flera For-Next loopar med inbäddade If-Then-End if klausuler

Jag låter dig försöka på egen hand så får du återkomma igen om eller när du "stöter på patrull".

Nytt inlägg
 2023-09-12 14:46
 

 Hej Gondi,

Låter Ok!

Tack så länge.

//Folke

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBALäsa in onumrerade raderLäsa in onumrerade rader

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter