Avatar billede vegaz Juniormester
18. marts 2015 - 19:03 Der er 11 kommentarer og
1 løsning

Hjælp til replace = Chr(34)

Hej eksperter

Når jeg kører makroen som jeg har postet længere nede, så får jeg egentlig et næsten perfekt output på mit data. MEN! Da jeg kører med nogle dataheaders, så bliver der lavet ufatteligt mange gåseøjne og kommaer, da den laver for hver kolonne.
Det betyder at jeg får følgende som egentlig skal slettes (altså replaces med intet):
,"","","","","","","","","","","","","","","","","","",""

Derudover skal følgende replaces så " forsvinder:
Altså skal "{ blive til { og ligeledes med }" skal blive til }

Håber én af jer kan hjælpe med begge eller i det mindste det ene :)


' Export CSV file with double delimiter
Sub CSVFile()
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant

FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = Application.International(xlListSeparator)
  If Selection.Cells.Count > 1 Then
    Set SrcRg = Selection
  Else
    Set SrcRg = ActiveSheet.UsedRange
  End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
  CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
  CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
  CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
' ,"","","","","","","","","","","","","","","","","","","" <-- 19 ""
'CurrTextStr = Replace(linje, "," + Chr(34) + Chr(34), "")
' CurrTextStr = Replace(linje, "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34) + "," + Chr(34) + Chr(34), "")
Close #1
End Sub
Avatar billede vegaz Juniormester
18. marts 2015 - 19:04 #1
Det skal lige tilføjes at der er 19 kolonner, ved ikke om det har betydning.
Avatar billede jens48 Ekspert
18. marts 2015 - 20:12 #2
Den del af makroen der skal fjerne citationstegnene kunne se sådan ud:

Sub CSVFile()
Dim SrcRg, CurrRow, CurrCell As Range
Dim CurrTextStr, ListSep As String
Dim FName As Variant

'FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = Application.International(xlListSeparator)
  If Selection.Cells.Count > 1 Then
    Set SrcRg = Selection
  Else
    Set SrcRg = ActiveSheet.UsedRange
  End If
For Each CurrCell In SrcRg
CurrCell.Replace What:="""", Replacement:=""
Next
End Sub
Avatar billede vegaz Juniormester
18. marts 2015 - 20:30 #3
Hej Jens

Tak for dit svar.
Jeg går ud fra What:="""" skal ændres til at replace ,""" (altså ",""")? Er det korrekt forstået?
Avatar billede cht22 Guru
18. marts 2015 - 20:57 #4
vegaz jeg tror du misforstår det. For at vælge hvad der skal erstattes så skal der " omkring før og " omkring efter. For at vælge at det er " der skal erstattes skal der skrives "". Ellers bliver det forvekslet med start og slut.

For at vælge det skal erstattes med ingenting skrives der "".
Avatar billede jens48 Ekspert
18. marts 2015 - 21:08 #5
Nej, det skal være som jeg har skrevet det. Det er afprøvet og det fjerner alle citationstegn i det valgte eller aktive område
Avatar billede cht22 Guru
18. marts 2015 - 21:13 #6
Så er vi enige, så er det som jeg skrev også rigtigt.
Avatar billede vegaz Juniormester
18. marts 2015 - 21:29 #7
Hej cht og Jens

Det er jeg med på, men hvis jeg blot fjerner citationstegnene, så kommer der til at så 19 kommaer tilbage, dem vil jeg jo også gerne ha fjernet. Derfor jeg tænkte at ",""" ville fjerne det hele.
Avatar billede jens48 Ekspert
18. marts 2015 - 21:47 #8
Jeg har sat en ekstra linie ind:

Sub CSVFile()
Dim SrcRg, CurrRow, CurrCell As Range
Dim CurrTextStr, ListSep As String
Dim FName As Variant

'FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = Application.International(xlListSeparator)
  If Selection.Cells.Count > 1 Then
    Set SrcRg = Selection
  Else
    Set SrcRg = ActiveSheet.UsedRange
  End If
For Each CurrCell In SrcRg
CurrCell.Replace What:=(Chr(34) & Chr(44) & Chr(34)), Replacement:=""
CurrCell.Replace What:="""", Replacement:=""
Next
End Sub
Avatar billede vegaz Juniormester
19. marts 2015 - 10:07 #9
Hej Jens

Tak for dit forsøg. Jeg kan stadig ikke få det til at virke.

Jeg har prøvet at køre din kode:

For Each CurrCell In SrcRg
CurrCell.Replace What:=(Chr(34) & Chr(44) & Chr(34)), Replacement:=""
CurrCell.Replace What:="""", Replacement:=""
Next

forskellige steder, men det skal jo ske et sted mellem
Open FName For Output As #1
og
Close #1
Så den åbner denne fil og ændre tingene, tegnene er jo ikke synlige i Excel, da der er jo er en delimiter og comma separated.
Avatar billede jens48 Ekspert
19. marts 2015 - 10:47 #10
Hvis det er en CSV fil du åbner, skal du så ikke bruge Text to Columns før du begynder at erstatte? Hvis ja, så behøver du ikke erstatte kommaer, da de blot er adskillere.
Avatar billede vegaz Juniormester
19. marts 2015 - 11:29 #11
Det er en egentlig en .CIF (catalog) fil jeg skal lave.

Og jo, det har du nok helt ret i.

Jeg tror jeg har løst problemet ved at gå en helt anden vej og meget mere kompliceret vej, men det virker umiddelbart ret godt.

Jeg synes dog alligevel du skal have nogle point, for at ha hjulpet mig på vej. Så smid et svar? :) Og tak for hjælpen.
Avatar billede jens48 Ekspert
19. marts 2015 - 11:54 #12
Hvis jeg ledte dig på rette vej er her et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester