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
 
P
Vet inte om jag förstår frågan men du kan bygga ihop strängar med &, ex ="Kalle " & "och Stina" eller =A1 & " " & B1 beroende på vad du vill bygga ihop.
 
  • Gilla
Nyfniken
  • Laddar…
Eller om du vill dela upp en sträng så använder du funktionerna
SÖK()
VÄNSTER()
HÖGER()
LÄNGD()
 
johanolzzon skrev:
Vet inte om jag förstår frågan men du kan bygga ihop strängar med &, ex ="Kalle " & "och Stina" eller =A1 & " " & B1 beroende på vad du vill bygga ihop.
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.

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
 
Jag är osäker men går det inte att göra en export till textfil med fasta kolumnbredder?
 
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)
 
P
Nyfniken Nyfniken skrev:
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)
Ja, det var ju kreativt. Men borde du inte ha... jaha, det du skrev visades inte korrekt förrän jag tryckte svara. :) (mellanslagen försvann)

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.
 
johanolzzon skrev:
Ja, det var ju kreativt. Men borde du inte ha... jaha, det du skrev visades inte korrekt förrän jag tryckte svara. :) (mellanslagen försvann)

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! :-)
 
P
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
 
M
Och vill du ha allt i en variabel för struktur och logik, så kan du konkatenera värdena till en variabel:

Dim minVariabel
minVariabel = minVariabel & Sliced
 
Kent85 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
Ja det känns som det är en sådan här funktion jag är ute efter fast precis tvärtom :-) nu hämtades informationen ifrån viss position i cellen/strängen och jag behöver nu skriva ut den på viss position.

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
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.
 
M
Ah nu såg jag - du har ingen möjlighet att hantera avgränsande symbol själv utan är styrd av affärsystemet, ett tämligen dumt sådant dessutom. Då blir det krångligare...
 
M
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
 
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.