向下舍入 NOW() 函数以在 VLOOKUP 中使用

Rounding down NOW() function for use in VLOOKUP

提问人:Mike T 提问时间:10/17/2023 最后编辑:Mike T 更新时间:10/17/2023 访问量:99

问:

enter image description here早上好。今天早上有一个快速的问题供你思考,这个问题的答案对某些人来说可能很容易......但对我来说,我无法理解,呵呵

因此,我从 api.open-meteo.com 中提取了一些数据,只是一些按小时划分的天气数据,如图所示。我想使用右侧的数据(即正在进行的 HUD)在 HUD 显示屏上分离显示当前小时和当前时间后 8 小时的数据。右边的时间需要像你想象的那样是动态的,当前小时是 8 点之后。

我使用 floor 方法将第一个“时间”四舍五入为小时,然后使用公式为每列添加一个小时:

=FLOOR(NOW(),"1:00")
=N1+(1*(1/24))
=O1+(1*(1/24))

主要问题是我不能将 VLOOKUP 与上述公式一起使用,因为出于某种原因它不起作用,即使我输入一个公式,它就会变成真的。=N1=A10

有什么想法可以解决吗?更喜欢只有单元格公式的简单设置,但如果需要,我不介意潜入 VBA 领域!

有什么想法吗?

https://temp-file-share.web.app/d/egJUZfM2tW

Excel VBA vlookup

评论

0赞 Darren Bartrup-Cook 10/17/2023
您使用的 VLOOKUP 公式是什么?
0赞 Mike T 10/17/2023
蓝色的顶行是:=$AD$3 & VLOOKUP(N1,$A$2:$H$49,2,0) - =$AD$3 & VLOOKUP(O1,$A$2:$H$49,2,0) - =$AD$3 &VLOOKUP(P1,$A$2:$H$49,2,0)等等。因此,它会拉出温度图标,然后显示温度
0赞 user10186832 10/17/2023
Excel VBA 生成 Markdown 表...davetallett26.github.io/excel-markdown.html
0赞 FaneDuru 10/17/2023
N1 中到底有什么?查看您的图片并假设您在 N1 中,09 的当前日期与第一列中的数据不匹配。在第 10 届看起来是 08 年......
0赞 Mike T 10/17/2023
N1 是公式 =FLOOR(NOW(),“1:00”) 只给我当前日期/小时到当前小时

答:

1赞 FaneDuru 10/17/2023 #1

请使用下一个更新的代码。它将格式化必要的范围,使公式低于范围“N1:AB1”以匹配导入的数据:

Sub openWeather()
  Const url As String = "https://api.open-meteo.com/v1/forecast?latitude=53.288&longitude=-1.2881&hourly=temperature_2m,precipitation_probability,precipitation,rain,snowfall,windspeed_10m,winddirection_10m,windgusts_10m,is_day&windspeed_unit=mph&forecast_days=1"
  Dim json As Object, ws As Worksheet, dataSet As Long, currRow As Long
  
  Set ws = ThisWorkbook.Sheets("Sheet1")
  currRow = 2
  
  With CreateObject("MSXML2.XMLHTTP.6.0")
    .Open "GET", url, False
    .send
    
    If .Status = 200 Then
      Set json = JsonConverter.ParseJson(.responseText)
      Application.Calculation = xlCalculationManual: Application.EnableEvents = False
       For dataSet = 1 To json("hourly")("time").Count
        ws.Cells(currRow, 1) = Replace(json("hourly")("time")(dataSet), "T", " ")               'timestamp
        ws.Cells(currRow, 2) = json("hourly")("temperature_2m")(dataSet)                        'temp
        ws.Cells(currRow, 3) = json("hourly")("precipitation")(dataSet)                         'rain
        ws.Cells(currRow, 4) = json("hourly")("snowfall")(dataSet)                              'snow
        ws.Cells(currRow, 5) = json("hourly")("precipitation_probability")(dataSet)             'probability
        ws.Cells(currRow, 6) = json("hourly")("windspeed_10m")(dataSet)                         'speed
        ws.Cells(currRow, 7) = json("hourly")("winddirection_10m")(dataSet)                     'direction
        ws.Cells(currRow, 8) = json("hourly")("is_day")(dataSet)                                'day / night
        currRow = currRow + 1
       Next dataSet
      Application.Calculation = xlCalculationAutomatic: Application.EnableEvents = True
    Else
      MsgBox "Page not loaded. HTTP status: " & .Status
    End If
  End With
  
  For Each cel In ws.Range("G2:G" & ws.Cells(Rows.Count, "G").End(xlUp).Row + 1).Cells


  Next cel
  
  processRangeForVlookup ws, False 'it creates the appropriate range in N1:AB1
End Sub

Sub processRangeForVlookup(ws As Worksheet, Optional boolChangeDate As Boolean = False)
 Dim rngD As Range
 'Create the necessary range to be compared:
 ' first cell to contain local time/local hour:
 ws.Range("N1").Formula = Evaluate("=FLOOR(now(), """ & Format(Hour(Now), "00") & ":00"")")
 ws.Range("O1").Formula = "=N1+(1*(1/24))": ws.Range("P1").Formula = "=O1+(1*(1/24))"
 ws.Range("O1:P1").AutoFill Destination:=ws.Range("O1:AB1")
 Set rngD = ws.Range("N1:AB1")
 With rngD
    .NumberFormat = "dd/mm/yyyy hh:mm"
    .Value = .Value
    .EntireColumn.AutoFit
 End With
 If boolChangeDate Then 'to change the date at midnight as the following one.
    Dim i As Long
    For i = 1 To rngD.Columns.Count
    If Hour(rngD.Cells(1, i).Value) = 0 Then
        rngD.Cells(1, i).Value = Int(rngD.Cells(1, i).Value) + 1
    End If
  Next i
 End If
End Sub

请在测试后发送一些反馈。

评论

0赞 FaneDuru 10/17/2023
@Mike T 您可以从此处下载更新的工作簿。
0赞 Mike T 10/17/2023
代码非常适合使 VLOOKUP 工作,而且确实如此!我从来没有想过整个 .value=.value....天才!然而,一个问题是使用该公式,出于某种原因,00:00(以今天为例)将自己设置为 17/10/2023 00:00,而不是 18/10/2023 00:00。因此,如果这有意义的话,每小时的流量会跳回一天的开始,只有那一个小时。上传了一张图片,以防万一我解释得有点奇怪 imgur.com/a/lfEFpFB
0赞 Mike T 10/17/2023
此外,我必须将 FLOOR 公式意义更新为“1:00”,以便第一个值根据当前小时而变化
0赞 FaneDuru 10/17/2023
@Mike T 看起来这就是 Windows 解释一天中第一个小时的方式。我的意思是,作为现有一天的最后一天。我想,我们可以欺骗它,如果你认为这样做会更好。我的意思是在小时为“00”时在日期上添加一天,但是您是否检查了“是否”网站如何处理这方面?如果它确实像你(和我)认为的那样正常,我想我可以调查这个问题并找到解决方案......
0赞 FaneDuru 10/17/2023
@Mike T 请清楚地解释哪个是第一个日期/小时,我会尝试为午夜过关的情况找到解决方案......