2 779 läst ·
16 svar
3k läst
16 svar
Excel VBA, skriva text på viss position i textsträng?
Sida 1 av 2
Hej,
Någon som är haj på VBA kod i Excel?
Vill få ut en textsträng med information på fasta positioner i strängen men fattar inte hur...
Som exempel har jag information i fyra olika variabler som jag vill bygga en textsträng av där informationen hamnar på en viss position i strängen enligt nedan och lägga i en cell:
kundKod = 1234 Pos 1
artNr = abcd Pos 10
orderNr = 456789 Pos 20
datum = 20171222 Pos 30
På position 50 vill jag hämta info ifrån en cell tex A3
Resultat i Cell F11:
1234 abcd 456789 20171222 värde ifrån A3
Någon som är haj på VBA kod i Excel?
Vill få ut en textsträng med information på fasta positioner i strängen men fattar inte hur...
Som exempel har jag information i fyra olika variabler som jag vill bygga en textsträng av där informationen hamnar på en viss position i strängen enligt nedan och lägga i en cell:
kundKod = 1234 Pos 1
artNr = abcd Pos 10
orderNr = 456789 Pos 20
datum = 20171222 Pos 30
På position 50 vill jag hämta info ifrån en cell tex A3
Resultat i Cell F11:
1234 abcd 456789 20171222 värde ifrån A3
Jag begriper knappt frågan själv... men jag vill bygga ihop strängen som du föreslår men vill att de skall hamna på viss förutbestämd position.johanolzzon skrev:
Om jag tar ditt exempel på namn och skriver Kalle på position 1 och Stina på position 10 så blir det fyra mellanslag mellan Kalle___Stina men vill jag ha samma följ på nästa rad med Per och Stina så blir det sex mellanslag för att Stina skall hamna på samma position.
Skall läsa in information i affärssystemet och då skall informationen ligga på ett visst sätt och eftersom antal och ordernummer kan skifta i längd så hamnar inte informationen på samma ställe tex:
CSG KUNDKOD PORT FORRAD
ARD ARTIKEL ORDERNR PORT
DEL 170428 100 1ORDERNR
DEL 170502 100 1ORDERNR
PDN FOLJNR 170424100
Ett alternativ är att lägga ihop din cell med en annan med 10 mellanslag. Sen klipper du av resultatet efter 10 tecken. Det komm ier funka.
"=vänster (a1&" ";10)"
(Med 10 mellanslag på rad i parentesen)
"=vänster (a1&" ";10)"
(Med 10 mellanslag på rad i parentesen)
Ja, det var ju kreativt. Men borde du inte ha... jaha, det du skrev visades inte korrekt förrän jag tryckte svara.Nyfniken skrev:
Om man vill ha ett makro kan man ju räkna ordet med Len och sedan bygga på mellanslag i en loop innan man tar nästa ord, men jag gillade det andra svaret mer.
Kanon, nu har jag ett par bra uppslag att jobba med!johanolzzon skrev:
Om jag förstår dig rätt,
Hämta värde i en cell, nedan i "I6";
CaseNumber = ActiveSheet.Range("I6").Value
Använd "mid" för att välja första position samt hur många steg som ska läsas från första positionen i "Casenumber", t.ex nedan där text/tecken läses från position 2 och 10 steg framåt:
Sliced = mid(CaseNumber,2,10)
Skriv ut värdet av "Sliced" med;
ActiveSheet.Range("J8") = Sliced
Hämta värde i en cell, nedan i "I6";
CaseNumber = ActiveSheet.Range("I6").Value
Använd "mid" för att välja första position samt hur många steg som ska läsas från första positionen i "Casenumber", t.ex nedan där text/tecken läses från position 2 och 10 steg framåt:
Sliced = mid(CaseNumber,2,10)
Skriv ut värdet av "Sliced" med;
ActiveSheet.Range("J8") = Sliced
Ja det känns som det är en sådan här funktion jag är ute efter fast precis tvärtomKent85 skrev:Om jag förstår dig rätt,
Hämta värde i en cell, nedan i "I6";
CaseNumber = ActiveSheet.Range("I6").Value
Använd "mid" för att välja första position samt hur många steg som ska läsas från första positionen i "Casenumber", t.ex nedan där text/tecken läses från position 2 och 10 steg framåt:
Sliced = mid(CaseNumber,2,10)
Skriv ut värdet av "Sliced" med;
ActiveSheet.Range("J8") = Sliced
Sliced1 = mid(CaseNumber,2,10)
Sliced2 = mid(CaseNumber,20,30)
Sliced3 = mid(CaseNumber,50,70)
Vill nu ha ut värdet i tur och ordning för Sliced 1,2,3 i följd i samma cell med start på tex pos 2, 20, 50 även om Sliced 1,2,3 byter längd
I underlaget jag har för filformatet står tex att Kundens artikelnummer får bestå av 35 tecken och starta på plats 5, Kundens ordernummer får bestå av 17 tecken och starta på plats 40 men varken artikelnummer eller ordernummer är lika långa ifrån gång till annan.
M
Marcussjogren
Medlem
· Västra Götaland
· 3 081 inlägg
Marcussjogren
Medlem
- Västra Götaland
- 3 081 inlägg
Om jag förstår rätt nu då - med position så menar du antal tecken från vänster räknat?
Är detta för att veta när ett specifikt värde börjar?
I så fall, så skulle jag istället titta på kommaseparation istället, vilket gör det mycket enklare att hantera värden av olika längd. Så kallat CSV-format.
T ex ”värde1,värde2,värde3” osv. Om man då bryter upp den strängen baserat på kommatecknet så får man ut alla värden ett och ett oavsett längd.
Är detta för att veta när ett specifikt värde börjar?
I så fall, så skulle jag istället titta på kommaseparation istället, vilket gör det mycket enklare att hantera värden av olika längd. Så kallat CSV-format.
T ex ”värde1,värde2,värde3” osv. Om man då bryter upp den strängen baserat på kommatecknet så får man ut alla värden ett och ett oavsett längd.
M
Marcussjogren
Medlem
· Västra Götaland
· 3 081 inlägg
Marcussjogren
Medlem
- Västra Götaland
- 3 081 inlägg
Se det här lite som pseudokod, men något åt det här hållet måste det bli:
Result = value1
// Lägg till de mellanslag som saknas för att nå position 9. Nästa värde börjar då på position 10
For i=0 to 9-ubound(Result)
Result = Result & ” ”
Next
Result = Result & value2
//mellanslag för att komma på position 19
For i=0 to 19-ubound(Result)
Result = Result & ” ”
Next
Result = value3
Result = value1
// Lägg till de mellanslag som saknas för att nå position 9. Nästa värde börjar då på position 10
For i=0 to 9-ubound(Result)
Result = Result & ” ”
Next
Result = Result & value2
//mellanslag för att komma på position 19
For i=0 to 19-ubound(Result)
Result = Result & ” ”
Next
Result = value3