<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yeraldin Mueses</title>
    <description>The latest articles on DEV Community by Yeraldin Mueses (@yeraldinmueses).</description>
    <link>https://dev.to/yeraldinmueses</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4099577%2F72afa4a2-a68b-4250-a672-ba07bafd051a.png</url>
      <title>DEV Community: Yeraldin Mueses</title>
      <link>https://dev.to/yeraldinmueses</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yeraldinmueses"/>
    <language>en</language>
    <item>
      <title>How to Merge Several Excel or CSV Files and Remove Duplicates (Keeping the Latest Row)</title>
      <dc:creator>Yeraldin Mueses</dc:creator>
      <pubDate>Tue, 20 Oct 2026 13:09:05 +0000</pubDate>
      <link>https://dev.to/yeraldinmueses/how-to-merge-several-excel-or-csv-files-and-remove-duplicates-keeping-the-latest-row-4ejb</link>
      <guid>https://dev.to/yeraldinmueses/how-to-merge-several-excel-or-csv-files-and-remove-duplicates-keeping-the-latest-row-4ejb</guid>
      <description>&lt;p&gt;You have three monthly exports (&lt;code&gt;jan.csv&lt;/code&gt;, &lt;code&gt;feb.csv&lt;/code&gt;, &lt;code&gt;mar.csv&lt;/code&gt;) with the same columns, and you need one clean list. The same customer shows up in more than one file, sometimes as an exact copy and sometimes with a newer plan or status. You want &lt;strong&gt;one row per customer, and it should be the latest one&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'll use this sample data throughout. Each file has the columns &lt;strong&gt;Email, Name, Plan, Updated&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Email&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Updated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="mailto:ana@x.com"&gt;ana@x.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ana&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;2024-01-05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="mailto:bo@x.com"&gt;bo@x.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bo&lt;/td&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;2024-01-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="mailto:ANA@x.com"&gt;ANA@x.com&lt;/a&gt;␣&lt;/td&gt;
&lt;td&gt;Ana&lt;/td&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;2024-02-03&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="mailto:bo@x.com"&gt;bo@x.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bo&lt;/td&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;2024-01-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="mailto:ana@x.com"&gt;ana@x.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ana&lt;/td&gt;
&lt;td&gt;Team&lt;/td&gt;
&lt;td&gt;2024-03-14&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(␣ is a trailing space. It's there because real exports often have one.)&lt;/p&gt;

&lt;p&gt;The right answer is one row for Ana (Team, March 14) and one for Bo.&lt;/p&gt;

&lt;p&gt;Before you start, make sure &lt;strong&gt;Updated is a real date&lt;/strong&gt;, not text. If &lt;code&gt;=ISNUMBER(D2)&lt;/code&gt; returns FALSE, fix the dates first, or "latest" will be computed on text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Clean the key
&lt;/h2&gt;

&lt;p&gt;Duplicates are matched on a key, here the email. &lt;code&gt;ANA@x.com&lt;/code&gt; and &lt;code&gt;ana@x.com&lt;/code&gt; are the same person but not the same text. If you're using formulas, add a helper column &lt;strong&gt;Key&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LOWER(TRIM(A2))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works the same in Excel and Google Sheets. Power Query does the same thing with its own menus (see below).&lt;/p&gt;

&lt;h2&gt;
  
  
  Option A: Power Query (Excel, best for files you get every month)
&lt;/h2&gt;

&lt;p&gt;Power Query is built into Excel 2016 and later on Windows and into Microsoft 365 for Mac. "From Folder" support on Mac depends on your version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combine the files&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put all the files in one folder, with the same column headers in each.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data → Get Data → From File → From Folder&lt;/strong&gt;, pick the folder, and click &lt;strong&gt;Combine → Combine &amp;amp; Transform Data&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pick the sample file or sheet when asked and click &lt;strong&gt;OK&lt;/strong&gt;. You get one stacked table, plus a &lt;em&gt;Source.Name&lt;/em&gt; column showing which file each row came from.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Clean the key&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the &lt;strong&gt;Email&lt;/strong&gt; column, then &lt;strong&gt;Transform → Format → Trim&lt;/strong&gt;, then &lt;strong&gt;Transform → Format → lowercase&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Make sure &lt;strong&gt;Updated&lt;/strong&gt; has the calendar (date) type icon. If not, right-click it and choose &lt;strong&gt;Change Type → Date&lt;/strong&gt;, or &lt;strong&gt;Using Locale…&lt;/strong&gt; for DD/MM data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Keep the latest row per email&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the Updated column's filter arrow and choose &lt;strong&gt;Sort Descending&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Email&lt;/strong&gt; column and choose &lt;strong&gt;Home → Remove Rows → Remove Duplicates&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's a known catch here. Power Query doesn't promise to keep your sort order when it removes duplicates, so on large data it can sometimes keep an older row. To fix it, look at the formula bar for the Remove Duplicates step. It will look something like this (your step name may differ):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight q"&gt;&lt;code&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Table.Distinct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="s"&gt;"Sorted Rows"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight q"&gt;&lt;code&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Table.Distinct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Table.Buffer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="s"&gt;"Sorted Rows"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Table.Buffer&lt;/code&gt; locks in the sorted order before duplicates are removed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Close &amp;amp; Load&lt;/strong&gt;. Next month, drop the new file into the folder and click &lt;strong&gt;Refresh&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Option B: Formulas (Excel 365 or Google Sheets)
&lt;/h2&gt;

&lt;p&gt;First, stack the files onto one tab. You can paste each file's data under the previous one on a tab called &lt;strong&gt;All&lt;/strong&gt;. Or use a formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Excel 365 / Excel 2024:   =VSTACK(Jan!A2:D200, Feb!A2:D200, Mar!A2:D200)
Google Sheets:            ={Jan!A2:D200; Feb!A2:D200; Mar!A2:D200}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blank rows at the bottom of each range get stacked too, so the formulas below filter them out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remove exact duplicates only&lt;/strong&gt; (rows identical in every column):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=UNIQUE(FILTER(All!A2:D500, All!A2:A500&amp;lt;&amp;gt;""))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;UNIQUE&lt;/code&gt; and &lt;code&gt;FILTER&lt;/code&gt; need Excel 365 or Excel 2021 or later. Google Sheets has both. Note that exact matching treats &lt;code&gt;ANA@x.com&lt;/code&gt; and &lt;code&gt;ana@x.com&lt;/code&gt; as different rows, which is why the next formula is usually what you want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep the latest row per email (Excel 365):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LET(r, FILTER(All!A2:D500, All!A2:A500&amp;lt;&amp;gt;""),
     d, SORT(r, 4, -1),
     k, LOWER(TRIM(INDEX(d, 0, 1))),
     FILTER(d, XMATCH(k, k) = SEQUENCE(ROWS(d))))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt; is the stacked data without blank rows.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;d&lt;/code&gt; sorts it by column 4 (Updated), newest first.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;k&lt;/code&gt; is the cleaned email for each sorted row.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;XMATCH(k, k)&lt;/code&gt; gives, for each row, the position of the &lt;strong&gt;first&lt;/strong&gt; row with the same email. A row is kept only if that position equals its own row number. That means it's the first, and therefore newest, row for that email.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Google Sheets version.&lt;/strong&gt; It's the same logic. &lt;code&gt;SORT&lt;/code&gt; takes &lt;code&gt;FALSE&lt;/code&gt; for descending, and wrapping the formula in &lt;code&gt;ARRAYFORMULA&lt;/code&gt; makes sure &lt;code&gt;LOWER&lt;/code&gt; and &lt;code&gt;TRIM&lt;/code&gt; run on the whole column:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=ARRAYFORMULA(LET(r, FILTER(All!A2:D500, All!A2:A500&amp;lt;&amp;gt;""),
     d, SORT(r, 4, FALSE),
     k, LOWER(TRIM(INDEX(d, 0, 1))),
     FILTER(d, XMATCH(k, k) = SEQUENCE(ROWS(d)))))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;LET&lt;/code&gt;, &lt;code&gt;XMATCH&lt;/code&gt; and &lt;code&gt;SORT&lt;/code&gt; need Excel 365 or Excel 2021 or later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option C: No dynamic arrays (Excel 2019 and earlier, or if you prefer clicking)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sort, then Remove Duplicates.&lt;/strong&gt; Excel's &lt;em&gt;Remove Duplicates&lt;/em&gt; keeps the &lt;strong&gt;first&lt;/strong&gt; row it finds and deletes the ones below it, so sort first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add the &lt;strong&gt;Key&lt;/strong&gt; helper column (&lt;code&gt;=LOWER(TRIM(A2))&lt;/code&gt;), then copy it and &lt;strong&gt;Paste Special → Values&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data → Sort&lt;/strong&gt;: sort by &lt;strong&gt;Updated&lt;/strong&gt;, &lt;strong&gt;Newest to Oldest&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data → Remove Duplicates&lt;/strong&gt;, uncheck everything except &lt;strong&gt;Key&lt;/strong&gt;, and click &lt;strong&gt;OK&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Google Sheets has the same thing under &lt;strong&gt;Data → Data cleanup → Remove duplicates&lt;/strong&gt;. Sort by Updated (Z→A) first, and tick only the Key column.&lt;/p&gt;

&lt;p&gt;Work on a copy, because this deletes rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lookup approach (Excel 2021+, or 2019 with the INDEX/MATCH variant).&lt;/strong&gt; On a summary tab, put each unique key in column A, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;B2:  =MAXIFS(All!$D$2:$D$500, All!$E$2:$E$500, A2)
C2:  =XLOOKUP(1, (All!$E$2:$E$500=A2)*(All!$D$2:$D$500=B2), All!$C$2:$C$500, "not found")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here column E on the All tab is the Key helper column. &lt;code&gt;B2&lt;/code&gt; finds the newest date for that key, and &lt;code&gt;C2&lt;/code&gt; returns the Plan from the row with that key &lt;em&gt;and&lt;/em&gt; that date. &lt;code&gt;MAXIFS&lt;/code&gt; needs Excel 2019 or later. In Excel 2019, replace &lt;code&gt;XLOOKUP&lt;/code&gt; with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=INDEX(All!$C$2:$C$500, MATCH(1, (All!$E$2:$E$500=A2)*(All!$D$2:$D$500=B2), 0))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Excel 2019 and earlier, enter it with &lt;strong&gt;Ctrl+Shift+Enter&lt;/strong&gt;. Google Sheets has &lt;code&gt;MAXIFS&lt;/code&gt; and &lt;code&gt;XLOOKUP&lt;/code&gt; too.&lt;/p&gt;

&lt;p&gt;If two rows share the same key and the same newest date, every method here keeps just one of them. Check those rows by hand if they can disagree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the result
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=ROWS(UNIQUE(FILTER(All!E2:E500, All!E2:E500&amp;lt;&amp;gt;"")))   → number of distinct keys
=SUMPRODUCT(--(COUNTIF(A2:A100, A2:A100)&amp;gt;1))          → in your result: rows whose key appears more than once (want 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number of result rows should equal the number of distinct keys, and the second check should be 0. Spot-check two or three people against the original files.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I tested
&lt;/h2&gt;

&lt;p&gt;I built three small sheets in LibreOffice Calc (headless) with the cases above: an exact duplicate (Bo), a later row with different case and a trailing space (Ana), and a later plan change (Cy). Then I checked the formulas against the results computed separately in Python (pandas: sort by date, drop duplicates on the cleaned key, keep first):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;LET&lt;/code&gt; / &lt;code&gt;SORT&lt;/code&gt; / &lt;code&gt;XMATCH&lt;/code&gt; formula returned exactly 4 rows (Ana: Team, Bo: Pro, Cy: Pro, Dee: Basic). That matched pandas.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;UNIQUE(FILTER(…))&lt;/code&gt; removed only the exact Bo duplicate (8 rows → 7).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MAXIFS&lt;/code&gt; + &lt;code&gt;XLOOKUP&lt;/code&gt; and the &lt;code&gt;INDEX&lt;/code&gt;/&lt;code&gt;MATCH&lt;/code&gt; version returned the latest plan for every key.&lt;/li&gt;
&lt;li&gt;Both check formulas returned the expected values (4 keys, 0 repeats).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I could &lt;strong&gt;not&lt;/strong&gt; test &lt;code&gt;VSTACK&lt;/code&gt;, the Google Sheets &lt;code&gt;{…;…}&lt;/code&gt; stacking, the &lt;code&gt;ARRAYFORMULA&lt;/code&gt; Sheets version or the Power Query steps (including &lt;code&gt;Table.Buffer&lt;/code&gt;), because they need real Excel or Google Sheets. They're written to the documented syntax. Check them on a copy first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I run Spreadsheet Fix in 48h, a paid service. If you'd rather hand it off, prices start at $29 for one tab of formula fixes. A multi-file merge like this one is usually the $129 Custom option, with scope confirmed first. Either way, you get a full refund if it's not back in 48h: &lt;a href="https://yeraldinmueses.gumroad.com/l/spreadsheet-fix" rel="noopener noreferrer"&gt;https://yeraldinmueses.gumroad.com/l/spreadsheet-fix&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. If your files don't line up neatly (different column names, extra columns), ask in the comments.&lt;/p&gt;

&lt;p&gt;Yeraldin&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Drafted with AI assistance; formulas tested in LibreOffice Calc as described above.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>excel</category>
      <category>googlesheets</category>
      <category>tutorial</category>
      <category>datacleaning</category>
    </item>
    <item>
      <title>How to Fix Mixed-Format Dates in Excel and Google Sheets (DD/MM vs MM/DD, Text Dates)</title>
      <dc:creator>Yeraldin Mueses</dc:creator>
      <pubDate>Tue, 20 Oct 2026 13:08:35 +0000</pubDate>
      <link>https://dev.to/yeraldinmueses/how-to-fix-mixed-format-dates-in-excel-and-google-sheets-ddmm-vs-mmdd-text-dates-2nfg</link>
      <guid>https://dev.to/yeraldinmueses/how-to-fix-mixed-format-dates-in-excel-and-google-sheets-ddmm-vs-mmdd-text-dates-2nfg</guid>
      <description>&lt;p&gt;You open a CSV that someone exported from a UK or European system, and the date column is a mess. Some cells are right-aligned, some are left-aligned. &lt;code&gt;15/04/2024&lt;/code&gt; sits there as text. &lt;code&gt;03/04/2024&lt;/code&gt; looks fine but is now &lt;strong&gt;March 4&lt;/strong&gt; instead of &lt;strong&gt;April 3&lt;/strong&gt;. Sorting and filtering are broken, and a pivot by month is wrong without any warning.&lt;/p&gt;

&lt;p&gt;Here's what happened and how to fix it in Excel and Google Sheets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this happens
&lt;/h2&gt;

&lt;p&gt;The file was written in &lt;strong&gt;DD/MM/YYYY&lt;/strong&gt; order, and your spreadsheet runs in a &lt;strong&gt;MM/DD/YYYY&lt;/strong&gt; locale (for example, US English). When the file opens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any value where the day is 12 or less, like &lt;code&gt;03/04/2024&lt;/code&gt;, &lt;em&gt;looks&lt;/em&gt; like a valid US date, so it gets converted to a real date with day and month &lt;strong&gt;swapped&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Any value where the day is over 12, like &lt;code&gt;15/04/2024&lt;/code&gt;, can't be a US date, so it stays &lt;strong&gt;text&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So one column can hold wrong real dates and unconverted text at the same time. Changing the cell format won't fix either kind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 0: Diagnose the column
&lt;/h2&gt;

&lt;p&gt;Real dates are numbers underneath. Put this next to your data (assume dates are in column A, starting in row 2):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=ISNUMBER(A2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;TRUE&lt;/code&gt; means it's a real date (possibly swapped). &lt;code&gt;FALSE&lt;/code&gt; means it's text. This works the same in Excel and Google Sheets.&lt;/p&gt;

&lt;p&gt;If every cell is &lt;code&gt;FALSE&lt;/code&gt; (all text), skip to the Text to Columns or Power Query options. They're cleaner. The formula below handles the mixed case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: The formula fix (mixed real and text dates)
&lt;/h2&gt;

&lt;p&gt;This formula assumes the &lt;strong&gt;original data was DD/MM/YYYY with a 4-digit year&lt;/strong&gt;, and that every real-date cell in the column got there by the swap described above. In a helper column B:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(ISNUMBER(A2),
    DATE(YEAR(A2), DAY(A2), MONTH(A2)),
    DATE(RIGHT(A2,4),
         MID(A2, FIND("/",A2)+1, FIND("/",A2,FIND("/",A2)+1)-FIND("/",A2)-1),
         LEFT(A2, FIND("/",A2)-1)))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If the cell is a real (swapped) date:&lt;/strong&gt; it rebuilds the date with day and month switched back. &lt;code&gt;DATE(year, month, day)&lt;/code&gt; takes the old &lt;em&gt;day&lt;/em&gt; as the month and the old &lt;em&gt;month&lt;/em&gt; as the day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If the cell is text:&lt;/strong&gt; it splits on the slashes. &lt;code&gt;LEFT&lt;/code&gt; up to the first &lt;code&gt;/&lt;/code&gt; is the day, &lt;code&gt;MID&lt;/code&gt; between the two slashes is the month, and &lt;code&gt;RIGHT(…,4)&lt;/code&gt; is the year. Using &lt;code&gt;FIND&lt;/code&gt; instead of fixed positions means &lt;code&gt;1/2/2024&lt;/code&gt; and &lt;code&gt;01/02/2024&lt;/code&gt; both work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fill it down, format column B as a date (I suggest &lt;code&gt;yyyy-mm-dd&lt;/code&gt; so nothing is ambiguous), then copy column B and &lt;strong&gt;Paste Special → Values&lt;/strong&gt; over the original if you want to replace it.&lt;/p&gt;

&lt;p&gt;This works as written in Excel (any modern version) and Google Sheets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Excel 365 / Google Sheets tidier version for an all-text column&lt;/strong&gt; using &lt;code&gt;LET&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LET(s, A2,
     a, FIND("/", s),
     b, FIND("/", s, a+1),
     DATE(RIGHT(s,4), MID(s, a+1, b-a-1), LEFT(s, a-1)))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;LET&lt;/code&gt; needs Excel 365 or Excel 2021 or later. Google Sheets supports it too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch out:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't use the swap branch if some real dates in the column were already correct, for example typed in by hand. The formula can't tell them apart, and you'd swap good dates. In that case, re-import the source file (Option 2 or 3).&lt;/li&gt;
&lt;li&gt;If your text uses &lt;code&gt;-&lt;/code&gt; or &lt;code&gt;.&lt;/code&gt; instead of &lt;code&gt;/&lt;/code&gt;, use &lt;code&gt;SUBSTITUTE(A2,"-","/")&lt;/code&gt; in place of &lt;code&gt;A2&lt;/code&gt;, or change the &lt;code&gt;FIND&lt;/code&gt; character.&lt;/li&gt;
&lt;li&gt;Two-digit years (&lt;code&gt;03/04/24&lt;/code&gt;) need &lt;code&gt;2000+RIGHT(A2,2)&lt;/code&gt; instead of &lt;code&gt;RIGHT(A2,4)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why not just DATEVALUE?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;DATEVALUE&lt;/code&gt; converts text to a date &lt;strong&gt;using your current locale&lt;/strong&gt;. In a US-locale workbook, &lt;code&gt;DATEVALUE("15/04/2024")&lt;/code&gt; returns &lt;code&gt;#VALUE!&lt;/code&gt;, and &lt;code&gt;DATEVALUE("03/04/2024")&lt;/code&gt; gives you March 4, which is the same wrong answer. It's useful when the text is already in your locale's order or in ISO format (&lt;code&gt;2024-04-15&lt;/code&gt;), but it can't fix DD/MM text in an MM/DD workbook.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Google Sheets&lt;/strong&gt; you can get around this. Go to &lt;strong&gt;File → Settings → Locale&lt;/strong&gt;, set it to a DD/MM country like United Kingdom, and &lt;code&gt;=DATEVALUE(A2)&lt;/code&gt; will read text cells as DD/MM. The locale change doesn't fix cells that were already converted wrongly, so you still need the swap branch for those.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: Text to Columns (Excel, when the column is all text)
&lt;/h2&gt;

&lt;p&gt;If the column is still all text (for example, you imported it with the column set to Text), Excel's built-in converter is quick:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the date column.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data → Text to Columns&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Delimited&lt;/strong&gt;, click &lt;strong&gt;Next&lt;/strong&gt;, uncheck all the delimiters, and click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;em&gt;Column data format&lt;/em&gt;, choose &lt;strong&gt;Date&lt;/strong&gt; and pick &lt;strong&gt;DMY&lt;/strong&gt; from the dropdown.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Finish&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Excel reads each text value as day-month-year and turns it into a real date. Use it on text cells. Cells that were already converted into swapped real dates still need the formula.&lt;/p&gt;

&lt;p&gt;Google Sheets' &lt;em&gt;Data → Split text to columns&lt;/em&gt; has no DMY option. Use the locale and &lt;code&gt;DATEVALUE&lt;/code&gt; approach, or the formula above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: Power Query (Excel, the best fix if you still have the original file)
&lt;/h2&gt;

&lt;p&gt;The cleanest fix is to stop Excel from guessing in the first place:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data → Get Data → From File → From Text/CSV&lt;/strong&gt;, and pick the original file.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Transform Data&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Right-click the date column header and choose &lt;strong&gt;Change Type → Using Locale…&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Set &lt;em&gt;Data Type&lt;/em&gt; to &lt;strong&gt;Date&lt;/strong&gt; and &lt;em&gt;Locale&lt;/em&gt; to the source country (for example, &lt;strong&gt;English (United Kingdom)&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;, then &lt;strong&gt;Close &amp;amp; Load&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Power Query reads the raw text with the rules you chose, so nothing gets swapped. Next month, drop in the new file and click &lt;strong&gt;Refresh&lt;/strong&gt;. Power Query is built into Excel 2016 and later on Windows and into Microsoft 365 for Mac. Older Windows versions need the free add-in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Check your results
&lt;/h2&gt;

&lt;p&gt;Don't trust it until you've checked it. With the fixed dates in column B:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=COUNT(B2:B500)                         → how many real dates you have
=COUNTA(A2:A500)                        → how many non-blank source cells
=SUMPRODUCT((A2:A500&amp;lt;&amp;gt;"")*NOT(ISNUMBER(B2:B500)))  → filled rows that still are NOT real dates (want 0)
=TEXT(MIN(B2:B500),"yyyy-mm-dd")        → earliest date: does it make sense?
=TEXT(MAX(B2:B500),"yyyy-mm-dd")        → latest date: does it make sense?
=COUNTIF(B2:B500,"&amp;gt;"&amp;amp;TODAY())           → any dates in the future?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first two numbers should match, and the third should be 0. A minimum or maximum that's way off, or unexpected future dates, usually means some rows went through the wrong branch.&lt;/p&gt;

&lt;p&gt;One more thing no formula can solve: if the source mixed DD/MM &lt;em&gt;and&lt;/em&gt; MM/DD rows, a value like &lt;code&gt;03/04/2024&lt;/code&gt; really is ambiguous. To see how many rows could go either way, count the fixed dates where the day is 12 or less:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SUMPRODUCT(--(DAY(B2:B500)&amp;lt;=12))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For those rows, check another column (an invoice number, the order of entries, the source system) or ask whoever exported the file.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I tested
&lt;/h2&gt;

&lt;p&gt;I built a sample column in LibreOffice Calc (headless, en-US locale) with the same mix you get from a DD/MM file opened in a US locale. It had &lt;code&gt;03/04/2024&lt;/code&gt;, &lt;code&gt;1/2/2024&lt;/code&gt;, &lt;code&gt;12/11/2024&lt;/code&gt;, &lt;code&gt;9/10/2023&lt;/code&gt; and &lt;code&gt;05/06/2024&lt;/code&gt; stored as swapped real dates, and &lt;code&gt;15/04/2024&lt;/code&gt;, &lt;code&gt;31/12/2023&lt;/code&gt; and &lt;code&gt;28/02/2024&lt;/code&gt; left as text. The main formula returned the correct date for all 8 rows. The &lt;code&gt;LET&lt;/code&gt; version and the text-only branch also got all 8 right, and the check formulas returned the expected counts. I couldn't test the Excel Text to Columns or Power Query steps or Google Sheets itself here, so those steps follow the standard menus. If a menu name differs in your version, look for the same option nearby.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I run Spreadsheet Fix in 48h, a paid service. If you'd rather hand it off, fixing a date column like this on one tab is the $29 Fix option. You get a full refund if it's not back in 48h: &lt;a href="https://yeraldinmueses.gumroad.com/l/spreadsheet-fix" rel="noopener noreferrer"&gt;https://yeraldinmueses.gumroad.com/l/spreadsheet-fix&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. Questions or edge cases are welcome in the comments.&lt;/p&gt;

&lt;p&gt;Yeraldin&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Drafted with AI assistance; formulas tested in LibreOffice Calc as described above.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>excel</category>
      <category>googlesheets</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Your quarterly estimate is a lie if you key off invoice date</title>
      <dc:creator>Yeraldin Mueses</dc:creator>
      <pubDate>Wed, 02 Sep 2026 16:35:46 +0000</pubDate>
      <link>https://dev.to/yeraldinmueses/your-quarterly-estimate-is-a-lie-if-you-key-off-invoice-date-408k</link>
      <guid>https://dev.to/yeraldinmueses/your-quarterly-estimate-is-a-lie-if-you-key-off-invoice-date-408k</guid>
      <description>&lt;p&gt;Q3 federal estimates are due &lt;strong&gt;Tuesday, September 15, 2026&lt;/strong&gt;. If you add up invoices you &lt;em&gt;sent&lt;/em&gt; in June–August, you will under- or over-pay, because 1099 income is cash-basis: March invoice, April payment = Q2.&lt;/p&gt;

&lt;p&gt;This is a checklist, not tax advice. It will not tell you what you owe. Not a penalty guarantee. Not affiliated with the IRS. CPA if income jumped, S-corp, or multi-state.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 10-minute log
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open a sheet. Three columns: client, &lt;strong&gt;payment date&lt;/strong&gt;, amount.&lt;/li&gt;
&lt;li&gt;Drop every deposit that actually cleared Jun 1–Aug 31. Ignore "they said they'd pay."&lt;/li&gt;
&lt;li&gt;Subtract expenses you can document. No receipt, don't invent it.&lt;/li&gt;
&lt;li&gt;Park a set-aside out of checking. A common 1099 starting point is 25–35% of net — yours may be different.&lt;/li&gt;
&lt;li&gt;Pay via IRS Direct Pay or EFTPS. Screenshot the confirmation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you already paid 100% of last year's total tax (Form 1040 Line 24) split across four dates, you may be in safe harbor even if 2026 is bigger (110% if AGI was over $150k). Year one off W-2: ignore last year and park the set-aside the day each deposit clears.&lt;/p&gt;

&lt;h2&gt;
  
  
  If this still lives in 14 Google Docs
&lt;/h2&gt;

&lt;p&gt;Pipeline, invoices, and the quarterly worksheet belong in one place you open every week. I packed that into a $29 Freelance Ops Pack (Sheets OS + invoice PDF + quarterly worksheet): &lt;a href="https://yeraldinmueses.gumroad.com/l/letldi" rel="noopener noreferrer"&gt;https://yeraldinmueses.gumroad.com/l/letldi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comment &lt;strong&gt;RITUAL&lt;/strong&gt; if you want the Sep 15 checklist as a one-pager.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>productivity</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>The 20-minute ritual I run the week before a 1099 estimated-tax due date</title>
      <dc:creator>Yeraldin Mueses</dc:creator>
      <pubDate>Fri, 28 Aug 2026 23:15:35 +0000</pubDate>
      <link>https://dev.to/yeraldinmueses/the-20-minute-ritual-i-run-the-week-before-a-1099-estimated-tax-due-date-27ih</link>
      <guid>https://dev.to/yeraldinmueses/the-20-minute-ritual-i-run-the-week-before-a-1099-estimated-tax-due-date-27ih</guid>
      <description>&lt;p&gt;Q3 federal estimates are due &lt;strong&gt;Tuesday, September 15, 2026&lt;/strong&gt;. This is the quarter that nails people because Q2 was only two months.&lt;/p&gt;

&lt;p&gt;This is a checklist, not tax advice. It will not tell you what you owe. It is not a penalty guarantee. If income jumped, you have an S-corp, or you are multi-state, talk to a CPA before you pay. Not affiliated with the IRS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do this the week before Sep 15
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List what actually hit your account Jun 1–Aug 31.&lt;/strong&gt; Client payments only. Ignore "they said they'd pay."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subtract expenses you can document&lt;/strong&gt; (software, contractors, ads, a real home-office % if you already use one). If you don't have the receipt, don't invent it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move a set-aside out of checking.&lt;/strong&gt; A common starting point for 1099s is 25–35% of net. Yours may be different. If the money stays in checking, you will spend it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay the IRS&lt;/strong&gt; via &lt;a href="https://www.irs.gov/payments/direct-pay" rel="noopener noreferrer"&gt;Direct Pay&lt;/a&gt; or EFTPS. Screenshot the confirmation. Put it in a folder named &lt;code&gt;taxes-2026&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your state.&lt;/strong&gt; NY, CA, and others often want their own estimate. This post does not calculate that.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The cash-basis trap
&lt;/h2&gt;

&lt;p&gt;A 1099 invoice log has to be cash-basis or your quarterly estimate is a lie: March invoice, April payment = Q2 income. Key the quarter off &lt;em&gt;payment date&lt;/em&gt;, not invoice date.&lt;/p&gt;

&lt;p&gt;If you already paid 100% of last year's total tax (Form 1040 Line 24) split across four dates, you may be in safe harbor even if 2026 is bigger (110% if AGI was over $150k). If this is year one off W-2, ignore last year and park a set-aside the day each deposit clears.&lt;/p&gt;

&lt;h2&gt;
  
  
  If this still lives in 14 Google Docs
&lt;/h2&gt;

&lt;p&gt;That's the whole problem. Pipeline, invoices, and this quarterly worksheet belong in one place you open every week — not the night before a due date.&lt;/p&gt;

&lt;p&gt;I packed that into a $29 Freelance Ops Pack (Sheets OS + invoice PDF + the quarterly worksheet): &lt;a href="https://yeraldinmueses.gumroad.com/l/letldi" rel="noopener noreferrer"&gt;https://yeraldinmueses.gumroad.com/l/letldi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comment &lt;strong&gt;RITUAL&lt;/strong&gt; if you want the checklist as a standalone one-pager and I'll send it.&lt;/p&gt;

</description>
      <category>freelancing</category>
      <category>productivity</category>
      <category>career</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
