Avatar billede Nervatos Seniormester
04. september 2017 - 18:28 Der er 79 kommentarer og
1 løsning

Find og fjern resterende tekst/tal

Hej Eksperten

Jeg har en liste med nogle varer, hvor jeg ud fra dem også får størrelsen på dem. F.eks. Chokolade 7X150 G, eller Chokolade 10 X 1 KG. (står i C10 og ned, hvis det kan hjælpe).

Det jeg skal bruge er data før X, så nogen gange er der mellemrum mellem antal og X andre gange står det helt op af.
Jeg har søgt og afprøvet diverse formler, men uden held.
Er der nogen, som er lidt skarpere i det end jeg og kan en løsning - så vil det hjælpe mig helt vildt.

På forhånd tak og god aften.
Avatar billede excelent Ekspert
04. september 2017 - 19:47 #1
=--VENSTRE(C10;FIND("X";C10)-1)
Avatar billede Nervatos Seniormester
04. september 2017 - 19:54 #2
Hej excelent

Umiddelbart, så skriver den blot #VÆRDI!
Jeg skal ikke bruge Chokolade heller, det er kun tallet før X jeg skal have.
Avatar billede excelent Ekspert
04. september 2017 - 20:33 #3
så prøv :

=--VENSTRE(C10;FIND("X";STORE.BOGSTAVER(C10))-1)
Avatar billede finb Ekspert
04. september 2017 - 20:53 #4
Hvis der max er 3 cifre i antal:
=hvis(er.tal(midt(erstat(c10;" ";"");FIND("X";C10)-3;3));midt(erstat(c10;" ";"");FIND("X";C10)-3;3));hvis(er.tal(midt(erstat(c10;" ";"");FIND("X";C10)-2;2));midt(erstat(c10;" ";"");FIND("X";C10)-2;2));midt(erstat(c10;" ";"");FIND("X";C10)-1;1))
Avatar billede jens48 Ekspert
04. september 2017 - 21:09 #5
Fjern de to minustegn i Excelents formel. Så virker det. Man kan jo ikke konvertere teksten til tal alligevel.
Avatar billede jens48 Ekspert
04. september 2017 - 21:10 #6
Ups. Jeg overså bemærkningen i #2. Så glem min bemærkning
Avatar billede Jan Hansen Ekspert
04. september 2017 - 21:16 #7
=SLÅ.OP(99^99;--("0"&MIDT(A1;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A1&"0123456789"));RÆKKE($1:$10000))))
Avatar billede store-morten Ekspert
04. september 2017 - 21:53 #8
=MIDT(C10;FIND(" ";C10);FIND("X";C10)-FIND(" ";C10))
Avatar billede Nervatos Seniormester
05. september 2017 - 13:45 #9
#4 Nu får jeg følgende fejl: Du har indtastet for få argumenter for denne funktion.
erstat(c10;" ";"")

#7 Dit resultat er egentlig ok, men problemet er bare hvis den hedder K1tk3t, så giver den et forkert resultat. Derfor den blot skal tage det som står før X.

#10 Dit resultat giver faktisk næsten det som jeg skal bruge, dog er skriver den hele med. Altså Chokolade 14 i stedet for blot 14.

Tak for Jeres forsøg foreløbig.
Avatar billede Jan Hansen Ekspert
05. september 2017 - 14:28 #10
Prøv denne

=SLÅ.OP(99^99;--("0"&MIDT(HVIS(SØG("X";MIDT(A2;SØG(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));A2);LÆNGDE(A2)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));MIDT(A2;SØG(" ";A2);LÆNGDE(A2)));MIN(SØG({0;1;2;3;4;5;6;7;8;9};HVIS(SØG("X";MIDT(A2;SØG(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));A2);LÆNGDE(A2)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));MIDT(A2;SØG(" ";A2);LÆNGDE(A2)))&"0123456789"));RÆKKE($1:$10000))))
Avatar billede Jan Hansen Ekspert
05. september 2017 - 14:35 #11
Eller denne

=MIDT(HØJRE(MIDT(A2;FIND(" ";A2);FIND("X";A2)-FIND(" ";A2));5);SØG(" ";HØJRE(MIDT(A2;FIND(" ";A2);FIND("X";A2)-FIND(" ";A2));5));5)*1
Avatar billede store-morten Ekspert
05. september 2017 - 16:07 #12
Chokolade 7X150 G
Formlen i #10 giver: 7

Chokolade 10 X 1 KG
Formlen i #10 giver: 10
Avatar billede Nervatos Seniormester
05. september 2017 - 17:08 #13
Jo tak, men problemet er bare, hvis der så står 2-pack KitKat 4x500g - så bliver resultatet 2, hvor det skulle være 4. Hvis I kan følge mig?
Avatar billede Jan Hansen Ekspert
05. september 2017 - 17:19 #14
ikke med #10 Prøv
Avatar billede Nervatos Seniormester
05. september 2017 - 17:26 #15
Hej Jan,

Jeg har denne:

Marabou 70% 4x100, så skriver den 0,7 i stedet for 4?
Avatar billede Jan Hansen Ekspert
05. september 2017 - 17:53 #16
Prøv denne:

=HVIS(SØG("%";A2);SLÅ.OP(99^99;--("0"&MIDT(MIDT(A2;SØG("%";A2)+1;LÆNGDE(A2)-SØG("%";A2)-1);MIN(SØG({0;1;2;3;4;5;6;7;8;9};MIDT(A2;SØG("%";A2)+1;LÆNGDE(A2)-SØG("%";A2)-1)&"0123456789"));RÆKKE($1:$10000))));SLÅ.OP(99^99;--("0"&MIDT(HVIS(SØG("X";MIDT(A2;SØG(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));A2);LÆNGDE(A2)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));MIDT(A2;SØG(" ";A2);LÆNGDE(A2)));MIN(SØG({0;1;2;3;4;5;6;7;8;9};HVIS(SØG("X";MIDT(A2;SØG(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));A2);LÆNGDE(A2)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(A2;MIN(SØG({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));RÆKKE($1:$10000))));MIDT(A2;SØG(" ";A2);LÆNGDE(A2)))&"0123456789"));RÆKKE($1:$10000)))))
Avatar billede Nervatos Seniormester
05. september 2017 - 18:06 #17
Du skal have tak for dine forsøg! Nu viser den perfekt ved %, men alm. Marabou 4x200g skriver den blot VÆRDI!

Dem som indholder procenter, virker den perfekt med. Men det er bare ikke alle som har procenter i sig - desværre :)
Avatar billede store-morten Ekspert
05. september 2017 - 18:10 #18
Og der er både x og X ;-)
Avatar billede Nervatos Seniormester
05. september 2017 - 21:07 #19
Jeg har fået lavet denne:

=HVIS.FEJL(HVIS(FIND("%";C30;1)>0;HVIS(SØG("%";C30);SLÅ.OP(99^99;--("0"&MIDT(MIDT(C30;SØG("%";C30)+1;LÆNGDE(C30)-SØG("%";C30)-1);MIN(SØG({0;1;2;3;4;5;6;7;8;9};MIDT(C30;SØG("%";C30)+1;LÆNGDE(C30)-SØG("%";C30)-1)&"0123456789"));RÆKKE($1:$10000))));SLÅ.OP(99^99;--("0"&MIDT(HVIS(SØG("X";MIDT(C30;SØG(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));C30);LÆNGDE(C30)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));MIDT(C30;SØG(" ";C30);LÆNGDE(C30)));MIN(SØG({0;1;2;3;4;5;6;7;8;9};HVIS(SØG("X";MIDT(C30;SØG(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));C30);LÆNGDE(C30)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));MIDT(C30;SØG(" ";C30);LÆNGDE(C30)))&"0123456789"));RÆKKE($1:$10000)))));"");SLÅ.OP(99^99;--("0"&MIDT(HVIS(SØG("X";MIDT(C30;SØG(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));C30);LÆNGDE(C30)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));MIDT(C30;SØG(" ";C30);LÆNGDE(C30)));MIN(SØG({0;1;2;3;4;5;6;7;8;9};HVIS(SØG("X";MIDT(C30;SØG(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));C30);LÆNGDE(C30)))-1=LÆNGDE(SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000)))));SLÅ.OP(99^99;--("0"&MIDT(C30;MIN(SØG({0;1;2;3;4;5;6;7;8;9};C30&"0123456789"));RÆKKE($1:$10000))));MIDT(C30;SØG(" ";C30);LÆNGDE(C30)))&"0123456789"));RÆKKE($1:$10000)))))

Som kigger om der er % i først, men ny udfordring er så kommet. Nogen steder hvis der f.eks. står Marabou 70 5x200G så skriver den stadig 70, hvis jeg så fjerner 70 så skriver den rigtigt nok 5.

Skal siges, jeg henter et varekartotek ned på mange tusind linjer, derfor ville det være en hjælp at det var automatiseret. Da antal i kolli står i varetekst.

Håber det sidste kan lade sig gøre, foreløbig tak for hjælpen!!
Avatar billede store-morten Ekspert
05. september 2017 - 21:17 #20
Kan du evt. bruge makro?
Avatar billede jens48 Ekspert
05. september 2017 - 21:38 #21
For eksempel denne. Den sætter tallet ind i kolonne D:

Sub FindTal()
Dim x, y, z, S, LastRow As Integer
LastRow = Range("C65536").End(xlUp).Row
For x = 10 To LastRow
Cells(x, 4).ClearContents
On Error Resume Next
y = WorksheetFunction.Search("x", Cells(x, 3))
S = 0
For z = y - 1 To 1 Step -1
If IsNumeric(Mid(Cells(x, 3), z, 1)) Then
S = 1
Cells(x, 4) = Mid(Cells(x, 3), z, 1) & Cells(x, 4)
Else
If S = 1 Then
GoTo A:
End If
End If
Next
A:
Next
End Sub
Avatar billede Jan Hansen Ekspert
05. september 2017 - 22:34 #22
Dette er UDF

=Find_Tal(A2)

[div]
Option Explicit
Dim MySplit() As String
Dim iCount As Integer
Function Find_Tal(Celle As Range) As String
    Application.Volatile
    MySplit() = Split(Celle.Value, " ")
    For iCount = LBound(MySplit) To UBound(MySplit)
        If UCase(MySplit(iCount)) Like "*X*" Then
            Find_Tal = Left(MySplit(iCount), InStr(1, UCase(MySplit(iCount)), "X") - 1)
        End If
    Next
End Function
[/Div]

Jan
Avatar billede Jan Hansen Ekspert
05. september 2017 - 22:37 #23
forresten vil give problem med varetekst/navn indeholdende "x"
Avatar billede Jan Hansen Ekspert
05. september 2017 - 22:39 #24
ups kun hvis det står efter det "x" du skal bruge
Avatar billede store-morten Ekspert
06. september 2017 - 06:06 #25
Har du mukighed for at rense din liste og opdele den i 2 kolonner?
Er der i listen mere end et X (som gange tegn) i listen.

1. Udskift x med X
2. Opdel i 2 kolonner (ved gange tegn)
3. Fjern over flødige blanke
4. Indsæt UDF (Makro)
Avatar billede Nervatos Seniormester
06. september 2017 - 14:57 #26
#22 Det virker super godt, kan du gøre sådan, at den kun tager tallet?
Har nogen steder, hvor der stod Lindt20x100G, så skriver den Lindt20, ville være fedt med kun tallet - hvis det kan laves i UDF.

Har desværre ikke selv kendskab til UDF.
Avatar billede store-morten Ekspert
06. september 2017 - 15:52 #27
Har du mukighed for at rense din liste og opdele den i 2 kolonner?
Er der i listen mere end et X (som gange tegn) i listen?

1. Udskift x med X
2. Opdel i 2 kolonner (ved gange tegn)
3. Fjern over flødige blanke
4. Indsæt UDF (Makro)

1.
Sub Ud_skift_x_med_X()
'
    Selection.Replace What:="x", Replacement:="X", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

2.
Sub Del_i_2_kolonner_ved_X()
'
    Dim myRange As Range
    Set myRange = Selection
'
    myRange.TextToColumns Destination:=myRange, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="X", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
End Sub

3.
Sub Fjern_overflødige_blanke()
    Dim r As Range

    With Application.WorksheetFunction
    For Each r In Intersect(Selection, ActiveSheet.UsedRange)
        r.Value = .Trim(r.Value)
    Next r
    End With
End Sub

4.
Public Function SøgBagfra(I_tekst As String, Søg_efter As String) As Integer
    SøgBagfra = InStrRev(I_tekst, Søg_efter)
End Function

Formel:
=HØJRE(C10;LÆNGDE(C10)-SøgBagfra(C10;" "))*1
Avatar billede Jan Hansen Ekspert
06. september 2017 - 16:05 #28
Eller

[div]
Function Find_Tal(Celle As Range) As Long
    Application.Volatile
    MySplit() = Split(Celle.Value, " ")
    For iCount = LBound(MySplit) To UBound(MySplit)
        If UCase(MySplit(iCount)) Like "*X*" Then
            sString = Left(MySplit(iCount), InStr(1, UCase(MySplit(iCount)), "X") - 1)
            If IsNumeric(sString) Then
                Find_Tal = sString
            Else
                For iA = 1 To Len(sString)
                    If IsNumeric(Mid(sString, iA, 1)) Then Find_Tal = Find_Tal & Mid(sString, iA, 1)
                Next
            End If
        End If
    Next
    Find_Tal = Find_Tal * 1
End Function

{/div]

der må ikke være blank mellem antal og X

Jan
Avatar billede Nervatos Seniormester
06. september 2017 - 16:12 #29
#27 Hvis det kan lade sig gøre med #22, så er det den bedste løsning for mig.

#28 Får en fejl ved sString =
Compile error:
Variable not defined
Avatar billede Jan Hansen Ekspert
06. september 2017 - 16:15 #30
Vent lidt har en ny ide!!
Avatar billede Jan Hansen Ekspert
06. september 2017 - 16:49 #31
prøv denne:



Option Explicit
Dim lCount As Long
Dim sString As String
Dim bTal As Boolean
Function Find_Tal(Celle As Range) As Long
Application.Volatile
    bTal = False
    sString = ""
    For lCount = 1 To Len(Celle.Value)
        If bTal = True Then Find_Tal = sString
        If Mid(UCase(Celle.Value), lCount, 1) = "X" Then Exit For
        If IsNumeric(Mid(Celle.Value, lCount, 1)) Or Mid(Celle.Value, lCount, 1) = 0 Then
            bTal = True
        Else
            bTal = False
            sString = ""
        End If
        If bTal = True Then sString = sString & Mid(Celle.Value, lCount, 1)
    Next
    Find_Tal = Find_Tal * 1
End Function



Jan
Avatar billede Nervatos Seniormester
06. september 2017 - 16:54 #32
#31 Kan du gøre, så den ikke tager f.eks. MIX og XL med? For det er umiddelbart det eneste, som lige slår fejl. Ellers er det super godt lavet!!
Avatar billede Nervatos Seniormester
06. september 2017 - 16:58 #33
#31 og BOX også kan jeg se. Du er satme en stjerne Jan!
Avatar billede Jan Hansen Ekspert
06. september 2017 - 16:59 #34
giv mig eks. (Data)
Avatar billede Jan Hansen Ekspert
06. september 2017 - 17:03 #35
den burde kun kunne give tal
Avatar billede Nervatos Seniormester
06. september 2017 - 17:03 #36
Marabou 70% BOX 10X100G
Marabou 1/4PL MIX 240x100G
Marabou 70% XL 5X200G
Avatar billede Jan Hansen Ekspert
06. september 2017 - 17:16 #37

Option Explicit
Dim lCount As Long
Dim sString As String
Dim bTal As Boolean
Function Find_Tal(Celle As Range) As Long
Application.Volatile
    bTal = False
    sString = ""
    For lCount = 1 To Len(Celle.Value)
        If bTal = True Then Find_Tal = sString
        If Mid(UCase(Celle.Value), lCount, 1) = "X" Then
            If UCase(Mid(Celle.Value, lCount - 2, 3)) = "BOX" Or UCase(Mid(Celle.Value, lCount - 2, 3)) = "MIX" Or UCase(Mid(Celle.Value, lCount, 2)) = "XL" Then
            Else
                Exit For
            End If
        End If
        If IsNumeric(Mid(Celle.Value, lCount, 1)) Or Mid(Celle.Value, lCount, 1) = 0 Then
            bTal = True
        Else
            bTal = False
            sString = ""
        End If
        If bTal = True Then sString = sString & Mid(Celle.Value, lCount, 1)
    Next
    Find_Tal = Find_Tal * 1
End Function

Avatar billede Nervatos Seniormester
06. september 2017 - 18:40 #38
#37 Tusind tak!! Du er for vild Jan, mange tak for hjælpen!
Det virker perfekt nu!
Avatar billede Jan Hansen Ekspert
06. september 2017 - 22:25 #39
Velbekomme
Avatar billede Nervatos Seniormester
09. september 2017 - 12:52 #40
Hej igen Jan,

Kan man ud fra din kode, gøre så det er man ikke skal bruge =Find_tal(C2); at den blot tager noget ud ala: "Intersect([D2:D25], Target)"

Således, at den stadig skal finde data fra C2 og ned til C:25 men skal skrive i D2 til D25 (like Find_tal(C2);)

Det er blot fordi, hvis jeg ikke har antal i kolli nu, skriver den rigtigt nok 0. Men hvis lige manuelt skriver 3, så er den formel ødelagt. Så det var mere, om man kunne noget tilsvarende uden at ødelægge formlen.

Giver det mening?
Avatar billede Jan Hansen Ekspert
09. september 2017 - 14:13 #41
Hvorfor ligger du ikke bare en ekstra kolonne ind og skriver Find_Tal(A1 & B1) ?
I B skriver du så bare 3X
ellers må du nok over i noget macro hvor facit skrives direkte i cellen.
Avatar billede Jan Hansen Ekspert
09. september 2017 - 14:25 #42
Macro


Sub mFind_Tal()
  const StartCelle as String="A1"
  const SlutCelle as String="A10"
  Dim rArea as Range
  Set rArea=ActiveSheet.Range(StartCelle,SlutCelle)
  Dim rCell as Range
  For each rCell in rArea
      rCell.offset(0,2).Value=Find_Tal(rCell)
  Next
End Sub


Ej Testet
Avatar billede Nervatos Seniormester
16. september 2017 - 10:56 #43
Hej igen Jan

Beklager det sene svar, har haft travlt med al mulig andet end excel.
Tror ikke helt, at det var det jeg mente.

Det som MACRO skulle gøre, at jeg ikke skal bruge en formel, den skal blot selv skrive indholdet fra C2:C25 over i D2:D25 uden at skulle ødelægge =Find_tal(C2).

Så tænkte jeg på, om i stedet for om den skriver 0 - hvis der ikke er angivet kolli om den kan forblive blank?
Avatar billede Jan Hansen Ekspert
16. september 2017 - 12:15 #44
=Hvis(Find_tal(C2)=0;""; Find_tal(C2))
Avatar billede Nervatos Seniormester
16. september 2017 - 12:17 #45
Det er også den jeg bruger nu, men det er for at formlen ikke bliver ødelagt.

Jeg tænkte om man ikke kunne, lave en MACRO på selve cellerne. Så hvis den er blank kan man stadig skrive i den UDEN formlen faktisk bliver ødelagt.
Giver det mening?
Avatar billede Jan Hansen Ekspert
16. september 2017 - 12:33 #46
Så skal du ud i noget ala

sub Indsætformel()
for each rcell in Range("D2","D22")
      rcell.formula= "=Hvis(Find_tal(C" & rcell.row & ")=0;""""; Find_tal(C" & rcell.row & "))"
Next

Ej testet
Avatar billede Jan Hansen Ekspert
16. september 2017 - 12:34 #47
Mangler et

End sub
Avatar billede store-morten Ekspert
16. september 2017 - 17:39 #48
Makro skal skrives på engelsk også formlen (IF og , i stedet for ;):
Sub Indsætformel()
For Each rcell In Range("D2", "D22")
      rcell.Formula = "=IF(Find_tal(C" & rcell.Row & ")=0,"""", Find_tal(C" & rcell.Row & "))"
Next
End Sub
Denne her under vil kunne bruges i en dansk version af Excel
Sub Indsætformel()
For Each rcell In Range("D2", "D22")
      rcell.FormulaLocal = "=Hvis(Find_tal(C" & rcell.Row & ")=0;""""; Find_tal(C" & rcell.Row & "))"
Next
End Sub
Avatar billede Jan Hansen Ekspert
16. september 2017 - 18:47 #49
Store-Morten vil det sige FormulaLocal bruges til dansk ver. ?

For så har jeg også lært noget idag.

Jan
Avatar billede store-morten Ekspert
16. september 2017 - 19:14 #50
Hvis du bruger: FormulaLocal = "=Hvis........ i en engelsk ver. går det galt
Avatar billede store-morten Ekspert
16. september 2017 - 19:18 #51
Så i engelsk ver.: FormulaLocal = "=IF.........:
Avatar billede Nervatos Seniormester
17. september 2017 - 09:46 #52
Hej med Jer to

Tak for forsøget.
Umiddelbart ser det jo godt ud, den har rettet i formlerne. Men den retter den ikke tilbage igen automatisk, efter C2 er slettet igen.
Er der mulighed for det?
Avatar billede Jan Hansen Ekspert
17. september 2017 - 10:00 #53
se om Application.Volatile står i en af de øverste linier i sub Find_Tal !!
Avatar billede Jan Hansen Ekspert
17. september 2017 - 10:03 #54
evt prøv at sætte Application.Volatile øverst i sub indsætformel.
Avatar billede Nervatos Seniormester
17. september 2017 - 10:36 #55
Application.Volatile stod øverst i find_tal og nu har jeg prøvet at tilføje det i det nye, men stadig uden held.
Avatar billede Jan Hansen Ekspert
17. september 2017 - 12:10 #56
Prøv i macroen at sætte activesheet.calculate
Avatar billede Nervatos Seniormester
17. september 2017 - 12:16 #57
Stadig det samme, den forbliver blank, desværre.

Ellers skal jeg lave en knap som en 'reset', problemet er bare, jeg ved ikke hvordan jeg skal få alle formler retur. For har flere blandt andet med LOPSLAG osv.

Ved denne reset, kunne den også slette alt i en celle, så det blev helt som ny og alle formler kom retur igen. Ville det ikke være en bedre løsning? For det ser ikke ud til, at det kan komme til at køre automatisk.
Avatar billede Nervatos Seniormester
17. september 2017 - 19:58 #58
Jeg fik en idé, men ved ikke - om det kan føres ud og/eller tager for mange kræfter for Excel.

Jeg har søgt på nettet og har set, man kan lave en auto refresh. Hvilket man også kunne bruge, således - at man tjekker f.eks. A2:A25 igennem om cellen er blank. Hvis den er det og formlen ikke er ødelagt, skal den ikke gøre noget. Men er den blevet ødelagt, fordi man selv har måttet skrive antal på - og cellen så bliver blank igen skal auto refresh køre formlen igennem igen.

Altså, den skal kun tjekke om cellen er blank, hvis den er blank og den ingen formel har - så skal den tilføjes igen.
Giver dette bedre mening i forhold til det andet?
Avatar billede Jan Hansen Ekspert
17. september 2017 - 20:42 #59
I arkets kode

Med denne kan du klikke på det blanke felt og koden kommer over!!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("D2:D22")) Is Nothing Then
        On Error GoTo MyEnd
        If Target = "" Then
            Target.Formula = "=IF(Find_tal(C" & Target.Row & ")=0,"""", Find_tal(C" & Target.Row & "))"
        End If
    End If
MyEnd:
End Sub
Avatar billede Nervatos Seniormester
18. september 2017 - 15:29 #60
Jeg tror vi snakker forbi hinanden, for den skal tilføje formlen igen hvis den ikke er der. Dog ville det nok være mere praktisk, at den tjekker om der står noget i C2:C25 og hvis der står noget og D2:D25 er blanke så skal den tilføje formlen igen.

F.eks. Jeg skriver i C2 en vare, som mangler antal (2x200g), i D2 skriver den intet da den i forvejen skriver 0 og med =HVIS fjerner den '0'. Her skulle man bare selv skrive noget i D2 og når C2 bliver slettet igen, skriver den formlen på D2 igen (hvis den vel og mærket mangler).

Håber dette giver bedre mening, beklager ellers - for det er nogle super forsøg du kommer med. Sætter virkelig stor pris på dit arbejde!
Avatar billede Jan Hansen Ekspert
18. september 2017 - 16:11 #61
Højreklik på Arkfanen of vælg "Vis programkode"
Indsæt følgende kode



Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C2:C22")) Is Nothing Then
        If Target = "" Then
            Target.Formula = "=IF(Find_tal(C" & Target.Row & ")=0,"""", Find_tal(C" & Target.Row & "))"
        End If
    End If
End Sub


Avatar billede Jan Hansen Ekspert
18. september 2017 - 16:12 #62
vent der er en fejl
Avatar billede Jan Hansen Ekspert
18. september 2017 - 16:14 #63


Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C2:C22")) Is Nothing Then
        If Target = "" Then
            Target.Offset(0, 1).Formula = "=IF(Find_tal(C" & Target.Row & ")=0,"""", Find_tal(C" & Target.Row & "))"
        End If
    End If
End Sub

Avatar billede Nervatos Seniormester
18. september 2017 - 16:49 #64
Fedt fedt, hvordan finder jeg ud af at tilpasse den, således hvis cellen bliver flyttet til B i stedet for C i dit forslag?
Og kan man tilføje flere formler i andre celler, samme case som før. F.eks. Hvis B2 er blank og stiller på den, at den tjekker C2, D2, E2 osv. og mangler nogle en formel - så bliver den tilskrevet?

Ellers ser det godt ud!
Avatar billede Jan Hansen Ekspert
18. september 2017 - 18:15 #65

Private Sub Worksheet_Change(ByVal Target As Range)

Target er cellen der ændres


    If Not Intersect(Target, Range("C2:C22")) Is Nothing Then

C2:C22 er området hvor target skal være inden for


        If Target = "" Then

Undersøger om target er blank


            Target.Offset(0, 1).Formula = "=IF(Find_tal(C" & Target.Row & ")=0,"""", Find_tal(C" & Target.Row & "))"

Target.Offset(0,1).Formula er cellen et step til højre for Target-Cellen

C" & Target.Row  C er kolonnen, Target.Row finder rækken

Med andre ord C kan ændres til en anden kolonne eks F
2/22 E ræækerne der er indbefattet

Offset(0,1) der kan 1 rettes til den afstand fra kolonnen du ønsker ( virker også med -1 som rykke facit kolonnen til venstre for kolonnen ( C )

Jan
Avatar billede Nervatos Seniormester
18. september 2017 - 18:23 #66
Jeg er begyndt at få en fejl: Run-time error '13': Type mismatch
Den kommer ved: If Target = "" Then

Ved du hvad årsagen til det er?

#65 > Det prøver jeg lige at lege lidt med, foreløbig tusind tak for hjælpen!
Avatar billede Jan Hansen Ekspert
18. september 2017 - 18:35 #67
prøv at sætte:

on error goto MyEnd


ind if sætning 1 og 2

og lige før End Sub


on error goto 0
MyEnd :


så vil den springe til MyEnd ved fejl

eller  ret

If Target.value = "" Then
Avatar billede Nervatos Seniormester
18. september 2017 - 19:32 #68
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C2:C22")) Is Nothing Then
on error goto MyEnd
        If Target.value = "" Then
on error goto MyEnd
            Target.Offset(0, 1).Formula = "=IF(Find_tal(C" & Target.Row & ")=0,"""", Find_tal(C" & Target.Row & "))"
        End If
    End If
on error goto 0
MyEnd :
End Sub

Bare så vi er enige? :)
Avatar billede Nervatos Seniormester
18. september 2017 - 19:51 #69
Hvis jeg prøver at lave flere af disse target, så får jeg følgende fejl:
Run-time error '1004'
Application defined or object-defined error

Target.Offset(0, 5).Formula = "=HVIS.FEJL(C" & Target.Row & "*D" & Target.Row & "*F" & Target.Row & ";"""")"

Denne skulle skrives fra B hen til G, kan du se hvad jeg har gjort galt? Har blot smidt den under din Target.Offset.
Avatar billede Jan Hansen Ekspert
18. september 2017 - 20:19 #70
#68
nr 2 -> on error goto MyEnd  -> er unødvendig

#68
din:
Target.Offset(0, 5).Formula = "=HVIS.FEJL(C" & Target.Row & "*D" & Target.Row & "*F" & Target.Row & ";"""")"

Ny:
Target.Offset(0, 5).FormulaLocal = "=HVIS.FEJL("C" & Target.Row & "*D" & Target.Row & "*F" & Target.Row & ";"""")"

giver følgende formel:
=Hvis.Fejl(C1*D1*F1;"")
Avatar billede store-morten Ekspert
18. september 2017 - 20:41 #71
#Nervatos
Læg altid hele koden. Så er det nemmere at se hvad du laver?

"Denne skulle skrives fra B hen til G......."
Target.Offset(0, 5).Formula = "=HVIS.FEJL(C" & Target.Row & "*D" & Target.Row & "*F" & Target.Row & ";"""")"

Target.Offset(0,5).Formula er cellen fem step til højre for Target-Cellen

Bruger du: For Each rcell In Range("D2", "D22") vil den skrive fra række 2 til 22
Avatar billede Nervatos Seniormester
19. september 2017 - 18:37 #72
#70

Tak for dine svar, jeg har nu fejl i denne igen

Target.Offset(0, 5).Formula = "=IFERROR(C" & Target.Row & "*D" & Target.Row & "*F" & Target.Row & ";"""")"

Har prøvet at smide " foran C men uden held, får følgende fejl med den: Compile error: Expected: end of statement

Og uden " foran C:
Run-time error '1004': Application-defined or object-defined error

Skal siges, at jeg har programmet på dansk og da det skulle køre på en anden PC med engelsk, gik det galt. Så jeg troede blot, at jeg kunne ændre de små ting.

#71, tænker jeg ikke der er grund til, da Jan har udført koden og det er blot en linje som er problemet?
Avatar billede Nervatos Seniormester
19. september 2017 - 19:10 #73
Fandt selv løsningen, der skulle stadig stå Local med på.

Kan man ikke tilpasse det efter sprog, i stedet for manuelt i macro skal oversætte til engelsk?
Avatar billede Jan Hansen Ekspert
19. september 2017 - 19:34 #74
#73 ingen erfaring med flere sprog, bruger kun  Dansk ver.
Avatar billede Nervatos Seniormester
19. september 2017 - 19:37 #75
Tusind tak for din hjælp Jan, gid der var flere mennesker som dig. Din tid og tålmodighed, du er en stjerne.
Tusind tusind tak!
Avatar billede Jan Hansen Ekspert
19. september 2017 - 19:41 #76
Velbekomme, den blev lang!!!!
Avatar billede store-morten Ekspert
19. september 2017 - 20:16 #77
"Kan man ikke tilpasse det efter sprog?"

se #48 - 50 og 51

Formula = "=IF........" (uden Local, engelsk formel)
Makro skrives på engelsk også formlen så virker det både i dansk og engelsk ver.
FormulaLocal = "=Hvis........" (med local, dansk formel) virker kun i dansk excel ver.
FormulaLocal = "=IF........" (med local, engelsk formel) virker kun i engelsk excel ver.
Avatar billede Nervatos Seniormester
21. september 2017 - 18:54 #78
#77
Makro skrives på engelsk også formlen så virker det både i dansk og engelsk ver.

Kan du give et eksempel?
Avatar billede store-morten Ekspert
21. september 2017 - 19:05 #79
se #48
Sub Indsætformel()
For Each rcell In Range("D2", "D22")
      rcell.Formula = "=IF(Find_tal(C" & rcell.Row & ")=0,"""", Find_tal(C" & rcell.Row & "))"
Next
End Sub
Avatar billede store-morten Ekspert
21. september 2017 - 19:54 #80
Sub Indsæt_formel_i_aktive_celle()
    Select Case Application.International(xlCountryCode)
    Case 1:
    'English 1 (The United States of America)
    ActiveCell.Formula = "=IF(A1="""",""A1 Is empty"",""A1 Is not empty"")"
    Case 45:
    'Danish 45 (Denmark)
    ActiveCell.Formula = "=IF(A1="""",""A1 er Tom"",""A1 er Ikke tom"")"
    Case Else:
    MsgBox "(Country code not defined!)"
    End Select
End Sub
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