Den 15 mars 2013 19:19 skrev Jan Öhman <Jan_Ohman@glocalnet.net>:
Tack!
"Passa" - på svenska verkar vara en kraftfull instruktion. Ska titta mer på
den.
Andra spännande instruktioner är =ÄREJTEXT(A1) eller = VÄRDETYP(A1)
( I manualen tycker jag syntaxen skulle vara =VÄRDETYP(C2) inte =TYP(C2) )
Men dessa kan inte hantera "blanksteg" som jag vill.
Har suttit en stund och "fipplat" med en del formler och kom fram till
följande skulle kunna vara en lösning (inte så enkelt tycker jag)
Vi utgår från 2 celler. I detta fall E41 med siffror (antal) som önskemål
och F41 som enhet [st].
En möjlig villkorlig formatering av E41 skulle då vara, som fungerar ganska
bra.
OM(E41<>"";ÄRFEL( PASSA(" *[0-9 ]* *";E41:E41;0) );falskt()) (den ger Svart
Fet Text med Röd bakgrund).
F41 skulle då få den villkorliga formateringen .:
OM(E41<>"";ÄRFEL( PASSA(" *[0-9 ]* *";E41:E41;0) );falskt()) (den ger
Svart Fet Text med Röd bakgrund).
och
ICKE(OCH(OM(E41<>"";TRUE();FALSE());ÄREJTEXT(E41))) (den skulle ge vit text
på vit bakgrund - (eller osynlig text.)
Här är ett bra exempel på när man använder $-tecknet i referenser:
OM($E41<>"";ÄRFEL( PASSA(" *[0-9 ]* *";$E41:$E41;0) );falskt())
Nu kan du bara kopiera från en kolumn till en annan utan att E blir
något annat än just E. Bara ett litet tips. $-tecknet ”låser” det som
står omedelbart efter vid kopiering av celler och cellområden.
Detta hanterar "antal" (Heltal) ganska bra.
Det finns dock undantag. (men jag vet inte hur ofta dessa inträffar).
Om jag förstått rätt är det svårt att förenkla dessa funktioner?
Det är ju inte så mycket att förenkla, så att säga.
//Jan
____________________________________________________________________
Tänkte försöka skriva om sökkriterierna i PASSA så även talen 9,90 och 9.90
skulle fungera.
Har sökt i manualen för att kunna tolka formatet på "PASSA", men inte
lyckats.
Var hittar jag hur man skriver "sökkriterier" eller reguljära uttryck för
"PASSA"?
Det mesta är detsamma som reguljära uttryck för sök/ersätt, så sök
bara på ”reguljära uttryck” i den vanliga hjälpen så ska du hitta det.
//Jan
Johnny Rosenberg skrev 2013-03-14 17:28:
Den 14 mars 2013 00:22 skrev Jan Öhman <Jan_Ohman@glocalnet.net>:
Hej!
Jag har inte en bra lösning på hur man bäst kollar att en cell är
numerisk
(dvs innehåller bara heltal)
Menar du numerisk på riktigt eller bara en textsträng som enbart
innehåller siffror?
Blanksteg kan jag också acceptera på ett sätt.
Okej, så vi pratar textformatering då?
Men decimaltal bokstäver gillar jag inte.
Vad är ”decimaltal bokstäver”?
Jag ser cellen "visuellt" ur inmatningssynpunkt. Helst hade jag styrt att
cellen hade varit numerisk.
Men hur jag än gör så förblir den inte alltid numerisk, helt beroende på
vilken information som kopieras till cellen.
Oftast kommer informationen från Excel i varierande format.
Nåväl användaren försöker infoga informationen i blad1 antingen genom att
kopiera eller skriva in värden direkt i cellerna.
I blad2 hämtas informationen från blad1 men presenteras i en annan ordning
och upplägg och kanske annat format och utseende.
Formatet ska passa för att senare exportera till en CSV-fil.
I blad2 försöker jag styra upp innehållet från blad1 och här kommer mitt
problem / utmaning.
I en cell, i blad1, ska användaren ge ett antal men har kopierat och
klistrat in siffrorna samt ett blanksteg följer med.
Detta blanksteg vill jag filtrera bort för att bara få siffror i blad2:s
cell (text eller numeriskt spelar ingen roll).
ex. C5 får bara innehålla heltal eller tecken som inte syns (blanksteg)
Cellen bredvid = D5 innehåller en enhet t.ex. cm.
Om ett tal skrivs in i C5 ska enheten visas i D5. (ex. 10 cm)
Om talet i C5 stryks försvinner enheten igen.
Är anledningen till detta att det inte går att göra via formatering
när det gäller textsträngar?
Antag att i cellen C5 ska användaren skriva ett mått i cm
När användaren skriver in "10" poppar "cm" fram i cellen D5.
Men av någon anledning lyckas användaren skriva 10a i cellen
Då ska något visa att inmatningen blev inte rätt. (ex. röd bakgrund)
I bland lyckas användaren få in ett blanksteg i en tom cell (vet inte hur) -
även då "poppar" cm upp. (ser inte bra ut och användaren blir förvirrad
"varför står det cm där")
Om användaren kopierar in 10 med ett blanksteg före eller efter tycker jag
inte spelar någon roll, det är ändå klart vad som menas.
Därför skulle jag vilja försöka göra en formel som selekterar bara siffror
(och ev. blanksteg) - allt annat ger "helt fel".
Jag har ingen idé hur man skulle kunna skriva ett vilkor för detta.
En lösning är villkorlig formatering i D5 ex. "OM(C5<1) " visa vit text
på
vit bakgrund" (Inte helt bra)
Men verkar fungera bättre än "OM(C5="") " visa vit text på vit bakgrund"
Skrivs ett blanksteg in i C5 kommer enheten att visas (vilket jag inte
skulle vilja)
Skrivs en bokstav in i C5 skulle jag vilja att både C5 och D5 fick en
"Röd
botten".
Jag hittar inte funktionerna för att skilja mellan siffror och bokstäver.
Det beror nog på att ingen tänkt på att någon skulle komma på idén att
arbeta på detta sätt. Får man fråga vad det är du försöker göra? Antar
att du inte är ute efter att göra någon form av beräkningar på
cellerna (för det går ju inte eftersom de är ren text, om man inte
använder diverse tidsödande text-till-nummer-tricks).
Nej! inga beräkningar utan det är bara en finess.
Normalt (i början) är C5 helt tom, då ska D5 (med enheten "cm") inte synas.
Men om användaren skriver ett tal i C5, då ska enheten cm visas i D5.
Skriver användaren bara blanksteg i C5 ska inte enheten visas.
Kopierar användaren text i C5 skulle jag vilja att bakgrunden blev röd och
markerar ett ogiltigt värde.
Borde kunna få det att fungera om man bara kom på formeln eller hittade en
instruktion för det.
Någon som har en idé?
Göra en egen cellfunktion går ju bra, men dessa brukar bli ganska
långsamma om man har dem i tusentals celler.
Sedan beror det också, som sagt, på vad för cellinnehåll man kan vänta
sig. Är det ALLTID frågan om ren text, eller kan det då och då
förekomma riktiga tal? Eller är det enbart riktiga tal som godkänns
som numeriskt? Det blir en väldigt stor skillnad i hur man bäst
angriper problemet beroende på ovanstående.
Har du testat MATCH (heter väl PASSA på svenska)?
Skriv något i A1
Skriv följande i någon annan cell:
=MATCH(" *[0-9 ]* *";A1:A1;0)
Om A1 innehåller något annat än mellanslag och siffror blir värdet av
formeln #N/A, annars 1. Kanske går att utnyttja i ditt fall? Det går
givetvis bra att använda MATCH i villkor för villkorlig formatering.
Denna funktion ser spännande ut.
Dock får jag samma "svar" om cellen A1 är helt tom eller har en bokstav.
Johnny Rosenberg
//Jan
Nu sitter ju inte jag här med dina filer, men jag förstår inte riktigt
tanken med det du försöker göra. Jag hade gjort så här:
✓ Konvertera allting till riktiga numeriska värden
✓ Strunta i D-kolumnen och låt enheterna visas i samma cell istället
genom att formatera cellen, exempelvis som # ##0" cm" för att visa
1234,56 som 1 235 cm.
Enklaste sättet att filtrera bort mellanslag torde väl vara med
TRIM(). Med TEXTNUM() behöver du inte ens ta bort mellanslagen.
TEXTNUM(" 1234 ") → 1234 (som numeriskt värde). Är cellen
formaterad som # ##0" cm" kommer värdet att visas som 1234 cm. Utan
hjälpkolumn. Är cellen tom kommer 0 cm att visas, men det kommer du
enkelt runt med den vanliga testen OM(A1="";"";TEXTNUM(A1)). En cell
som är tom kommer att vara tom, även om man formaterat den till att
visa exempelvis cm eller kr eller vad det nu kan vara.
=OM(ELLER(ÄRFEL(TEXTNUM(A1));A1="");"";TEXTNUM(A1))
Ovanstående fungerar för de fall jag nyss testade:
” 1234 ” → 1234 cm
”f123” → (tomt)
”123f” → (tomt)
" " → (tomt)
123 (som tal, ej text) → 123 cm
Jag vet inte riktigt vad det är som inte skulle fungera med denna
enkla formel som skulle göra det lönt att krångla till det så in i
bänken med extrakolumner, vit text mot vit bakgrund-formateringar och
andra konstigheter, men det kan ju hända att jag missat något.
Nackdelen med formeln ovan är att TEXTNUM(A1) alltid beräknas två
gånger om A1 har ett ”giltigt” värde, men när det gäller så här
okomplicerade formler är det nog inget man bör hänga upp sig på
alltför mycket.
Johnny Rosenberg
--
For unsubscribe instructions e-mail to: users+help@sv.libreoffice.org
Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/sv/users/
All messages sent to this list will be publicly archived and cannot be deleted
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.