Tag Archive for: Slægt & Data

,

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.

Slægt & Data

Slægt & Data

Engang hed det “DIS-Danmark”

Slægt & Data

“DIS” betød “Databehandling i Slægtsforskning”, og det var en forening, der blev stiftet 21. maj 1987 af en arbejdsgruppe i “Samfundet for Dansk Genealogi og Personalhistorie”. Arbejdsgruppen skulle undersøge, om der var interesse for at danne en underafdeling, der beskæftigede sig med databehandling i slægtsforskningen. DIS-Danmark udgav det flotte blad “Slægt & Data”. Det er bemærkelsesværdigt, at redaktør Katrine Tobiasen stadig er ved roret bag bladet “Slægtsforskeren”.

Ak ja. Det var dengang, det hed EDB, jeg stadig var stud.jur. og der skulle bruges en 5¼” diskette for at starte en form for PC på Kriminalistisk Institut, hvor jeg var ansat som forskningsassistent. Det kan vi jo slet ikke forestille os i dag hvor vi sidder med en 1.000/100 forbindelse derhjemme. I mit første job i det hedengangne Arbejdsskadestyrelsen, var jeg i januar 1992 med til at sørge for, at alle medarbejdere fik en computer. Det krævede en særbevilling fra Finansministeriet.

I nogle år holdt jeg selv en ufrivillig pause fra slægtsforskningen grundet sygdom og det er lige gået op for mig, at en af pionererne Charlotte S. H. Jensen er afgået ved døden i 2019 kun 57 år gammel. Det må være, mens jeg pauserede, for det er nyt for mig. Ære være Charlottes minde. Hun gjorde noget fantastisk.

Jeg har altid været medlem. DIS-Danmark og senere Danske Slægtsforskere er en form for “fagforening” for mig, og det er ikke gratis at drive hjemmesiden, så selvfølgelig skal jeg være betalende medlem! Så har jeg det også bedre med at stille spørgsmål på foreningens Facebookside, hvor der blandt andet sidder sindssygt dygtige tydere, der træder til, hvor jeg må stå af.

Over årene er der sket en voldsom professionalisering, og det er godt. Hjemmesiden er blev super professionel. Enten er det tiden, der af sig selv har bevirket det, eller også skyldes det ihærdige ildsjæle, der har sagt til sig selv og hinanden at noget måtte ske.

Mine egne Slægt & Data

Jeg har genoptaget mit arbejde med at perfektionere og supplere data. Jeg kalder det for “Den store oprydning” og jeg startede i august i år. På et tidspunkt beregnede jeg, at det vil tage et par år, før jeg er igennem mine ikke en gang 5.000 personer.

Jeg tager simpelthen en person ad gangen og undersøger, om jeg kan tilføje og/eller rette nogle data. Det er mere data end slægt. Selvfølgelig ville det være sjovere at fortsætte med at finde nyt fremfor at rydde op. Men oprydningen bringer meget nyt med sig.

Det er fascinerende, hvor meget det er muligt at sidde hjemme og validere og supplere nu. Nu kan jeg gøre mange af mine personer “færdige”. Jens Andersen født 1783 er jo nok død, så selvfølgelig må jeg lede efter dødsfaldet. Det var nogenlunde nemt at få personer til at opstå via folketællingerne, der dog stadig var i deres vorden, på DDD.DDA. Nu opfatter jeg det som sjusket, at så gamle folk ikke også er fundet døde. Selvfølgelig er der nogle, jeg må opgive, men det er dog forholdsvis let at få mange slået ihjel = gjort “færdige”. Det lyder måske ikke så pænt, men jeg glæder mig over hvert enkelt dødsfald, for det betyder, at jeg har fået en person “gjort færdig”.

Og så vil jeg jo gerne fremstå som en seriøs slægtsforsker, så alle de “Husmænd”, jeg engang – grundet manglende erfaring – gjorde til “Gårdmænd”, må degraderes. For som Anton Blaabjerg skriver “Sådan er det jo. Vi må holde os til sandheden”.

Da jeg startede, for 20 år siden, var tiden på arkivet kostbar. Jeg var altid velforberedt og medbragte en prioriteret liste over det vigtigste at nå denne lørdag, denne afspadseringsdag eller denne feriedag. Det var noget stressende.

Det betyder, at Jens Andersens vielse ikke er med, det er ikke med, at konen gifter sig igen efter hans alt for tidlige død, det er ikke med, hvad der sker med næste ægtefælle osv. Det vil sige, at de nye personer kun medtages, hvis de skal “bruges til noget”. Jens Andersens ægtefælles næste vielse fortæller jo om hendes liv. Det er interessant at se på, hvor kort tid (ofte bare et par måneder) der gik mellem et dødsfald og så den næste vielse. Her er et meget godt eksempel på det med nye hustruer og deres nye ægtefæller.

Efter min død

Nu til dags kan slægt ikke adskilles fra data. Slægt er ganske enkelt lig data. Selv foretrækker jeg at publicere via min hjemmeside, fordi den er dynamisk. Det betyder bl.a., at jeg kan rette gamle fejl, uden at det uden videre bliver opdaget. Kopierer folk fra min side, er de velkomne, men er det deres eget ansvar, at det måske ser anderledes ud i næste uge.

Tre år efter jeg var begyndt at slægtsforske blev “min mor” 70 år og jeg forærede hende en slægtsbog på 300 sider, læderindbunden og med guldtryk. Det har været i 2005. Bladrer jeg i den nu, korser jeg mig – men der er også en del, der er okay. Alligevel er jeg stor tilhænger af online-medier. Jeg har nul slægtsforskning på papir. Papiret låser et øjebliksbillede, mens diverse online medier er dynamiske. Der kan man opdatere, så snart man bliver klogere.

Jeg har ingen arvinger, så min beslutning er, at min hjemmeside skal videreføres 50 år efter min død. Er der alligevel noget til overs, skyldes det, at jeg har regnet forkert.

Det er ikke, fordi jeg tror, jeg kan tilføre eftertiden noget sublimt, men at jeg alligevel har en formodning om, at mine dokumenterede fund vil kunne bringe andre en anelse videre.

Alle mine fund har vedhæftede kilder. Mange af dem er selvfølgelig henvisninger til tiden med mikrokort på arkivet og de mikrokort, jeg havde derhjemme ved mit eget mikrokortapparat. Jeg brugte tusindvis af kroner på kirkebøger på mikrokort. Nogle referencer ajourfører jeg. Andre må folk selv finde frem til efter gældende praksis.


Har du en mening om hjemmesiden?

Hvis du mener noget om hjemmesiden, kan du blive hørt her. Din IP-adresse vil blive gemt og cookies gemmes, hvis du tillader det. Tillader du det ikke, kan besvarelsen ikke indsendes.

Har du kommentarer til artiklen?

Så er jeg glad for at modtage dem i relation til artiklen, dvs. i artiklens kommentarfelt i bunden af denne side og ikke på Facebook. Jeg svarer dig også relation til artiklen og ikke på Facebook. 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 kort. Herefter vil du stryge lige igennem.