Pat*_*ick 56 date microsoft-excel-2007 microsoft-excel microsoft-excel-2010
我在 Excel 中处理日期时经常遇到问题,我一定是做错了什么,但我不明白是什么。
我有一个从我们的交换服务器导出的电子表格,其中包含一个日期列。即使我在英国,它们也以美国格式出现。
有问题的列看起来像这样
04/08/2012
04/09/2009
04/01/2010
04/21/2011
04/05/2012
08/30/2009
08/29/2010
08/28/2011
Run Code Online (Sandbox Code Playgroud)
在 Excel 中,我突出显示了该列并选择了Format Cells.... 在此对话框中,我选择了Date, 选择English (United States)为区域设置并从列表中选择匹配的日期格式。我点击确定并尝试按此列对数据进行排序。
在我选择此列的排序对话框中,选择对值进行排序,但该顺序只为我提供了 A 到 Z 的选项,而不是我所期望的从最旧到最新的选项。
这反过来按前两位数字对日期数据进行排序。
我知道我可以将这些数据重新格式化为 ISO,然后 A 到 Z 排序可以工作,但我不应该这样做,我显然错过了一些东西。它是什么?
编辑:我搞砸了赏金,但这应该交给@r0berts回答,他的第一个建议是没有分隔符的文本到列,并选择“MDY”作为数据类型。此外,如果您有时间(即04/21/2015 18:34:22),则需要先删除时间数据。但是之后@r0berts建议的方法工作正常。
r0b*_*rts 90
问题: Excel 不想将日期识别为日期,即使通过“单元格格式 - 数字 - 自定义”您明确地试图通过“ mm/dd/yyyy”告诉它这些是日期。如你所知; 当 excel 将某些内容识别为日期时,它会将其进一步存储为数字 - 例如“ 41004”,但根据您指定的格式显示为日期。更令人困惑的是,excel 可能仅转换您的部分日期,例如 08/04/2009,而将其他日期(例如 07/28/2009)保留未转换。
解决方案:步骤 1,然后 2
1)选择日期列。在数据下选择按钮文本到列。在第一个屏幕上将单选按钮保留在“分隔”上,然后单击下一步。取消单击任何分隔符框(任何框为空;没有复选标记),然后单击下一步。在列数据格式下,选择日期并在相邻的组合框中选择MDY,然后单击完成。现在您获得了日期值(即 Excel 已将您的值识别为Date数据类型),但格式可能仍然是区域设置日期,而不是mm/dd/yyyy您想要的。
2)要正确显示所需的美国日期格式,您首先需要选择列(如果未选择),然后在单元格格式-数字下选择日期并选择区域设置:英语(美国)。这将为您提供类似“ m/d/yy”的格式。然后您可以选择自定义,然后您可以在那里输入“ mm/dd/yyyy”或从自定义字符串列表中选择它。
备选方案 0:使用 LibreOffice Calc。从 Patrick 的帖子中粘贴数据后,选择 Paste Special ( Ctrl+Shift+V) 并选择 Unformatted Text。这将打开“导入文本”对话框。字符集仍然是 Unicode,但语言选择英语(美国);您还应该选中“检测特殊号码”框。您的日期会立即以默认的美国格式显示并且可以按日期排序。如果您希望使用特殊的美国格式 MM/DD/YYYY,您需要通过“格式单元格”指定一次 - 在粘贴之前或之后。
有人可能会说 - 一旦我通过“单元格格式”告诉它,Excel 就应该识别日期,我完全同意。不幸的是,只有通过上面的第 1 步,我才能让 Excel 将这些文本字符串识别为日期。很明显,如果你经常这样做,脖子会很痛,你可以组合一个视觉基本例程,只需按一下按钮就可以为你做到这一点。它可以像 Excel 中的这个 VBA 代码一样简单:
Sub RemoveApostrophe()
For Each CurrentCell In Selection
If CurrentCell.HasFormula = False Then
CurrentCell.Formula = CurrentCell.Value
End If
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
备选方案 1:数据 | 文本到列
粘贴后更新前导撇号:您可以在公式栏中看到,在无法识别日期的单元格中有一个前导撇号。这意味着在格式化为数字(或日期)的单元格中有一个程序认为的文本字符串 - 您希望保留为文本字符串。您可以说 - 前导撇号会阻止电子表格识别数字。您需要知道为此在公式栏中查看 - 因为电子表格仅显示看起来像左对齐的数字。要处理此问题,请选择要更正的列,在菜单中选择Data | Text to Columns并单击确定。有时您将能够指定数据类型,但如果您之前已将列的格式设置为您的特定数据类型 - 您将不需要它。该命令实际上是为了使用分隔符将文本列分成两个或多个,但它也很适合解决这个问题。我已经在Libreoffice 中对其进行了测试,但Excel 中也有相同的菜单项。
备选方案 2:在 Libreoffice 中编辑替换
这是迄今为止最快和最好的方法,但据我所知,这在 MsOffice 中不起作用。Libreoffice Calc 可以选择使用正则表达式(又名正则表达式)进行搜索/替换- 您要做的是找到单元格并替换为自身,在此过程中 Calc 将数字重新识别为数字并去掉前导撇号。它的工作速度非常快。选择您的列。Ctrl-H打开查找替换对话框。选中“当前选择”和“使用正则表达式”。在查找框中输入^[0-9]- 这意味着“查找第一个位置有数字 0 到 9 的任何单元格”。在替换框中输入&- 这对于 libreoffice 意味着'for replacement use string you found in the search box'。点击Replace All- 并且您的价值观因数字而被认可。美妙之处在于 - 它适用于仅包含带有前导撇号的数字的单元格,没有别的 - 即它不会接触包含撇号 - 一个空格(或两个) - 然后是数字的单元格,或包含大写 O 而不是零或您想要手动更正的任何其他异常。
小智 15
选择所有列并转到“定位和替换”,然后将其替换"/"为/。
| 归档时间: |
|
| 查看次数: |
643875 次 |
| 最近记录: |