Just nu i M3-nätverket
Gå till innehåll

Formatering av data för att passa mall


gby

Rekommendera Poster

Hej

 

Jag har ett projekt jag skulle behöva lite hjälp med.

 

I Blad1!D6 Vill jag:

Om Blad2!R6 har ett värde

=EXTEXT(Blad2!A6;Blad2!H6+1;5)

annars

=EXTEXT(Blad2!A6;Blad2!I6+1;5)

 

Jag skrev så här i Blad1!D6, det fungerade inte.

=OM(Blad2!R6=0;EXTEXT(Blad2!A6;Blad2!I6+1;5);EXTEXT(Blad2!A6;Blad2!H6+1;5))

 

//Gustav

Länk till kommentar
Dela på andra webbplatser

Hej

 

Jag har ett projekt jag skulle behöva lite hjälp med.

 

I Blad1!D6 Vill jag:

Om Blad2!R6 har ett värde

=EXTEXT(Blad2!A6;Blad2!H6+1;5)

annars

=EXTEXT(Blad2!A6;Blad2!I6+1;5)

 

Jag skrev så här i Blad1!D6, det fungerade inte.

=OM(Blad2!R6=0;EXTEXT(Blad2!A6;Blad2!I6+1;5);EXTEXT(Blad2!A6;Blad2!H6+1;5))

 

//Gustav

 

Vad är det som inte fungerar?

 

Det kan vara så att du inte kan testa med 0, du kanske ska testa med om cellen är tom (eller både och).

 

=OM(ELLER(Blad2!R6=0;Blad2!R6="");EXTEXT(Blad2!A6;Blad2!I6+1;5);EXTEXT(Blad2!A6;Blad2!H6+1;5))

 

Pär B

Länk till kommentar
Dela på andra webbplatser

D6 blir tom...

 

R6 =Hitta("0V";A6) ...(Blad2)

Om 0V Finns med i A6 är R6 i 9 fall av 10 19.

 

Har filen på jobbet, ska dit på tis ska testa din lösning då.

 

Tack

//Gustav

Länk till kommentar
Dela på andra webbplatser

D6 blir tom...

 

R6 =Hitta("0V";A6) ...(Blad2)

Om 0V Finns med i A6 är R6 i 9 fall av 10 19.

 

Har filen på jobbet, ska dit på tis ska testa din lösning då.

 

Tack

//Gustav

 

 

OK, då är problemet att när A6 saknar "0V" så får du "#VÄRDEFEL!" i R6.

Lösningen blir då beroende på vilken version av Excel du har.

 

/Pär B

Länk till kommentar
Dela på andra webbplatser

I nuläget så är det 2003, men inom en väldigt snar framtid (3-4v) kommer vi gå över till 2010.

 

Mm, men nu så blir R6 tom även om 0V finns.

Men då har jag inte provat din kod än...

 

/G

Länk till kommentar
Dela på andra webbplatser

Skillnaden jag tror Perboman syftar på är att i Excel 2003 får man skriva

=OM(ÄRFEL(ETEXT(.....));"returnera något";EXTEXT(...))

vilket snabbt ger långa formler.

 

I Excel 2007 introducerar formeln OMFEL

=OMFEL(EXTEXT(...);"Returnera något")

som returnerar det som evalueras om det inte är ett felvärde, om felvärde returneras det andra argumentet.

 

I Excel 2003/2002 är det ofta att rekommendera att man har formeln som kan ge felvärde i en cell och OM(ÄRFEL()) i en annan. Cellen med formeln som kan ge fel döljer man undan någonstans och OM-satsen används där resultatet ska presenteras.

Länk till kommentar
Dela på andra webbplatser

Skillnaden jag tror Perboman syftar på är att i Excel 2003 får man skriva

=OM(ÄRFEL(ETEXT(.....));"returnera något";EXTEXT(...))

vilket snabbt ger långa formler.

 

I Excel 2007 introducerar formeln OMFEL

=OMFEL(EXTEXT(...);"Returnera något")

som returnerar det som evalueras om det inte är ett felvärde, om felvärde returneras det andra argumentet.

 

I Excel 2003/2002 är det ofta att rekommendera att man har formeln som kan ge felvärde i en cell och OM(ÄRFEL()) i en annan. Cellen med formeln som kan ge fel döljer man undan någonstans och OM-satsen används där resultatet ska presenteras.

 

Helt riktigt att det var det jag tänkte på.

Men att gby inte får något värde alls i R6 verkar mera mystiskt.

 

/Pär B

Länk till kommentar
Dela på andra webbplatser

Helt riktigt att det var det jag tänkte på.

Men att gby inte får något värde alls i R6 verkar mera mystiskt.

 

/Pär B

 

Sant, ska vi kanske be gby ladda upp ett blad där problemet kan påvisas? Ja, det gör vi och rekommenderar att hålla det så litet som möjligt och att ta bort eventuella känsliga uppgifter som kan finnas. Visa tydligt på vad som är rådata och vad som ska fås fram av det, tydliga exempel underlättar.

Länk till kommentar
Dela på andra webbplatser

De ska jag göra.

Bör meddela att jag inte är så super vass på vba så ni får ha överseende.

I vilket fall så tror jag inte koden är problemet i nuläget.

 

Sen är det så att jag är ganska långt från klar och det finns mycket om ska fixas.

 

Hur som hellst...

Det svåraste som jag ser det är att informationen som kommer in kan variera rätt mycket.

De som är fast är att Time och Wind alltid är de två första, sen kommer Wind Var, om det förekommer "0V"

 

Jag har lagt till tre exempel mellan rad 20 och 28 och skrivit en lite kommentar ute till höger.

 

Känner nu att min ursprungliga fråga var lite bristande, har haft lite svårt att beskriva mitt problem då jag är så osäker på hur jag ska göra.

 

Tack

//Gustav

Länk till kommentar
Dela på andra webbplatser

Är det VBA-kod eller formler du vill ha hjälp med?

 

VBA-koden behöver du visserligen hjälp med, det ser jag...

Där brukar jag alltid börja med att länka till

//eforum.idg.se/topic/220943-riktlinjer-for-bra-vba-kod/

Ditt makro5 på Blad1 exempelvis.

Varför dessa Select-satser?

Vilket blad refererar Range-satserna till? Okej, jag vet att när koden är skriver på ett blads kodblad blir det alltid till det bladets celler om inget annat ges.

 

Dina IF-satser skulle kunna skrivas som

Dim rwIndex as Integer
For rwIndex = 6 to 35
If Not (IsEmpty(Me.Cells(rwIndex, 1))) Then
        	Me.Cells(1, rwIndex+1)
       	Exit For
End If
Next rwIndex

givet att du vill markera första cell som är tom. Om du vill markera sista som är tom, då vänder vi på det:

Dim rwIndex as Integer
For rwIndex = 35 to 6
If Not (IsEmpty(Me.Cells(rwIndex, 1))) Then
        	Me.Cells(1, rwIndex)
       	Exit For
End If
Next rwIndex

fast nu ser jag att den koden på bladet nog aldrig körs, samma kod finns i Modul1

ja, du förstår. Finns en hel del att förbättra. Läs länken ovan och gör ett försök själv.

 

Vad gäller formlerna. Gör om upplägget en aning är min rekommendation. På blad2 skriv in så du där har för varje fält i blad1 har du ett start och en längd värde.Alla data du behöver för att ta fram dina data. Om en viss data saknas, sätt längden till noll och kolla detta värde på Blad1 innan du hämtar.

När du testar, testa på Blad2 och se till att få till formlerna där. Det är mycket enklare att arbeta på samma blad. När formlerna fungerar där, kopiera över dem till Blad1.

 

Dvs förenkla!

Länk till kommentar
Dela på andra webbplatser

 

Vad gäller formlerna. Gör om upplägget en aning är min rekommendation. På blad2 skriv in så du där har för varje fält i blad1 har du ett start och en längd värde.Alla data du behöver för att ta fram dina data. Om en viss data saknas, sätt längden till noll och kolla detta värde på Blad1 innan du hämtar.

När du testar, testa på Blad2 och se till att få till formlerna där. Det är mycket enklare att arbeta på samma blad. När formlerna fungerar där, kopiera över dem till Blad1.

 

Dvs förenkla!

 

 

Jag skulle vilja tillägga att det kan finnas en vinst med att dela upp textsträngarna efter mellanslagen i VBA, och sedan skriva varje värde i en kolumn. Då kan du lättare med formler identifiera vad som ska presenteras var (även om jag tycker det verkar lurigt att 9999 kan vara giltigt på två ställen):

 

/Pär B

Länk till kommentar
Dela på andra webbplatser

Det var formeln som jag hade funderingar kring.

Men som sagt koden är väll under all kritik den med.

 

Provade din loop men får Invalid use of Me keyword.

 

Ska läsa igenom länken du skickade och göra ett nytt försök.

 

Oj har gjort ett fel där Pär.

Vis (Sikt) 0000-9999 Ska bara kunna vara i Vis. D

Men jag ser nu att jag har vent på det, Rad 20, -RA ska vara i E20 och 9999 i D20

Tack

 

/Gustav

Länk till kommentar
Dela på andra webbplatser

Me - fungerar om koden står på ett blad. Me är du referens till bladet.

I en modul fungerar icke Me-referensen .

Länk till kommentar
Dela på andra webbplatser

Det var formeln som jag hade funderingar kring.

Men som sagt koden är väll under all kritik den med.

 

Provade din loop men får Invalid use of Me keyword.

 

Ska läsa igenom länken du skickade och göra ett nytt försök.

 

Oj har gjort ett fel där Pär.

Vis (Sikt) 0000-9999 Ska bara kunna vara i Vis. D

Men jag ser nu att jag har vent på det, Rad 20, -RA ska vara i E20 och 9999 i D20

Tack

 

/Gustav

 

Hej!

 

Efter att ha kollat SMHI METAR dokumentation så kan jag säga att mitt angreppssätt hade varit att dela upp textsträngen i VBA och identifiera del för del så att de kan presenteras i rätt fält på excelsidan.

 

Det finns en funktion SPLIT som kan dela upp en sträng med hjälp av avgränsningstecken (i detta fall blanktecken). Därefter så är det ju en 5-10 tester som krävs för att identifiera vad varje deltext ska presenteras som.

 

/Pär B

Länk till kommentar
Dela på andra webbplatser

Tack för all hjälp, jag ska ta nya tag när svärföräldrarna ha avlägsnat sig.

Så åter kommer jag med nya problem.

 

//Gustav

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...