Just nu i M3-nätverket
Gå till innehåll
Mikael63

LÖST Snabbt söka och ersätta radbrytning med text?

Rekommendera Poster

Mikael63

I avdelningen "Världens lataste" funderar jag på om det finns ett ännu enklare och snabbare lösning än min nuvarande?

I urklipp har jag text som ex.

1
2
3

alltså text + radbrytning. (Källa är Excel)

Jag startar NoteTab Light eller annan likvärdig bra texteditor.

Väljer Search - Replace.

Fyller i att söka efter radbrytningen, som i denna editor motsvaras av ^P, och ersätta med texten {down}.

Ersätt alla, sök hela dokumentet, OK, markera allt, kopiera till urklipp.

Stänger editorn utan att spara.

Det jag skulle vilja snabba upp är att kunna ha sök ^P ersätt med {down} som en sparad fras att återanvända och den bör då vara förvald redan.

Egentligen behöver jag inte ens "se" vad som händer.

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Monshi

Tja då gillar jag Notepad++

 

eller installera cmder på Windows, där finns sed ;)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63
18 minuter sedan, skrev Monshi:

Notepad++

Minns den från gång till gång vad man sökt och vad man ersatt med?

Fördel webbsidan är att man inte behöver komma ihåg att det är ^P man ska söka efter.

 

Källan är som sagt i Excel och om man med ett makro skulle kunna ta alla värden, där värden finns, i kolumn A och knöla ihop dem, lägga till {down} och sedan lägga allt i urklipp så kan man hoppa över ett helt moment.

101
102
103
201
202
303

i Excel ska bli

101{down}102{down}103{down}201{down}202{down}303{down}

om man ex. klistrar in i ett textdokument.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_
=TEXTJOIN("{down}";;A:A)&"{down}"

 

Annars kanske en batscfil/kommandotolk 

https://stackoverflow.com/questions/60034/how-can-you-find-and-replace-text-in-a-file-using-the-windows-command-line-envir

powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt"

Sen behöver du bara lista ut hur Foo skall ändras till ^p  (?char 10?) och Bar till '{down}'

Ehh, och fixa så att du kan bestämma MyFile....

Det kanske är enklast att göra som du gör...

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

Hmm, märkvärdigt svårt att kopiera en text-variabel i Excel (om inte värdet ligger i en cell)

 

Nåja, det är väl bara att fuska och lägga in en hjälpcell som klipps bort när du kopierar

Range("AA1").Value = Application.WorksheetFunction.TextJoin("{down}", True, Range("A:A")) & "{down}"
Application.CutCopyMode = xlCut
Range("AA1").Copy

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63
Postad (redigerade)

Lösningen duger som den är och jag begriper var jag ändrar för att hämta värden från annan kolumn om det skulle vara så men OM man skulle vilja köra detta makro med markerade celler i stället?

"True" kanske kan utgå, jag gissar det är med för att bara ta värden där värden finns men det får man se till själv med markeringen.

"Range A.." blir det Range selection eller blir det bara selection?

Äh, jag testar lite själv, inledande text i första inlägget till trots ;)

 

ed.

Selection.Copy
Range("Z1").Select
ActiveSheet.Paste
Range("AA1").Value = Application.WorksheetFunction.TextJoin("{down}", True, Range("Z:Z")) & "{down}"
Application.CutCopyMode = xlCut
Range("AA1").Copy

 

Redigerad av Mikael63

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

Eller också är du lat på riktigt och använder "selection" direkt i formeln

 

Range("AA1").Value = Application.WorksheetFunction.TextJoin("{down}", True, Selection) & "{down}"
Application.CutCopyMode = xlCut
Range("AA1").Copy

 

Det är ju lite irriterande att man tvingas använda "AA1". Men om man Googlar så verkar alla metoder för att kopiera ett värde direkt till urklipp mycket krångligare.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63

Tack!

Det som är irriterande är att Excel tömmer Urklipp så snart något annat görs.

Hade Urklipp kunna behålla sitt innehåll hade man kunnat städa AA1 i samma makro, även om det inte gör något om det sparas något där.

 

Hm. det blev ju riktigt bra detta :D

 

Det som kopierats från AA1 ska sedan klistras in i en textfil som sedan AutoHotkey ska använda.

Som jag gör nu så klistrar jag in det i en befintlig fil, som jag har annat i, och efter en textsträng som "redan" innehåller

!^F5::Send, 

Här skulle man ju kunna tänka sig att makrot ser till att denna text kommer först så skulle man kunna klistra in på en "ny" rad.

Dock är inte detta någon större vits om man (=makrot) inte skulle göra på annat sätt i stil med:

Skapa filen C:\temp\filldown.ahk

Klistra in texten ovan + innehållet i AA1

Spara

Kör/"dubbelklicka"

(Här ligger då skriptet och väntar på tangentkombinationen Ctrl+Alt+F5 vilket motsvaras av !^F5)

 

Det kanske funkar men om man vill köra detta en vända till så "körs" redan skriptet och då måste man editera innehållet i C:\temp\filldown.ahk vilket också kan gå bra men för att nya värden ska kunna användas måste skriptet laddas om och det vet jag inte riktigt hur man kan göra "utifrån". Eller om man kan köra Kill på processen?

Makrot får då börja med att ta bort C:\temp\filldown.ahk så att en ny kan skapas, om man inte kan tvinga överskrivning.
Måste undersökas!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63
2021-01-07 15:58, skrev Mikael63:

Här skulle man ju kunna tänka sig att makrot ser till att denna text kommer först så skulle man kunna klistra in på en "ny" rad.

Dock är inte detta någon större vits om man (=makrot) inte skulle göra på annat sätt i stil med:

Skapa filen C:\temp\filldown.ahk

Klistra in texten ovan + innehållet i AA1

Spara

Kör/"dubbelklicka"

(Här ligger då skriptet och väntar på tangentkombinationen Ctrl+Alt+F5 vilket motsvaras av !^F5)

 

Det kanske funkar men om man vill köra detta en vända till så "körs" redan skriptet och då måste man editera innehållet i C:\temp\filldown.ahk vilket också kan gå bra men för att nya värden ska kunna användas måste skriptet laddas om och det vet jag inte riktigt hur man kan göra "utifrån". Eller om man kan köra Kill på processen?

Makrot får då börja med att ta bort C:\temp\filldown.ahk så att en ny kan skapas, om man inte kan tvinga överskrivning.
Måste undersökas!

Tänkte testa detta men det vill sig inte riktigt. Jag testar att spela in makro som öppnar en befintlig fil (får förutsätta att en sådan finns då) men redan nu skulle jag vilja öppna den utan "textimportguiden".

Men fortsätter med den, väljer endera alternativet, slutför.

Tar bort värden, ställer markören i A1, skriver egen text (kan får vara SEND fortsättningsvis) mellanslag, klistrar in det som finns i urklipp, enter, spara, stäng.

Det fungerar men i filen läggs det då till apostrof först och sist. Prövar jag att "spara som" blir det ett .txt i filnamnet.

Jag vill öppna, eller skapa, en fil som heter filldown.ahk.

 

Hur ska jag tänka här, egentligen?

 

Ed. Nä mitt inspelade makro visar bara den text jag hade i urklipp.

Jag skulle behöva, i cell A1 som väl blir första raden, första positionen i ett textdokument, skriva en text mellanslag och paste.

Alternativt kan filen öppnas som "mellanslagsseparerad" och A1 lämnas orörd, i B1 klistras värden in.

Äh, kanske för mycket jobb, jag "måste" även hitta ett sätt att ladda om skriptet..

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63

Har räknat ut att det är ett kommatecken som stökar till det.

Jag vill ju skriva

!^F5::Send,

i A1 och då blir resultatet i filen

"!^F5::Send,"

Skriver jag bara 

!^F5::Send

utan kommatecken blir resultatet

!^F5::Send

Hur ska jag få med kommatecknet utan att det skapas några snuffar?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

>Det som är irriterande är att Excel tömmer Urklipp så snart något annat görs

[windows]+v ?

 

Du tappade mig för ett bra tag sen...Men varför inte lägga till texten direkt i AA1 innan du kopierar?

 

Och sen spara AA1 till en textfil med hjälp av Open och Print

https://chandoo.org/wp/save-range-as-text-using-vba/

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/open-statement

 

Sub tjo()
Range("AA1").Value = Application.WorksheetFunction.TextJoin("{down}", True, Selection)
Range("AA1").Value = Range("AA1").Value & "{down}"
Range("AA1").Value = "!^F5::Send," & vbNewLine & Range("AA1").Value

Open "C:\temp\filldown.ahk" For Output As #1
    Print #1, Range("AA1").Value
Close #1
End Sub

 

Eller, om du inte skall använda klipp och klistra så behöver du ju inte mellanlanda i A1

Sub tjo()
Dim MinText As String
MinText = MinText
MinText = MinText & "{down}"
MinText = "!^F5::Send," & vbNewLine & MinText

Open "C:\temp\filldown.ahk" For Output As #1
    Print #1, MinText
Close #1
End Sub

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63
54 minuter sedan, skrev MH_:

innan du kopierar?

Jo, det skulle ju fungera

 

54 minuter sedan, skrev MH_:

inte mellanlanda

Nej, det behövs ju inte det var bara det att det fungerade så bra "fram dit". Jag har använt detta makro många gånger vi det här laget.

Nu när jag testar den första tjo() skrivs det nya rader vilket det inte gjorde i "original" men resultatfilen verkar bli bra. Dock stökar det ju till AA1 extra mycket.

 

När jag testar den andra tjo() fattas alla värden.

 

Testar att knåpa lite själv.

**

Ed.

Sub EditAhk()
Range("AA1").Value = Application.WorksheetFunction.TextJoin("{down}", True, Selection)
Range("AA1").Value = Range("AA1").Value & "{down}"
Range("AA1").Value = "!^F5::Send," & Range("AA1").Value

Open "C:\temp\filldown.ahk" For Output As #1
    Print #1, Range("AA1").Value
Close #1
Range("AA1").Delete
End Sub

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

Det är ju märkligt att man alltid snubblar över sina egna fötter

I andra skriptet skall rad3

MinText = MinText

naturligtvis vara

MinText =  Application.WorksheetFunction.TextJoin("{down}", True, Selection)

Men det har du väl redan listat ut

 

 

>>Nu när jag testar den första tjo() skrivs det nya rader vilket det inte gjorde i "original" men resultatfilen verkar bli bra. Dock stökar det ju till AA1 extra mycket.

Markera AA1

Ctrl+1, fliken justering, ta bort krysset för radbrytning

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63
9 minuter sedan, skrev MH_:

snubblar

Tack. Tror du postade detta i samma veva som jag redigerade mitt inlägg där jag hittat en lösning.

Men nu ser det skarpa makrot ut så här:

Sub EditAhk()
Dim MinText As String
MinText = Application.WorksheetFunction.TextJoin("{down}", True, Selection)
MinText = MinText & "{down}"
MinText = "!^F5::Send," & MinText

Open "C:\temp\filldown.ahk" For Output As #1
    Print #1, MinText
Close #1
End Sub

Tog bort newline bara.

 

Resultatfilen fungerar också bra att köra/trigga.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

 

18 minuter sedan, skrev Mikael63:

Tog bort newline bara.

Ok, sorry, då missförstod jag något du skrev om ny rad

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Mikael63

Ja, jag menade en ny rad som den enda nya raden, att den gamla skulle skrivas över.

Men bra att jag fick se hur man gjorde den biten, nu ser nämligen koden ut så här:

Sub EditAhk()
Dim MinText As String
MinText = Application.WorksheetFunction.TextJoin("{down}", True, Selection)
MinText = MinText & "{down}"
MinText = "!^F6::Reload" & vbNewLine & "!^F5::Send," & MinText

Open "C:\temp\filldown.ahk" For Output As #1
    Print #1, MinText
Close #1
End Sub

 

En sammanfattning/förklaring för nytillkomna lyssnare kanske:

Ovanstående kod ligger i arbetsboken Egna makron (Personal.xlsb) vilket gör att den är körbar oavsett vilken arbetsbok jag öppnar, även ny tom bok. Jag har kopplat en knapp till makrot, en knapp som finns i fältet Snabbåtkomst.

 

Från "applikation E" klipper jag ut värden som jag klistrar in i en ny arbetsbok.

Där sorterar jag och bearbetar jag dessa värden, sorterar sedan tillbaks till den ursprungliga sorteringen.

Det här är högst olika från gång till gång och går inte att automatisera mera.

 

När jag är klar markerar jag alla värden i den första kolumnen, den första jag vill ta tillbaks värden från.

Klickar på min knapp i Snabbåtkomst.

En fil skapas då enligt "Open" i koden ovan.

Den filen är "körbar" om man har installerat AutoHotkey.

Om jag inte redan har startat den gör jag det nu.

 

Sedan växlar jag tillbaks till "applikation E" igen och ser till att markören är på rätt position.

Sedan trycker jag Ctrl+Alt+F6 för att ladda om skriptet (behövs inte om man nyss startat det) och sedan trycker jag Ctrl+Alt+F5.

AutoHotkey ser då till att allt efter kommatecknet (efter Send) skrivs. {down} betyder pil-ner och markören hoppar då till nästa rad/cell i "applikation E".

(Pil-ner är snällare än ett enter-slag om det skulle vara så att jag kör detta på fel ställe, av misstag)

Behöver jag mata in ytterligare värden markerar jag annat område, klickar på knappen osv.

 

"applikation E" medger inte att man klistrar in något, inte mer än i en cell åt gången. Därav denna lösning, en lösning som underlättat många gånger för mig.

 

Tack än en gång @MH_

 

 

ps. Extra nice hade det ju varit om Excel skulle kunna skriva direkt till "applikation E" ;)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...