excel 为什么在将数组读入单元格时,数组的第一个元素的格式与其余元素不同?

tyky79it  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(104)

我希望你能帮我解决这个问题我有一个字符串数组,我用它来迭代地分别用它的每个值填充一列单元格,它从作为系统变量检索的当前Date开始,并向后跟踪,直到满足条件。
我遇到的问题是,数组第一个元素的格式与输出单元格中的其余元素不同,尽管它们位于相同的循环和目标列中。
错误输出为:

      • 二○二三年一月十三日**
  • 01/12/2023
  • 01/11/2023
  • 01/10/2023
  • 01/09/2023
  • 01/08/2023
  • 01/07/2023

但我期待的却是:

  • 01/13/2023
  • 01/12/2023
  • 01/11/2023
  • 01/10/2023
  • 01/09/2023
  • 01/08/2023
  • 01/07/2023

我的代码如下:

Dim element() As Variant
Dim Tday, counter, adjustment As Integer

Tday = 7
i = Tday

'Here i use "adjustment" to offset days (e.g. when its monday but i need to start Friday and backwards.)
'For simplicity's sake I'm hardcoding it at 3 for this question.
adjustment = 3

While i <> 0

        counter = Tday - i
        'I'm Dynamically Allocate array's size as needed
        ReDim Preserve element(counter)
        element(counter) = Format(Date - (counter + adjustment), "mm/dd/yyyy")
        i = i - 1

Wend

'SO Far the array is correctly formatted  but...

'HERE IS THE PROBLEM: Reading the values of the array and placing them into cells returns an unexpected format in its first iteration:

For i = LBound(element) To UBound(element)
    ThisWorkbook.Sheets(1).Range("A" & 1 + i) = Format(element(i), "mm/dd/yyyy")
Next i

正如您所注意到的,我之所以实现format函数,是因为我最终需要单元格是文本,并且采用指定的日期格式mm/dd/yyyy,因为这些将是高级过滤器的条件,高级过滤器将在源数据表中检索具有此类日期的记录。
我衷心感谢你的投入。
1.我已经尝试过将elements数组的类型更改为Date,但是这会直接在数组本身而不是在代码中导致意外行为(dd/mm/yyyy)。

  1. format函数第二次出现是因为它帮助我在给单元格分配数组中包含的值时保持所需的格式,唯一的例外是第一个值不会采用指定的日期格式。
c9qzyr3d

c9qzyr3d1#

如果需要,将单元格设置为文本格式。

Option Explicit
Sub macro1()

    Dim arDates() As String, i As Long
    Dim NoOfDays As Long, startday As Long
    
    NoOfDays = 7
    startday = 3 ' start wednesday
    
    ReDim arDates(1 To NoOfDays, 1 To 1)
    For i = 1 To NoOfDays
        arDates(i, 1) = Format(Date + 1 - startday - i, "mm/dd/yyyy")
    Next
    
    With ThisWorkbook.Sheets(1).Range("A1").Resize(NoOfDays)
       .NumberFormat = "@"
       .Value2 = arDates
    End With
    
End Sub
mtb9vblg

mtb9vblg2#

您的程序更改的是数组的格式,而不是单元格的格式,因此您需要更改单元格的格式:
将单元格作为文本的步骤

For i = LBound(element) To UBound(element)
        ThisWorkbook.Sheets(1).Range("A" & 1 + i).NumberFormat = "@"

    ThisWorkbook.Sheets(1).Range("A" & 1 + i).value = Format(element(i), "mm/dd/yyyy")
Next i

相关问题