Avatar billede j3ppah Novice
02. december 2008 - 16:47 Der er 8 kommentarer og
1 løsning

Simpel Makro if a = b, then c=

Hej alle eksperter... Er ved at lege lidt med en makro...
Det den skal gøre er.

Har kolonne I som er positive tal, og J som er negativetal (men som er skrevet som positive).
Den skal egentligt bare checke op på om et tal i I går op med et tal i J... Så derfor behøver jeg ikke rigtigt lave J om til negativer.

så altså hvis fx. I:3 = J:10 så skal K:3 = "0" og K:10 = "0"...

Hvis den derimod ikke finder en match skal K:3 = I:3 og K:10 = J:10...
Hmm virker forholdsvist simpel, men er fucket totalt op og er rimeligt ny inden for at lave makroer...

Kunne godt tænke mig en løsning på problmet og håber nogle af jer kan hjælpe mig... for det virker sku ikke rigtigt skide godt :D...

indtilvidere ser det sådan her ud.



Public Sub Tjek()
    Dim Data1 As Variant, Data2 As Variant, Data3 As Variant, I As Long, J As Long, RW As Long, RW2 As Long
    RW = Application.WorksheetFunction.Max(Sheets("Bogf.").[I65536].End(xlUp).Row, Sheets("Bogf.").[J65536].End(xlUp).Row)
    Data1 = Sheets("Bogf.").Range("i8:j" & RW)    ' læser 2 kolonner ind i Data1
    Data3 = Sheets("Bogf.").Range("H8:H" & RW) ' læser tomme celler i kolonne H til at skrive i
   
    For I = 1 To UBound(Data1)
        If Not IsEmpty(Data1(I, 2)) Then
            Data1(I, 1) = Data1(I, 2)
            Data3(I, 1) = Data1(I, 2)
        End If
    Next

    RW2 = Sheets("Bogf.").[C65536].End(xlUp).Row  ' tjekker antal date i ark2 C kolonnen
    Data2 = Sheets("Bogf.").Range("I1:I" & RW2)  'læser det ind i Data2

    For I = 1 To UBound(Data1)
        For J = 1 To RW2
            If Data2(J, 1) = Data1(I, 1) Then
                Data2(J, 1) = 0    ' tjekker dem op imod hinanden
                Data3(I, 1) = 0
                Exit For
            End If
        Next
    Next
    Sheets("Bogf.").Range("H8:H" & RW) = Data3  ' skriver resultatet i H kolonnen ark1
End Sub
Avatar billede mugs Novice
02. december 2008 - 16:57 #1
Det må kunne laves med en funktion der måler restværdien af en division (Modulus):

=HVIS(REST(A2;B2)=0;"retuernerer noget";"returnerer noget andet")

som i pseudokode betyder, at hvis rest efter divisonen A2 : B2 =0 skal der returneres en tekststreng. Hvis rest er <> 0 skal der returneres noget andet
Avatar billede j3ppah Novice
02. december 2008 - 17:43 #2
det skal jo så kunne kører i en form for "lykke" da der kan være over 10000 tal i hver... og at det er 100% vilkårligt hvor de ligger... altså a:1 kan godt være = b:9432
Avatar billede kabbak Professor
02. december 2008 - 22:22 #3
Data1 og Data2 læser begge i kolonne I i Sheets("Bogf."), den ene godt nok fra række 8 og indeholder 2 kolonner, det er vist ikke meningen.
Data2 må vel skal læse et andet sted ??
Avatar billede j3ppah Novice
02. december 2008 - 22:38 #4
Kabbak, det er samme eksempel, som den du hjalp mig med sidst, skal jeg uploade en fil igen så du kan se hvad jeg mener ?...

Altså, sheet 1 er magen til. som nu hedder Bogf... det er bare 2 talrækker i 1 ark, som skal lægges op mod hinanden...

Bare sig hvis jeg lige skal smide en fil op, så kommer den asap
Avatar billede kabbak Professor
02. december 2008 - 22:49 #5
ok
Avatar billede j3ppah Novice
03. december 2008 - 09:47 #6
Hey kabbak, har lige smidt et eksempel op her
http://rapidshare.com/files/169769343/Hilfe_kabbak.xls.html

Dog skal du tage i betragtning at der kan være flere tusinde i hvert række.

Håber du kan hjælpe, så er du bare en skat ;)
Avatar billede kabbak Professor
03. december 2008 - 16:26 #7
til test

Public Sub Tjek()
    Dim Data1 As Variant, Data2 As Variant, Data3 As Variant, I As Long, J As Long, RW As Long, RW2 As Long
    RW = Application.WorksheetFunction.Max(Sheets("Bogf.").[I65536].End(xlUp).Row, Sheets("Bogf.").[J65536].End(xlUp).Row)
    Data1 = Sheets("Bogf.").Range("i8:j" & RW)    ' læser 2 kolonner ind i Data1
    Data3 = Sheets("Bogf.").Range("H8:H" & RW)    ' læser tomme celler i kolonne H til at skrive i

    For I = 1 To UBound(Data1)
        If IsEmpty(Data1(I, 2)) Then
            Data3(I, 1) = Data1(I, 1)
        Else
            Data3(I, 1) = Data1(I, 2) * -1
        End If
    Next

    For I = 1 To UBound(Data1)
        For J = 1 To UBound(Data1)

            If Data1(J, 1) = Abs(Data1(I, 2)) Then
            If Not IsEmpty(Data1(J, 1)) And Not IsEmpty(Data1(I, 2)) Then
                Data1(I, 2) = 0    ' tjekker dem op imod hinanden
                Data1(J, 1) = 0
                Data3(I, 1) = 0
                Data3(J, 1) = 0
                Exit For
            End If
            End If
        Next
    Next
    Sheets("Bogf.").Range("K8:K" & RW) = Data3  ' skriver resultatet i H kolonnen ark1
    Sheets("Bogf.").Range("i8:j" & RW) = Data1
End Sub
Avatar billede j3ppah Novice
03. december 2008 - 17:01 #8
Ammen kabbak, hvorfor skal du være så hardcore til alt det her :D...

Kan godt se hele idden, og det virker jo 100% som det skal, må bare se at komme igang med det VB shit... :D...

Your the PRO, bøjer mig i støvet...!..

Bare smid et svar, og jeg må nok lige sige MANGE tak... Fandeme lækkert at der er folk som dig ! ;)
Avatar billede kabbak Professor
03. december 2008 - 17:21 #9
et svar ;-))
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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