将奇数日期格式转换为数字

时间:2014-10-27 19:44:44

标签: excel vba import

我有一个VBA脚本,它从类似于这个页面的页面中提取数据:

http://www.basketball-reference.com/friv/dailyleaders.cgi?month=12&day=30&year=2013

问题在于它贴上" MP"字段进入Excel,它以一种奇怪的格式出现。例如,第一行以39:42显示Kevin Love,但在Excel中显示为15:42,当我点击它时,该值实际显示为1/1/1900 3:42:00 PM

我尝试更改导入的列的格式并重新导入,但它会得到相同的结果。

理想情况下,我希望它以39.66(39分40秒)的速度进入,但如果它只是以冒号的形式出现,我可以让它发挥作用。

非常感谢任何帮助!

编辑:这是我当前的代码,如果它有帮助:

Sub DailyImport()
'
' DailyImport Macro
'

'
Dim day As Integer
Dim month As Integer
Dim year As Integer
Dim indexD As Integer
Dim indexM As Integer
Dim indexY As Integer

day = 1
month = 10
year = 2013
NextRow = 1

    For indexY = year To 2014
        For indexM = month To 12
            For indexD = day To 31
            Range("A" & NextRow).Select
            With ActiveSheet.QueryTables.Add(Connection:= _
                "URL;http://www.basketball-reference.com/friv/dailyleaders.cgi?month=" & month & "&day=" & day & "&year=" & year & "" _
                , Destination:=Range("$A" & NextRow))
                .Name = "dailyleaders.cgi?month=" & month & "&day=" & day & "&year=" & year & "_1"
                .FieldNames = False
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = False
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = False
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .WebFormatting = xlWebFormattingNone
                .WebSelectionType = xlAllTables
                .WebPreFormattedTextToColumns = False
                .WebConsecutiveDelimitersAsOne = False
                .WebSingleBlockTextImport = False
                .WebDisableDateRecognition = True
                .WebDisableRedirections = False
                .Refresh BackgroundQuery:=False

            End With
            day = day + 1
            FirstRow = NextRow
            NextRow = Range("A" & Rows.Count).End(xlUp).Row + 1
            Range("AD" & FirstRow + 1, "AD" & NextRow) = month & "/" & day - 1 & "/" & year
            Next indexD
            month = month + 1
            day = 1
        Next indexM
        year = year + 1
        month = 1
        day = 1
    Next indexY

End Sub

2 个答案:

答案 0 :(得分:0)

代码:

Range.Formula = "=TIMEVALUE(""00:" & TimeValue & """)"

这会将时间保留为可用于计算的值。

答案 1 :(得分:0)

Excel以不幸的方式处理时间值。 “:”分开的数字是HH:MM [:ss],即使你更喜欢MM:SS。并且,导入后更改列的格式为时已晚。 因此,“39:42”被解释为24小时加上15小时:42分钟,这反过来被解释为下午3:42:00。 这就是你所看到的。

解决方案:

  1. 如果您可以控制CSV导出,也许可以将MP字段导出为'39:42(请注意开头撇号),这会导致Excel将其解释为字符串,稍后您可以使用该字符串进行解析相关的功能。到目前为止,这是最简单的解决方案,因为每个人都会受益。

  2. 如果保存CSV文件,则可以在Excel打开/导入期间控制列格式,将其更改为文本。点击数据标签>从文本按钮导入,然后遍历导入。

  3. 如果您无法控制导出,作为测试,我使用emacs替换([0-9] [0-9] :)和'\&amp ;.现在,我有'39:42。 (如果你不明白,请查看“正则表达式”。)当然,你可以使用像Perl这样的东西来编写变更脚本,如果这是常规的话。无论如何,改变你的表,并正常加载csv文件。