Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Smartaste VBA-koden?

Postades av 2011-06-23 13:56:45 - Terry Ekelöf, i forum visual basic - allmänt, Tråden har 4 Kommentarer och lästs av 4949 personer

Excelfunderingar.
Jag har i kolumn A ett antal rader som alla börjar med fyra siffror (exepelvis "1234 Kokplattor") i kolumn B lika många rader som alla börjar med fem siffror (exempelvis "54321 Norrland"). I kolumn C har jag värden.

Jag läser in ett tal i en variabel (söknr) som alltid är något av de fyrsiffriga första i kolumn A (dvs 1234 i det här exemplet. Jag vill sedan loopa igenom alla rader och presentera följande resultat på ett annat kalkylblad i arket:

Summan av värdet (i C) för alla som uppfyller de fyra första i kolumn A (left,4) OCH alla som börjar på 5 i kolumn B. Denna summa ska skrivas ut i det andra bladet. Vidare vill jag att excel ska summera värdet (i C) för alla som uppfyller de fyra första i kolumn A (left,4) OCH alla som börjar på 54 i kolumn B. Och sedan summera värdet (i C) för alla som uppfyller de fyra första i kolumn A (left,4) OCH alla som börjar på 543 i kolumn B.

Alltså vill jag summera alla som börjar på 5 i en variabel som ska skrivas ut i det andra bladet, alla som börjar på de två första (54 här), alla som börjar på 543, alla som börjar på 5432 och också de som börjar på 54321. Och bara de rader som uppfyller kriteriet att de fyra första i A är = min inlästa variabel.

Är jag begriplig?

Resultatet ska alltså på det andra bladet bli:
5 = summan av C för alla som har 5 som första siffra i B i första bladet
54 = summan av C för alla som har 54 som första siffra i B första bladet.
543 = osv
5432 = ...
54321 = ...

Vilka dessa (5,54,543,5432,54321) är finns definerat i en lista. Hur löser man det på enklast sätt. Jag inbillar mig att det finns något enklare sätt än att definiera alla dessa variabler (5,54,543,5432,54321 osv) manuellt, läsa in hela cellen från A och låta if A-cellen = söknr and B-cellen left(1) = 5 then värde = värde + C-cellen.

Det blir liksom en herrans massa kod att skriva. Finns det något fiffigare sätt?


Svara

Sv: Smartaste VBA-koden?

Postades av 2011-06-27 01:59:39 - Thommy Lantz

Vet inte om du tycker detta är en herrans massa kod
Vet inte heller om jag fattat dig rätt, men här är ett förslag

Sub Summera()
Dim inx As Long, inx2 As Long
Dim WordToSearch As String
Dim Lastrow As Long
Dim Firstrow As Long
Dim tmpVal As Long
Dim Curr1 As String
Dim Curr2 As String
Dim CurrValue As Long
Dim AntalTecken As Long
Dim CurrVillkor As String

' Antar att listan börjar på rad två
Firstrow = 2
' Hämtar sista rad i listan
Lastrow = Sheets("Blad1").Range("A65000").End(xlUp).Row

' Hämtar vad som skall  eftersökas i kolumn A på Blad1
WordToSearch = Sheets("Blad2").Range("WordToSearch").Value

' En loop för varje villkor i en definierad lista på Blad2
For inx = 1 To Sheets("Blad2").Range("ListaVillkor").Cells.Count
       tmpVal = 0
       AntalTecken = Len(Sheets("Blad2").Range("ListaVillkor").Cells(inx).Value)
       CurrVillkor = Sheets("Blad2").Range("ListaVillkor").Cells(inx).Value
    ' innre loop söker igenom alla rader och summera alla som uppfyller villkoret
    For inx2 = Firstrow To Lastrow
        Curr1 = Sheets("Blad1").Cells(inx2, 1).Value
        Curr2 = Sheets("Blad1").Cells(inx2, 2).Value
        CurrValue = Sheets("Blad1").Cells(inx2, 3).Value
        
        If WordToSearch = Left(Curr1, 4) Then
            If Left(Curr2, AntalTecken) = CurrVillkor Then
                tmpVal = tmpVal + CurrValue
            End If
        End If
    Next
    'Skriver ut resultatet efter varje loop
    Sheets("Blad2").Cells(9 + inx, 1).Value = "Villkor_" & inx & " " & CurrVillkor
    Sheets("Blad2").Cells(9 + inx, 2).Value = tmpVal
Next
End Sub


Svara

Sv:Smartaste VBA-koden?

Postades av 2011-06-27 12:56:32 - Terry Ekelöf

Jag har löst det så här. Jag är inte särskilt haj på VBA, men jag får det resultat jag var ute efter. Är det dumt skrivet?

Sub kostn()
    Dim konto As Variant
    Dim kst As String
    Dim kst2 As String
Application.ScreenUpdating = False
    Sheets("Blad2").Select
    kst = ActiveCell.Value

    
    stopp = 1
    x = 2
    y = 2
    'Hur många siffror är det i sökvärdet
    Do Until stopp = ""
        stopp = Cells(x, 1)
    
        konto = Left(Cells(x, 1), 2)
        kontroll = IsNumeric(konto)
        
        If kontroll = True Then
        antal = 1
        End If
        
        konto = Left(Cells(x, 1), 3)
        kontroll = IsNumeric(konto)
        
        If kontroll = True Then
        antal = 2
        End If
        
        konto = Left(Cells(x, 1), 4)
        kontroll = IsNumeric(konto)
    
        If kontroll = True Then
        antal = 3
        End If
        
        konto = Left(Cells(x, 1), 5)
        kontroll = IsNumeric(konto)
    
        If kontroll = True Then
        antal = 4
        End If
        
        konto = Left(Cells(x, 1), 6)
        kontroll = IsNumeric(konto)
    
        If kontroll = True Then
        antal = 5
        End If
        
        'Summera om
        Sheets("Blad1").Select
            stopp2 = 1
            Do Until stopp2 = ""
                stopp2 = Cells(y, 1)
                kst2 = Left(Cells(y, 1), 4)
                If kst2 = kst And Left(Cells(y, 2), antal) = Left(konto, antal) Then utfall = utfall + Cells(y, 3)
                y = y + 1
            Loop
            Sheets("Blad2").Select
            Cells(x, 2) = utfall
            utfall = 0
            y = 2
x = x + 1
Loop
Application.ScreenUpdating = True
End Sub


Svara

Sv: Smartaste VBA-koden?

Postades av 2011-06-28 19:39:42 - Thommy Lantz

Om du tycker att koden gör det den ska är det väl Ok

Annars bör alla variabler vara deklarerade
Om man anger Option Explicit överst i modulen
blir du påmind att göra just detta.

Bara dumt att använda .select och active.cell

Referera direkt i koden till det blad eller cell det gäller


Svara

Sv: Smartaste VBA-koden?

Postades av 2011-06-30 12:44:42 - Terry Ekelöf

Jo, jag har tagit bort active.cell nu faktiskt. Att inte deklarera variabler är en ful ovana som jag vill inbilla mig får mindre och mindre betydelse när vi har så snabba datorer nu för tiden.

Även detta att inte referera direkt till cellen... ja vad ska jag säga. Rättar till det direkt.


Svara

Nyligen

  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 869
27 965
271 770
511
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies