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

 
ForumForumDiskussionerDiskussionerVBAVBASkapa ett cycle sheet med slumpad ordningSkapa ett cycle sheet med slumpad ordning
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2019-02-07 15:35
 

 

Hej!
Jag har 12 rader med text, där varje rad är namnet på ett moment som ska utföras.
Av dessa 12 vill jag kunna välja t.ex. att Rad 1 ska användas 3ggr, rad 2 5ggr etc. D.v.s jag vill kunna ställa hur många gånger varje rad ska användas.
Just nu använder jag rad 1-12 och kolumn A-E
Antalet kan jag skriva i kolumn F t.ex.

När jag valt antalet på varje, så vill jag enkelt skapa en lista, som jag sedan kan printa (ett cycle sheet) som innehåller alla dessa rader (dessa 12 * antalet, i en slumpad ordning. Listan kommer då förhoppningsvis bli ca 100-120 rader lång beroende på mina val såklart.

Någon som kan hjälpa mig med hur man kan göra detta?

Nytt inlägg
 2019-02-11 10:47
 
Hej Fredrik

Hör har du kod som gör det du ska, utgår ifrån att du använder kolumn F för antal rader. Bara att lägga in den i en modul i vbe och koppla ihop med knapp . Möjligtvis behöver du ändra bladnamnen, de ska vara döpta till vad respektive blad heter.
Mvh
Christian

Sub writeXtimes()

Dim ReadFromSh As Worksheet: Set ReadFromSh = ThisWorkbook.Sheets("Blad1")
Dim lRow As Long: lRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim Rng As Range: Set Rng = ReadFromSh.Range("F1:F" & lRow)
Dim vnt As Variant: vnt = Rng
Dim PrintToSH As Worksheet: Set PrintToSH = ThisWorkbook.Sheets("Blad2")

PrintToSH.UsedRange.ClearContents
Dim i, k: k = 1
For i = 1 To UBound(vnt, 1)
PrintToSH.Range("A" & k & ":E" & (vnt(i, 1) + k)).Value = ReadFromSh.Range("A" & i & ":E" & i).Value
k = k + vnt(i, 1)
Next i

Dim newRng As Range: Set newRng = PrintToSH.Range("A1:F" & k)
Call RndRng(newRng, PrintToSH)

End Sub
Function RndRng(Rng As Range, ws As Worksheet)


Dim rngUpper As Long
Dim myRow As Long
rngUpper = Rng.Rows.Count

For myRow = 1 To rngUpper
ws.Cells(myRow, 6).Value = Int((rngUpper * 10 - 1 + 1) * Rnd + 1)
Next myRow

Rng.Sort Key1:=Range("F1"), Order1:=xlAscending, Header:=xlNo
Rng.Columns(6).ClearContents


End Function




Nytt inlägg
 2019-02-19 06:34
 

Hej Christian.

När jag klickar på knappen får jag 
"Run-time error '1004':

The sort reference is not valid. Make sure that it's within the data you want to sort,

and the first Sort By Box isn't the same or blank.

 

I debugen klagar den på:

Rng.Sort Key1:=Range("F1"), Order1:=xlAscending, Header:=xlNo

Nån ide?

Nytt inlägg
 2019-02-20 07:02
 
Hej hej

Ersätt :
Rng.Sort Key1:=Range("F1"), Order1:=xlAscending, Header:=xlNo

Med;
Rng.Sort Key1:=ws.Range("F1"), Order1:=xlAscending, Header:=xlNo

/c
Nytt inlägg
 2019-02-27 06:55
 

 Toppen! Nu gör den precis det jag vill, men två saker till har jag fundering på.

Om jag ställer  in antalet per rad, så gör den en extra av den sista. Så om jag har totalt 60st (5 av varje) så gör den 6 av den 12:e raden...

Om jag sedan skule vilja ha en rubrik på översta raden på sheet2, kan jag få den till att lägga datan på rad 2 och frammåt?

//F

Nytt inlägg
 2019-02-27 07:26
 
 Ändrad av Christian  på 2019-02-27 08:27:34
Hej hej

För att lägga till en tom rad på första raden:

Sheets(ws).rows(1).insert

För att ta bort sista raden kan du skriva såhär:

Dim LastRow as long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Sheets(ws).rows(lastrow).delete

Lägg in dessa längst ner i din kod. (presis före End Function)

CHristian

Nytt inlägg
 2019-03-04 13:16
 

Nu börjar det närma sig, men om jag sätter värde 0 på de rader jag inte vill ha med, så får jag ändå rader dock tomma. Hur skulle jag kunna göra där?

Nytt inlägg
 2019-03-04 14:46
 

Fast nu blev jag lite förbryllad.
Den fungerar som tänkt i en separat excel, men när jag kopierat in de tre bladen samt moduler, så funkar det kanon förutom att jag får en slumpad rad som är helt tom. Har ingen aning om var den kommer ifrån...

Men det fungerar att sätta 0, så det är inte problemet, som jag trodde ovan...
Kan inte se att det skiljer något i koderna etc.

Nytt inlägg
 2019-03-04 15:56
 

När jag tar bort de två feta raderna nedan, ser jag att det skapats en tom rad med ett värde i kolumn R, och jag har 1 rad mer än jag valt att den ska titta på.
Var i denna koden skapas den?


Sub writeXtimes()

 
Dim ReadFromSh As Worksheet: Set ReadFromSh = ThisWorkbook.Sheets("Journey SWE")
Dim lRow As Long: lRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim Rng As Range: Set Rng = ReadFromSh.Range("T1:T" & lRow) 'Hämtar datan i kolumn T
Dim vnt As Variant: vnt = Rng
Dim PrintToSH As Worksheet: Set PrintToSH = ThisWorkbook.Sheets("Cycle sheet")
 
PrintToSH.UsedRange.ClearContents
Dim i, k: k = 1
For i = 1 To UBound(vnt, 1)
PrintToSH.Range("A" & k & ":Q" & (vnt(i, 1) + k)).value = ReadFromSh.Range("A" & i & ":Q" & i).value
k = k + vnt(i, 1)
Next i
 
Dim newRng As Range: Set newRng = PrintToSH.Range("A1:T" & k) 'Hämtar datan i kolumn T
Call RndRng(newRng, PrintToSH)
 
End Sub
Function RndRng(Rng As Range, ws As Worksheet)
 
 
Dim rngUpper As Long
Dim myRow As Long
rngUpper = Rng.Rows.Count
 
For myRow = 1 To rngUpper
ws.Cells(myRow, 18).value = Int((rngUpper * 10 - 1 + 1) * Rnd + 1)
Next myRow
 
 
 
Rng.Sort Key1:=ws.Range("R1"), Order1:=xlAscending, Header:=xlNo
Rng.Columns(18).ClearContents
 
End Function
Nytt inlägg
 2019-03-04 16:07
 

 Det jag kan se är att den skapar med funktionen writeXtimes, 13 rader av min 12 (Om jag väljer att den ska göra en av varje) Den skapar 25 rader om jag väljer två av varje. Kollar jag så lägger den 1 extra av den text som jag har på rad 12 (av 12) så den kommer med en gång mer än jag vill... Var sker detta?

 

Sub writeXtimes()

 
Dim ReadFromSh As Worksheet: Set ReadFromSh = ThisWorkbook.Sheets("Journey SWE")
Dim lRow As Long: lRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim Rng As Range: Set Rng = ReadFromSh.Range("T1:T" & lRow) 'Hämtar datan i kolumn T
Dim vnt As Variant: vnt = Rng
Dim PrintToSH As Worksheet: Set PrintToSH = ThisWorkbook.Sheets("Cycle sheet")
 
PrintToSH.UsedRange.ClearContents
Dim i, k: k = 1
For i = 1 To UBound(vnt, 1)
PrintToSH.Range("A" & k & ":Q" & (vnt(i, 1) + k)).value = ReadFromSh.Range("A" & i & ":Q" & i).value
k = k + vnt(i, 1)
Next i
 
Dim newRng As Range: Set newRng = PrintToSH.Range("A1:T" & k) 'Hämtar datan i kolumn T
Call RndRng(newRng, PrintToSH)
 
End Sub
Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBASkapa ett cycle sheet med slumpad ordningSkapa ett cycle sheet med slumpad ordning

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