Jag förmodas skicka en excelfil till någon som ska läsa in den maskinellt. Av den anledningen kräver de att alla tal ska vara i formatet "00000000234,48" för 234,48 (kr). Alltid två decimaler och i textformat, dvs man kan inte ange anpassat talformat 00000000000,00 i formateringen (eftersom cellen då "endast" innehåller 234,48, dvs utan alla nollor). 1. Markera rutorna som innehåller talen. Faktum är att det löste problemet, om än lite meckigt att behöva göra den omvägen varje gång. Det vore ju geschwint om Excel själv kunde klara av det. Om inte annat via VBA-kod eller nåt... Ok, du nämnde inte att det skulle göras regelbundet. En variant skulle då kunna vara: Finurligt värre, nu är vi nästan i mål. Går det att ordna så att endast beloppen i kolumn D och E får det formatet, den andra uppgifterna i de kolumnerna ska vara "normalt" textformat (dvs de ska stå exakt som de gör i exemplet fast som ren text). Här finns en tilläggsmodul som är testad i excel 2003: http://dl.dropbox.com/u/2729743/excel/ExportToFile.xla Jag tycker jag har provat alla olika varianter nu (dvs lägga koden på alla möjliga olika sätt). Allt i thisworkbook, allt i det blad som infon hämtas ifrån, delat upp koden lite på gissning (med kompileringsfel som resultat, såklart) Har testkört nu med ~40000 poster på bladet .."och det fungerar för mig" ;) Formatproblem Excel
Jag har alltså tusentals siffror i formatet 2546,89 eller 1469,52 osv osv som jag vill göra om till 11 siffror innan kommat och två siffror efter kommat och det ska vara textformat.
Jag blir snart galen... hur gör jag?Sv: Formatproblem Excel
2. Högerklicka och välj Formatera celler.
3. Välj Anpassat och under Typ: skriv in 00000000000,00
4. Nu visas dem som du vill, men det räcker inte eller? I så fall fortsätt på punkt 5.
5. Markera hela kolumnen med dina tal. Klipp ut.
6. Öppna Notepad och Klistra in.
7. Ändra den nu tomma kolumnen i Excel till formatet Text.
8. Kopiera tillbaka från Notepad till Excel.
/AndréSv:Formatproblem Excel
Sv: Formatproblem Excel
Självklart går det att göra med VBA.Sv:Formatproblem Excel
<code=vb>Sub CustomFormat()
Dim r As Range
For Each r In Selection
r.NumberFormat = "@"
Dim pos As Integer
Dim intPart As Integer
Dim decPart As Integer
pos = InStr(1, r.Value, ",")
If pos > 0 Then
intPart = Left(r.Value, pos - 1)
decPart = Right(r.Value, Len(r.Value) - pos)
Else
intPart = r.Value
decPart = "00"
End If
r.Value = Right("00000000000" & intPart, 11) & "," & Left$(decPart & "00", 2)
Next
End Sub
</code>
Markera det som ska konverteras och kör sedan vba-koden..Sv: Formatproblem Excel
I kolumn G ska produktkomponenten alltid vara 001 (textformaterat, levereras dock som en etta (1) med talformat 000).
För att krångla till det ytterligare så är det hela kontruerat på det viset att excelark nr 1 hämtar alla värden från ett annat excelblad vilket gör att det i excelark nr 1 endast ligger en massa formler. Jag kopierar hela rasket och klistrar in som värden i ett alldeles nytt excelark (för att bli av med alla formler) och i detta nya excelblad vill jag ha detta rätta format (som sedan sparas som annat filnamn och skickas till den som ska läsa in det hela).
Det vettigaste vore kanske att ha VBA-kod i ett sparat "tomt" ark som alltid får agera mottagare av inklistringen varpå man kör VBA-koden och allt blir riktigt format för att sedan spara?
Så här ser uppgifterna ut: (det ser lite kocko ut när jag klistrar in på detta viset, men kruxet är alltså att datumet 2010 på H-raden i kolumn D och 03 i kolumn E ska vara i just som sådana (de är datumformaterade och blir 40267 om man textformaterar de rutorna), alltså 7039,12 ska bli med nollor före, men inte datumet i samma kolumn på annan rad osv osv.
A B C D E F G H I 10
* Ver.nr Bokf.datum Bokf. År Bokf. Period Namn Personnummer Adress Postnummer Ort
H 1 2010 2010 03 Pelle Pilsner 123456-7891 Nisseviken 88 22233 Finspång
* Ver.nr Konto Debet Kredit Produkt Produktkomponent
P 1 41040 7039,12 0 296 1
P 1 44040 0 0 296 1
P 1 41040 931,32 0 297 1
P 1 44040 0 0 297 1
P 1 42248 0 7039,12 296 1
P 1 42248 0 931,32 297 1
P 1 42258 0 0 296 1
P 1 42258 0 0 297 1
P 1 22265 7039,12 0 296 1
P 1 22265 931,32 0 297 1
P 1 26106 0 2391,13 1
* Ver.nr Bokf.datum Bokf. År Bokf. Period Namn Personnummer Adress Postnummer Ort
H 2 2010 2010 03 Lasse Larsson 123456-7891 Kallegatan 2 18978 Burås
* Ver.nr Konto Debet Kredit Produkt Produktkomponent
P 2 41041 0 0 296 1
P 2 44041 31627,8 0 296 1
P 2 41041 0 0 297 1
P 2 44041 5091,08 0 297 1
P 2 42248 0 0 296 1
P 2 42248 0 0 297 1
P 2 42258 0 31627,8 296 1
P 2 42258 0 5091,08 297 1
P 2 22265 31627,8 0 296 1
P 2 22265 5091,08 0 297 1
P 2 26106 0 11015,66 1
Det blev mycket med det hela... men om någon har lust att förbarma sig så vore jag glad. Sv:Formatproblem Excel
Här är koden som borde göra det du vill, skapar ett nytt blad med exportdata och ger valet att spara som ny fil, sparar man inte filen ligger bladet kvar för åskådan.
Sub FormatForExport()
Dim i As Integer
Dim shNbr As Integer
Dim sh As Worksheet
Set sh = ActiveSheet
Dim save As Integer
checkForExportSheet
sh.Activate
shNbr = Worksheets.Count
Cells(1, 1).Activate
Do
For i = 1 To 10
Select Case Left(ActiveCell.Value, 1)
Case "P"
Worksheets(shNbr).Cells(ActiveCell.Row, i).NumberFormat = "@"
Select Case i
Case 4, 5: Worksheets(shNbr).Cells(ActiveCell.Row, i).Value = formatCurrency(i - 1)
Case 7: Worksheets(shNbr).Cells(ActiveCell.Row, i).Value = formatComponent(i - 1)
Case Else: Worksheets(shNbr).Cells(ActiveCell.Row, i).Value = ActiveCell.offset(0, i - 1).Value
End Select
Case Else: Worksheets(shNbr).Cells(ActiveCell.Row, i).Value = ActiveCell.offset(0, i - 1).Value
End Select
Next
ActiveCell.offset(1, 0).Activate
Loop While ActiveCell.offset(1, 0).Value <> ""
save = MsgBox("Spara till fil?", vbYesNo + vbQuestion)
If save = vbYes Then
Set filesave = CreateObject("MSComDlg.CommonDialog")
filesave.Filter = "Excel-filer (*.xls)|*.xls"
filesave.showsave
Sheets(Worksheets(shNbr).name).Copy
If filesave.Filename <> "" Then ActiveWorkbook.SaveAs Filename:=filesave.Filename
ActiveWorkbook.Close savechanges:=False
Set filesave = Nothing
Application.DisplayAlerts = False
Sheets(Worksheets(shNbr).name).Delete
Application.DisplayAlerts = True
Else
Worksheets(shNbr).Activate
End If
End Sub
Private Sub checkForExportSheet(Optional shName As String)
Dim sh As Worksheet
Dim name As String
Dim found As Boolean
found = False
If IsMissing(shName) Or shName = "" Then name = "Export"
For Each sh In Worksheets
If sh.name = name Then
found = True
overwriteexisting = MsgBox(name & " finns redan, skriv över arbetsblad?", vbYesNo + vbQuestion)
If overwriteexisting = vbYes Then
Application.DisplayAlerts = False
sh.Delete
Application.DisplayAlerts = True
Worksheets.Add(after:=Worksheets(Worksheets.Count)).name = "Export"
Else
name = InputBox("Ange namn för exportblad", "Nytt blad")
checkForExportSheet name
Worksheets.Add(after:=Worksheets(Worksheets.Count)).name = name
End If
End If
Next
If found = False Then Worksheets.Add(after:=Worksheets(Worksheets.Count)).name = "Export"
End Sub
Private Function formatCurrency(offset As Integer) As String
Dim r As Range
Set r = ActiveCell.offset(0, offset)
Dim pos As Integer
Dim intPart As Integer
Dim decPart As Integer
pos = InStr(1, r.Value, ",")
If pos > 0 Then
intPart = Left(r.Value, pos - 1)
decPart = Right(r.Value, Len(r.Value) - pos)
Else
intPart = r.Value
decPart = "00"
End If
formatCurrency = Right("00000000000" & intPart, 11) & "," & Left$(decPart & "00", 2)
End Function
Private Function formatComponent(offset As Integer) As String
Dim r As Range
Set r = ActiveCell.offset(0, offset)
Dim pos As Integer
Dim intPart As Integer
pos = InStr(1, r.Value, ",")
If pos > 0 Then
intPart = Left(r.Value, pos - 1)
Else
intPart = r.Value
End If
formatComponent = Right("000" & intPart, 3)
End Function
Sv: Formatproblem Excel
Men det närmaste jag kommer ett "lyckat" resultat är att det skapas ytterligare ett blad som heter "Export", men excel hänger sig (inga felkoder eller frågor på vägen) och jag kan inte göra någonting, inte ens kontrollera vad som finns på export-bladet, eller ens markera en valfri cell.
Jag har cirka 20.000 rader i arket, blir det för ansträngande för excel?Sv:Formatproblem Excel
Koden bör fungera som en klump i "ThisWorkbook"
Felmeddelande borde du kunna få men spontant känns det som den fastnar i loopen. sätt en brytpunkt på raden "ActiveCell.offset(1, 0).Activate" (stå på raden och tryck F9) därefter kan du stega dig fram (F8) för att se vart det går på tok.