Vapaa kuvaus

Isaan Rules WFF CCC If you walked away smiling-then for you the price was right Keep Exceling Suosikkibändit/artistit: Queen, Rammstein, genesis, Bruce Bringsteen, Kino, Mandref Mann Earth band Who Lempikirjat: ohjelmointi... Suosikkipalstat Suomi24 Keskusteluissa: EXCEL, Kivitalot, EPS En pidä: pakkanen ja loskakelit Ruoka & juoma: loimulohi ja valkkari Linkit: http://www.kundepuu.com, Khorat Koulutus: --- Ammatti: Tiede/teknologia Työskentelen: freelancer Ase tai siviilipalvelus: yliluutnantti Siviilisääty: Varattu Lapset: --- Hakusanat: Thaimaa, korat, Excel, VBA, ACAD, CNC, Polyurea, EPS, MgO elementti

Aloituksia

7

Kommenttia

1374

  • Uusimmat aloitukset
  • Suosituimmat aloitukset
  • Uusimmat kommentit
  1. lähetä mulle mallitiesoto siitä missä se bugi esiintyy
    [email protected]

    muutokset

    Sub Teetaulukko()
    Dim vika As Long
    Dim solu As Range
    Dim i As Long
    Dim j As Long
    Dim viikko As Long
    With Worksheets("Koonti")
    .Activate
    .Cells = ""
    .Range("B1") = "viikko:"
    .Range("B2") = "klo"
    .Range("C1").Formula = "1"
    LisääSarjat Range("C1"), 1, 52
    LisääSarjat2 Range("A3")
    End With
    Worksheets("Uusi").Activate
    vika = Range("A65536").End(xlUp).Row
    For Each solu In Range("A1:A" & vika)
    viikko = ViikkoISO(CDate(solu))
    If solu.Offset(0, 1) = 1 Then
    solu.Offset(0, 3) = Format(solu + solu.Offset(0, 2), "yyyy-mm-dd hh:mm:ss")
    solu.Offset(0, 4) = Format(solu, "hh")
    solu.Offset(0, 5) = Format(solu + solu.Offset(0, 2), "hh")
    solu.Offset(0, 6) = Minute(solu)
    solu.Offset(0, 7) = Minute(solu.Offset(0, 3))
    If solu.Offset(0, 5) < solu.Offset(0, 4) Then solu.Offset(0, 5) = solu.Offset(0, 5) + 24
    'siirretään
    'sama tunti
    If solu.Offset(0, 4) = solu.Offset(0, 5) Then
    'näyttää tunnit 1/100 tarkkuudella
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2).NumberFormat = "0.00"
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) = (Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) + CDbl(Minute(solu.Offset(0, 2)))) / 60
    'tunnin ero
    Else
    If solu.Offset(0, 5) - solu.Offset(0, 4) = 1 Then
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2).NumberFormat = "0.00"
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) = (Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) + CDbl(60 - Minute(solu))) / 60

    Worksheets("Koonti").Range(UCase(Format(solu.Offset(0, 3), "dddd"))).Cells(Format(solu.Offset(0, 3), "hh") + 1, viikko + 2).NumberFormat = "0.00"
    Worksheets("Koonti").Range(UCase(Format(solu.Offset(0, 3), "dddd"))).Cells(Format(solu.Offset(0, 3), "hh") + 1, viikko + 2) = (Worksheets("Koonti").Range(UCase(Format(solu.Offset(0, 3), "dddd"))).Cells(Format(solu.Offset(0, 3), "hh") + 1, viikko + 2) + CDbl(Minute(solu.Offset(0, 3)))) / 60
    'usean tunnin ero
    Else
    For i = solu.Offset(0, 4) To solu.Offset(0, 5)
    If i = solu.Offset(0, 4) Then
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2).NumberFormat = "0.00"
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) = (Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) + CDbl(60 - Minute(solu))) / 60
    Else
    If i = solu.Offset(0, 5) Then
    Worksheets("Koonti").Range(UCase(Format(solu.Offset(1, 0), "dddd"))).Cells(Format(solu.Offset(1, 0), "hh") + 1, viikko + 2).NumberFormat = "0.00"
    Worksheets("Koonti").Range(UCase(Format(solu.Offset(1, 0), "dddd"))).Cells(Format(solu.Offset(1, 0), "hh") + 1, viikko + 2) = (Worksheets("Koonti").Range(UCase(Format(solu.Offset(1, 0), "dddd"))).Cells(Format(solu.Offset(1, 0), "hh") + 1, viikko + 2) + Minute(solu.Offset(1, 0))) / 60
    ' vrk vaihtuu
    Else
    If i > 23 Then
    j = i - 24
    Worksheets("Koonti").Range(UCase(Format(solu.Offset(1, 0), "dddd"))).Cells(j + 1, viikko + 2) = 1
    Else
    j = i
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(j + 1, viikko + 2) = 1
    End If

    End If
    End If
    Next
    End If
    End If
    End If
    Next
    Worksheets("Koonti").Cells.EntireColumn.AutoFit
    Worksheets("Koonti").Activate
    End Sub

    Sub LisääSarjat2(solu As Range)
    Dim i As Long
    With Worksheets("Koonti")
    solu.Select
    For i = 1 To 7
    ActiveCell = UCase(WeekdayName(i))
    ActiveCell.Offset(0, 1).Formula = "0"
    ActiveCell.Offset(0, 1).AutoFill Destination:=Range(ActiveCell.Offset(0, 1).Address & ":" & ActiveCell.Offset(23, 1).Address), Type:=xlFillSeries
    ActiveWorkbook.Names.Add Name:=ActiveCell, RefersTo:=Range(ActiveCell.Address & ":" & ActiveCell.Offset(23, 54).Address)
    Range(ActiveCell) = 0
    ActiveCell.Offset(26, 0).Select
    Next
    End With
    End Sub
  2. laskee nyt minuutin tarkkuudella läsnäolot - kiireiltäni en ehtinyt testaamaan paljoakaan, mutta näyttäis menevän oikein

    ei saanut lähetetttyä kaikkea koodia(sisältö liian pikä...), mutta ne muut koodinpätkät ei oo muuttunut

    Option Explicit
    Sub Keskiarvo()
    Dim Originaali As Range
    Dim vika As Long
    Dim i As Long
    Dim lkm As Long
    Dim solu As Range
    Dim alue As Range
    Dim Löydetty As Range

    On Error Resume Next
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    Set Originaali = Columns("A:B")
    Worksheets("Uusi").Delete
    On Error GoTo 0
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Uusi"
    Originaali.Copy Range("A1")
    Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    'haetaan läsnäoloajat C sarakkeeseen
    Columns("C:C").NumberFormat = "[hh]:mm:ss"

    vika = Range("B65536").End(xlUp).Row
    If Range("B1") = 0 Then
    For i = 2 To vika Step 2
    Range("B" & i).Offset(0, 1) = Range("A" & i + 1) - Range("A" & i)
    Next
    Else
    For i = 1 To vika Step 2
    Range("B" & i).Offset(0, 1) = Range("A" & i + 1) - Range("A" & i)
    Next
    End If
    'lisätään ajat taulukkoon
    Teetaulukko
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub
    Sub Teetaulukko()
    Dim vika As Long
    Dim solu As Range
    Dim i As Long
    Dim j As Long
    Dim viikko As Long
    With Worksheets("Koonti")
    .Activate
    .Cells = ""
    .Range("B1") = "viikko:"
    .Range("B2") = "klo"
    .Range("C1").Formula = "1"
    LisääSarjat Range("C1"), 1, 52
    LisääSarjat2 Range("A3")
    End With
    Worksheets("Uusi").Activate
    vika = Range("A65536").End(xlUp).Row
    For Each solu In Range("A1:A" & vika)
    viikko = ViikkoISO(CDate(solu))
    If solu.Offset(0, 1) = 1 Then
    solu.Offset(0, 3) = Format(solu + solu.Offset(0, 2), "yyyy-mm-dd hh:mm:ss")
    solu.Offset(0, 4) = Format(solu, "hh")
    solu.Offset(0, 5) = Format(solu + solu.Offset(0, 2), "hh")
    solu.Offset(0, 6) = Minute(solu)
    solu.Offset(0, 7) = Minute(solu.Offset(0, 3))
    If solu.Offset(0, 5) < solu.Offset(0, 4) Then solu.Offset(0, 5) = solu.Offset(0, 5) + 24
    'siirretään
    'sama tunti
    If solu.Offset(0, 4) = solu.Offset(0, 5) Then
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2).NumberFormat = "General"
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) = Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) + CDbl(Minute(solu.Offset(0, 2)))
    'tunnin ero
    Else
    If solu.Offset(0, 5) - solu.Offset(0, 4) = 1 Then
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) = Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) + CDbl(60 - Minute(solu))
    Worksheets("Koonti").Range(UCase(Format(solu.Offset(0, 3), "dddd"))).Cells(Format(solu.Offset(0, 3), "hh") + 1, viikko + 2) = Worksheets("Koonti").Range(UCase(Format(solu.Offset(0, 3), "dddd"))).Cells(Format(solu.Offset(0, 3), "hh") + 1, viikko + 2) + CDbl(Minute(solu.Offset(0, 3)))
    'usean tunnin ero
    Else
    For i = solu.Offset(0, 4) To solu.Offset(0, 5)
    If i = solu.Offset(0, 4) Then
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) = Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(Format(solu, "hh") + 1, viikko + 2) + CDbl(60 - Minute(solu))
    Else
    If i = solu.Offset(0, 5) Then
    Worksheets("Koonti").Range(UCase(Format(solu.Offset(1, 0), "dddd"))).Cells(Format(solu.Offset(1, 0), "hh") + 1, viikko + 2) = Worksheets("Koonti").Range(UCase(Format(solu.Offset(1, 0), "dddd"))).Cells(Format(solu.Offset(1, 0), "hh") + 1, viikko + 2) + Minute(solu.Offset(1, 0))
    ' vrk vaihtuu
    Else
    If i > 23 Then
    j = i - 24
    Worksheets("Koonti").Range(UCase(Format(solu.Offset(1, 0), "dddd"))).Cells(j + 1, viikko + 2) = 60
    Else
    j = i
    Worksheets("Koonti").Range(UCase(Format(solu, "dddd"))).Cells(j + 1, viikko + 2) = 60
    End If

    End If
    End If
    Next
    End If
    End If
    End If
    Next
    Worksheets("Koonti").Cells.NumberFormat = "General"
    Worksheets("Koonti").Cells.EntireColumn.AutoFit
    Worksheets("Koonti").Activate
    End Sub






    Keep EXCELing
    @Kunde
  3. esim. A sarakkeessa maat ja combobox1 ListFillRangeksi esim A1:A10

    B -K sarakkeissa sitten kunkin maan omat postinumerot omissa sarakkeissaan allekkain
    Nimeä kunkin maan postinumeroalue maalaamalla numerot ja kirjoita maan nimi nimiruutuun ja ENTER

    VB- työkaluvalikosta lisää kaksi comboboxia ...
    kopioi koodi taulukon moduuliin ja muuta combonimet sopiviksi

    Option Explicit
    Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex > -1 Then
    With ComboBox2
    .ListFillRange = ComboBox1
    .ListIndex = 0
    End With
    End If
    End Sub

    Keep EXCELing
    @Kunde
  4. joku ristiriita mallitiedostossa tai sitten en ymmärrä juttua. Nyt siis pyöristää tunnit ylöspäin 30 min väleille ja jos muutos puolikkaalla tunnilla silloin 0,5 muutoin voimassa oleva 0 tai 1
    nyt mallissasi on kuitenkin loppupäivällä pelkkää ykköstä vaikka muutoksia tapahtuu ja vieläpä puolikkaalle tunnille?
    vaatii parempia ohjeita
    tossa nyt koodin pätkä mikä muuttaa ajat ja poistaa alle 15 min ajat

    hipsujen paikkoja vaihtamalla voit kokeilla aikojen pyöristyksiä alas tai ylöspäin tai lähimpään 30 min...

    nythän siinä pyöristyksen jälkeen voi olla sekä 0 tai 1 samalla ajalla ja mitäs sitten tapahtuu???

    originaalikoodihan laskee keskiarvojatunneille, joten tulos on tietenkin väärä

    Sub Keskiarvo()
    Dim Originaali As Range
    Dim vika As Long
    Dim i As Long
    Dim lkm As Long
    Dim solu As Range
    Dim alue As Range
    On Error Resume Next

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    Set Originaali = Columns("A:B")
    Worksheets("Uusi").Delete
    On Error GoTo 0
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Uusi"
    Originaali.Copy Range("A1")
    Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Columns("C:C").NumberFormat = "[hh]:mm:ss"
    vika = Range("B65536").End(xlUp).Row
    If Range("B1") = 0 Then
    For i = 2 To vika Step 2
    Range("B" & i).Offset(0, 1) = Range("A" & i + 1) - Range("A" & i)
    Next
    Else
    For i = 1 To vika Step 2
    Range("B" & i).Offset(0, 1) = Range("A" & i + 1) - Range("A" & i)
    Next
    End If
    Columns("A:C").Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range("C1").Select
    '1/96 =15 min (tunti 1/24 vrk ja 1/4 osa siitä)
    Do Until ActiveCell > 1 / 96
    ActiveCell.Offset(1, 0).Select
    Loop
    Range("A1:A" & ActiveCell.Row - 1).EntireRow.Delete
    Columns("A:C").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    vika = Range("A65536").End(xlUp).Row
    For Each solu In Range("A1:A" & vika)
    'vba funktio pyöristää lähinpään alas tai ylöspäin
    'solu = Mround(solu, 1 / 48)
    'excelin oma pyöristää ylöspäin
    solu = Application.WorksheetFunction.Ceiling(solu, 1 / 48)
    'excelin oma pyöristää alaspäin
    'solu = Application.WorksheetFunction.Floor(solu, 1 / 48)
    Next

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub