Indlæg

,

Diagrammer og VBA-koder styrer slægtsdata

Diagrammer og VBA-koder styrer slægtsdata

Lav diagrammer med ChatGPT

Diagrammer og VBA-koder styrer slægtsdata

Advarsel: Denne artikel er endog meget “nørdet”.

Jeg rydder stadig op i slægtsdata – og jeg er stadig fascineret af ChatGPT. I går blev jeg opmærksom på, at der findes mange gratis tilføjelsesprogrammer (plug-ins) til ChatGPT, og jeg installerede “Diagrams: Show Me”.

Lige nu har jeg den betalte version af ChatGPT, dvs. version 4. Om tilføjelsesprogrammerne også findes til ChatGPT version 3.5, er jeg ikke klar over.

For at styre oprydningen har jeg lavet en Excelfil.

Billederne i denne artikel er svære at se, med mindre du vha. CTRL + zoomer ind med din browser.

Diagrammer og VBA-koder styrer slægtsdata

Og for at finde på en både sjov og nyttig anvendelse af “Diagrams: Show Me”, besluttede jeg at bede ChatGPT lave et diagram over den samlede proces fra data i Legacy til markering af direkte aner i Excelfilen.

  • Måske kan du bruge nogle af ideerne og koderne?
  • Måske får du mod på selv at lege med ChatGPT?

Der er stort set intet af alt det nedenstående, jeg har lavet selv, for jeg kan ikke kode. ChatGPT har gjort det for mig, og jeg har bygget det op over et par måneder, når jeg har fået en ny idé til noget, der kunne være dejligt at få med. Læg mærke til, at ChatGPT er dygtig til at indsætte forklarende kommentarer i VBA-koden. Kommentarerne er de linjer, der starter med en “pling” – dvs. et enkelt anførselstegn: ‘

Det virkelig interessante er, at man kan skrive til ChatGPT, som var den et menneske. Man behøver ikke kende de rigtige termer, som man ville skulle, hvis man ville opbygge det ved at søge med Google. Hvis jeg var Google, ville jeg ryste i bukserne af skræk. De har lavet deres egen Artificial Intelligence-model (AI-model), som kaldes “Gemini”, men af forskellige årsager, vil det vare flere år, før den kommer til Europa. Så vidt jeg husker, skyldes det noget med “Gætte-Per” (GDPR).

Med Gemini sætter Google nu stort ind på at vippe ChatGPT, som indtil videre er førende inden for sprogmodeller, af pinden. Chatbotten, der er udviklet af firmaet Open Ai, fik på blot to måneder 100 millioner brugere, og slog dermed rekorden for flest nye brugere på kortest tid.

Kilde: dr.dk, 7. december 2023

Det får du retur

Du får et meget flot diagram og en beskrivelse af diagrammet med menneskeord.

Jeg synes, der mangler nogle trin i forhold til det, jeg bad om (se nederste afsnit “Her er hvad jeg skrev til ChatGPT”). Det skyldes formentlig, at jeg ikke har været tydelig nok i min beskrivelse. Det er jo trods alt bare en robot – og den kan ikke levere noget retur, som den ikke har fået input om. Det kan kun mennesker tænke sig til. Men det er jo nemt at øve sig i at blive mere tydelig i sin “kravspecifikation” og så simpelthen bare spørge en gang mere.

Menneskeordene følger her

sequenceDiagram
participant Legacy as “Legacy Software”
participant CSV as “CSV File (DirekteAner-2.csv)”
participant VBA as “VBA Macro (SplitNames)”
participant Excel as “Excel File (Gennemgang af slægtsfil.xlsm)”
participant Macro as “VBA Macro (MatchAndHighlight)”

Legacy->>CSV: 1) Start Legacy
Legacy->>CSV: 2) Vælg Fokusgruppe
Legacy->>CSV: 3) Søg, Forskelligt, Fokusgruppe
Legacy->>CSV: 4) Vælg ‘Aner’ i direkte linje
Legacy->>CSV: 5) Lav liste over direkte aner
Legacy->>CSV: 6) Vælg ‘Udskriv’
Legacy->>CSV: 7) Vælg ‘Kommasepareret fil’
Legacy->>CSV: 8) Klik ‘Opret’
Legacy->>CSV: 9) Gem som ‘DirekteAner-2.csv’

CSV->>VBA: Importer til Excel
VBA->>Excel: Kør ‘SplitNames’ makro
Excel->>VBA: Opdel navne i felter

VBA->>Excel: Kopier data til ‘Gennemgang af slægtsfil.xlsm’
Excel->>Macro: Placer data i kolonner B, C, D
Macro->>Excel: Kør ‘MatchAndHighlight’ makro
Excel->>Macro: Farv direkte aner gule
Macro->>Excel: Markér direkte aner med ‘Ja’

Her kommer diagrammet

Diagrammer og VBA-koder styrer slægtsdata

Her er hvad jeg skrev til ChatGPT

Jeg har fået fortalt af en ven, at det kan betale sig at “tale pænt” til robotten, så det gør jeg. Og jeg må sige, at jeg altid får pæne svar retur.

“Hej igen

Du er så dygtig til at lave diagrammer. Kan du lave et diagram over nedenstående? Jeg er i tvivl om, hvilken diagramtype, der er bedst, men jeg tror, at et procesdiagram vil være mest velegnet. Er du enig?

Diagrammet skal starte med følgende, som ikke står i VBA-koden, da det er fra et andet program, der hedder Legacy, som er et program til slægtsforskning.

1) Start Legacy
2) Vælg en “Fokusgruppe”, der rummer direkte aner
3) Det kan du gøre sådan:
3a) Søg
3b) Forskelligt
3c) Fokusgruppe
3d) Klik på knappen “Fokusgruppe” og i vinduet der, klikkes på knappen “Tilføj en person og aner”.
4) Der skal du så kun have markeret “Aner” i direkte linje (fjern eventuelle flueben nedenfor).
5) Nu har du lavet Fokusgruppen og kan klikke på knappen nederst “Lav liste”. Så har du en liste over de direkte aner
6) Vælg “Udskriv”
7) Sæt mærke i “Kommasepareret fil”
8) Klik “Opret”
9) Gem filen med navnet “DirekteAner-2.csv” (den kan selvfølgelig hedde alt muligt andet – så skal du bare selv konsekvensrette nede i makroens linje, hvor der står: Set ws = ThisWorkbook.Worksheets(“DirekteAner-2”)

Det første vi skal gøre med filen er at køre makroen “SplitNames”. Den sørger for at RIN-nr (Legacys ID-nr.), for- og mellemnavne og så efternavne står pænt i hvert sit felt, idet Legacy skriver det hele i ét felt, fx “1,Stegemüller, Hanne B.”. Det kan vi ikke bruge.
Koden er:

Option Explicit

Sub SplitNames()
Application.ScreenUpdating = True
Dim ws As Worksheet
Dim LastRow As Long
Dim i As Long
Dim ID As String
Dim FirstName As String
Dim LastName As String
Dim SplitEntry() As String
Dim Names As String

' Definer hvilket regneark du arbejder med
Set ws = ThisWorkbook.Worksheets("DirekteAner-2")

' Find sidste række med data i kolonne A
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

' Gennemgå alle rækker med data
For i = 1 To LastRow
' Først, rens cellen for anførselstegn
ws.Cells(i, "A").Value = Replace(ws.Cells(i, "A").Value, """", "")
' Split ID og navne-delen på komma
SplitEntry = Split(ws.Cells(i, "A"), ",", 2) ' Splitter kun ved det første komma

' Sørg for at der er et element at tildele til ID
If UBound(SplitEntry) >= 0 Then
ID = Trim(SplitEntry(0)) ' ID er altid til stede før det første komma
Else
ID = ""
End If

' Tjek om der er yderligere oplysninger udover ID
If UBound(SplitEntry) >= 1 Then
' Der er mere end bare et ID
Names = Trim(SplitEntry(1))
' Find sidste komma, som adskiller efternavn og fornavn
Dim LastComma As Integer
LastComma = InStrRev(Names, ",")
If LastComma > 0 Then
FirstName = Trim(Mid(Names, LastComma + 1))
LastName = Trim(Left(Names, LastComma - 1))
Else
' Hvis der ikke er et komma, antager vi at hele strengen er fornavnet
FirstName = Names
LastName = ""
End If
Else
' Hvis der ikke er yderligere information, er navnefelterne tomme
FirstName = ""
LastName = ""
End If

' Placer værdier i de ønskede celler
ws.Cells(i, "B").Value = ID
ws.Cells(i, "C").Value = FirstName
ws.Cells(i, "D").Value = LastName

' Tilføj dette for at se værdierne i det umiddelbare vindue
Debug.Print "Row: " & i & "; ID: " & ID & "; FirstName: " & FirstName & "; LastName: " & LastName
Next i

MsgBox "Navneopdeling fuldført!"
End Sub

Når navneopdelingen er fuldført, står data pænt i det rigtige felter. De skal kopieres ind i den anden fil, hvor du holder øje med, hvor langt du er nået med din gennemgang af slægtsdata. Den anden fil har jeg kaldt for “Gennemgang af slægtsfil.xlsm”. Det er vigtigt, at filen gemmes som typen .xlsm, for eller kan den ikke rumme makroen.

I “Gennemgang af slægtsfil.xlsm” skal du gøre følgende:

Placer data fra “DirekteAner-2” i kolonnerne B (ID-nummeret), C (for og mellemnavne) og D (Efternavn(e)).

I kolonne A skriver du bare ordet “Ja” foran alle navnene.

Kolonne E skal være tom for at skabe lidt overblik.
Kolonne F skal rumme Fornavn(e)
Kolonne G skal rumme Efternavn(e)
Kolonne H skal rumme RIN-nr., dvs. Legacys ID-nummer
Kolonne I skal rumme ordet “Ja”, hvis det er en direkte ane.

Er det ikke en direkte ane, skal du selv udfylde felterne F, G og H

Er det en direkte ane, skriver du ID-nummeret i kolonne H og kører makroen herunder. Den henter data fra kolonnerne A, B, C og D og farver felterne F, G, H og I gule, så det er nemt at se, at dette er en direkte ane.

Her er makroen, du skal køre – bemærk at fanen skal hedde “Ark1”.
Du kan kalde fanen noget andet, men så skal du konsekvensrette i koden, hvor der står “Set ws = ThisWorkbook.Worksheets(“Ark1″)”:

Sub MatchAndHighlight()

Dim ws As Worksheet
Dim rngToSearch As Range, rngToMatch As Range
Dim cell As Range, matchCell As Range
Dim matchFound As Boolean
Dim lastRow As Long

' Sæt arbejdsark
Set ws = ThisWorkbook.Worksheets("Ark1")

' Definer områderne for matchning
Set rngToSearch = ws.Range("H2:H" & ws.Cells(ws.Rows.Count, "H").End(xlUp).Row)
Set rngToMatch = ws.Range("B2:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)

' Nulstil farvning og "Ja"
lastRow = ws.Cells(ws.Rows.Count, "I").End(xlUp).Row
ws.Range("F2:I" & lastRow).Interior.Color = xlNone
ws.Range("I2:I" & lastRow).Value = ""

' Loop igennem hver celle i rngToSearch for at finde match i rngToMatch
For Each cell In rngToSearch
matchFound = False
If cell.Value <> "" Then
For Each matchCell In rngToMatch
If cell.Value = matchCell.Value Then
ws.Range("F" & cell.Row & ":I" & cell.Row).Interior.Color = vbYellow
ws.Cells(cell.Row, "I").Value = "Ja"
ws.Cells(cell.Row, "F").Value = ws.Cells(matchCell.Row, "C").Value ' Kopier fornavn
ws.Cells(cell.Row, "G").Value = ws.Cells(matchCell.Row, "D").Value ' Kopier efternavn
matchFound = True
Exit For
End If
Next matchCell

If Not matchFound Then
ws.Cells(cell.Row, "I").Value = ""
ws.Range("F" & cell.Row & ":I" & cell.Row).Interior.Color = xlNone
End If
End If
Next cell

MsgBox "Matchning fuldført!"

End Sub"

 


Har du kommentarer til artiklen?

Så er jeg glad for at modtage dem i relation til artiklen, dvs. i artiklens kommentarfelt herunder, ikke på Facebook og ikke via Messenger. Jeg svarer dig også relation til artiklen, ikke på Facebook og ikke via Messenger. Det skyldes, at kommentarer og artiklen jo ellers dekobles, og så er din kommentar ikke noget værd i fremtiden. Det er ærgerligt for os begge.

Hvis du ikke tidligere har kommenteret en af mine artikler her på siden, skal din kommentar først godkendes (spamhensyn). Min responstid er under normale omstændigheder meget kort. Herefter vil du stryge lige igennem.

Når slægterne mødes

En venlig medarbejder i journalarkivet

Min biologiske slægt møder adoptivslægten

Når slægterne mødesDet er helt vildt, og det sker vist ikke ret tit, at den biologiske slægt møder adoptivslægten, men et sådant pudsigt sammenfald har jeg fundet:

I disse dage roder jeg med direkte aner i min biologiske slægt. I januar 1904 (Maribo amt, Fuglse Herred, Rødby Sogn, 1903-1913, opslag 88 af 378 opslag), bliver Vilhelmine STOLLESEN (Født TØMMESEN) døbt af kapellan Sevaldsen. Hun er min biologiske oldemors brors første kone. Ægteskabet holder kun tre år, før de bliver skilt ved bevilling.

Kapellan Sevaldsen er lig Jens Christian SEVALDSEN (1870 – 1956), der i maj 1915 bliver provst for Vennebjerg Herred i Hjørring Amt og livet igennem fungerer som sognepræst for Hjørring Sogn.

Han hører til i min adoptivfamilie og slægtskabet er vist grafisk her.

Det er lidt langt ude 🙂 TNG fortæller: “Hanne B. STEGEMÜLLER er 3 x kusine 3 gange forskudt til hustru til Jens Christian SEVALDSEN”, men grafikken er egentlig ret flot.

Når man har to familier

Det er skønt at have to familier, man helt legalt kan arbejde med. Den eneste ulempe er, at i den biologiske familie har jeg kun de nøgne facts, som måske bliver lidt kedsommelige. Der er ingen fortællinger at verificere, billeder at nyde eller lignende.

,

300 år gamle detaljer i Odense

Så gik der tid med det…

Det er på ingen måde, fordi jeg keder mig. Faktisk har jeg været nødt til at lægge alle min projekter ind i en database, for ikke at gå glip af nogen af dem.

Jeg fik hul på et virkeligt ægte direkte anepar (tip fem oldeforældre i lige linje), der levede for ca. 300 år siden i Odense, og så gik der kirkebog i den. Det har været en herlig dag, hvor jeg har bragt dusinvis af detaljer på plads. Relationen er vist grafisk her. Det er Hans Pedersen Ærreboe og Wilhelmine Bertholin (det øverste par), der er de interessante.

Jeg har “kendt” dem i årevis, for de er nævnt i den slægtsbog, min morfar var med til at betale, og som jeg startede med at skrive af i 2003, men der var ingen detaljer med – kun navnene, og der var kun angivet et enkelt barn. Jeg har fundet sikre oplysninger om et til – Peder Hansen Bertholin og der er garanteret flere; alt andet ville være mærkeligt. Og det er sjusk.

Det har været udfordrende

At læse gotisk skal man holde vedlige, og da jeg har holdt pause en del år, er det som om, jeg skal løbes i gang igen. Men det skal nok komme. Vielsen mellem Hans Pedersen Ærreboe og hans 2. kone Bodil Jespersdatter Bolter var drilagtig. Og selv nu, hvor et af de dygtige medlemmer af Facebookgruppen, der hører til Danske Slægtsforskere, har transskriberet det meste for mig, synes jeg, man skal læse det et par gange, for at få det til at give mening.

De skrev lidt anderledes i 1738, men det er en af de indførsler, det er herligt at få fingre i.

Odense Amt, Odense, Odense – Sankt Hans, 1729-1756, EM, Fødte, Viede og Døde – opslag: 143 af 297 opslag

“No. 2. Copulerede d 1te Dec: 1738. Torsdagen den 23de Octobr. hafde hæderlige og velagtbare Mand Hans Pedersen hands Kongel. Maytets., Skoele Holder udi Hunderup Skoele Troelovelse med ærlige og Gudelskende Pige Bodil Jespersdatter Bolter. Forloverne vare for ham Jochim Henric Foss, og for hende Madz Jespersen Bolter. Og Vidner velbemeldte Forlovere, at indbemeldte mands tilstand for hands mange smaae og uopfødte Börn icke tillod ham længere at sid(d)e ugift.”

Der er heldigvis flere uløste mysterier til i morgen. Lige nu har jeg ikke hjerne til mere.

God nat!

,

Optimering

Personlig blog og hjemmeside i det hele taget