excel - VBA transponded Values 没有被 Excel 识别
问题描述
所以我有一个 VBA 宏,可以让我像用户窗体一样使用单元格。
它的基本作用是,它采用Values
已定义的Range("E2:E11")
并将它们转置到下一个 BlankRow。
因此,用户可以轻松生成一个范围从C16:L100
VBA 代码如下所示:
Sub NeuesKFZ()
Dim sh As Worksheet, arr, lastERow As Long, matchCel As Range
Set sh = ActiveSheet
arr = sh.Range("E2:E11").Value
lastERow = sh.Range("C" & sh.Rows.Count).End(xlUp).Row + 1
If Range("E2") = "" Then
MsgBox "Wählen Sie ein KFZ aus!"
Range("E2").Select
Exit Sub
End If
If lastERow < 16 Then lastERow = 16
'check if the range has not been already copied:
Set matchCel = sh.Range("C16:C" & lastERow - 1).Find(WHAT:=sh.Range("E2").Value, LookIn:=xlValues, Lookat:=xlWhole, MatchCase:=False)
If Not matchCel Is Nothing Then
If MsgBox(sh.Range("E2").Value & " Existiert bereits " & vbCrLf & "Sollen die Daten aktualisiert werden?", vbYesNo) = vbYes Then
sh.Range("C" & matchCel.Row).Resize(1, UBound(arr)).Value = Application.Transpose(arr)
End If
sh.Range("E2:E11").ClearContents
Exit Sub
End If
sh.Range("C" & lastERow).Resize(1, UBound(arr)).Value = Application.Transpose(arr)
sh.Range("E2:E11").ClearContents
End Sub
我现在的问题是 excel 似乎不知道什么样的内容values
被转置到新的单元格中。
就我而言,我正在使用 Dates,我想知道一个日期是否在接下来的三个月内。但 Excel 无法识别它正在使用日期值。尝试格式化或删除所有格式都无济于事。
当我尝试使用这个公式时:
=if(and(C16>=$AA16$,C16<=$AB$17),TRUE,FALSE)
一些解释:
C16
是由宏转置的值。
AA16
和AB16
是开始日期和结束日期。
TRUE
并且FALSE
只是给我反馈是否有效。
它只是给了我FALSE
所有的时间。
有没有办法让日期转置,以便 Excel 仍然知道它是一个日期?或者也许强制 Excel 将这些值作为日期处理。
解决方案
转置列
- 我想我在某处读到除了大小限制之外,
Transpose
“不喜欢”日期。无论如何,对您的代码进行以下更正并将函数复制到工作簿的标准模块中。
更正
- 替换
arr = sh.Range("E2:E11").Value
为arr = GetRowData(sh.Range("E2:E11"))
。 - 替换
sh.Range("C" & matchCel.Row).Resize(1, UBound(arr)).Value = Application.Transpose(arr)
为sh.Range("C" & matchCel.Row).Resize(1, UBound(arr, 2)).Value = arr
。 - 替换
sh.Range("C" & lastERow).Resize(1, UBound(arr)).Value = Application.Transpose(arr)
为sh.Range("C" & lastERow).Resize(1, UBound(arr, 2)).Value = arr
功能
Function GetRowData( _
ByVal ColumnRange As Range) _
As Variant
If ColumnRange Is Nothing Then Exit Function
With ColumnRange.Columns(1)
Dim rCount As Long: rCount = .Rows.Count
Dim rData As Variant
If rCount = 1 Then
ReDim rData(1 To 1, 1 To 1): rData(1, 1) = .Value
Else
Dim cData As Variant: cData = .Value
ReDim rData(1 To 1, 1 To rCount)
Dim r As Long
For r = 1 To rCount
rData(1, r) = cData(r, 1)
Next r
End If
GetRowData = rData
End With
End Function
编辑
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose: Returns a 2D one-based one-row array containing the values
' from a one-column range.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetRowFromColumn( _
ByVal ColumnRange As Range) _
As Variant
If ColumnRange Is Nothing Then Exit Function
With ColumnRange.Columns(1)
Dim rCount As Long: rCount = .Rows.Count
Dim rData As Variant
If rCount = 1 Then
ReDim rData(1 To 1, 1 To 1): rData(1, 1) = .Value
Else
Dim cData As Variant: cData = .Value
ReDim rData(1 To 1, 1 To rCount)
Dim r As Long
For r = 1 To rCount
rData(1, r) = cData(r, 1)
Next r
End If
GetRowFromColumn = rData
End With
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Purpose: Returns a 2D one-based one-column array containing the values
' from a one-row range.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function GetColumnFromRow( _
ByVal RowRange As Range) _
As Variant
If RowRange Is Nothing Then Exit Function
With RowRange.Rows(1)
Dim cCount As Long: cCount = .Columns.Count
Dim cData As Variant
If cCount = 1 Then
ReDim cData(1 To 1, 1 To 1): cData(1, 1) = .Value
Else
Dim rData As Variant: rData = .Value
ReDim cData(1 To cCount, 1 To 1)
Dim c As Long
For c = 1 To cCount
cData(c, 1) = rData(1, c)
Next c
End If
GetColumnFromRow = cData
End With
End Function
推荐阅读
- java - 组合:容器可以在没有其包含的对象之一的情况下存在吗?爪哇
- python - 在列表 2 中垂直添加具有相同标题的 list1
- javascript - 错误未捕获类型错误:无法读取未定义的属性“0”。艾克灯箱
- c# - 将 json 反序列化为 FHIR 约会实例时遇到问题
- tensorflow - 为多系列建模 LSTM 时的问题
- sql-server - Powershell - SQL 数据库显示用户权限
- c# - Emug cv C# 最小阈值截断
- ios - 应用重启后仅由 EnvironmentObject 更新的视图
- c# - 如何从巨大的 CSV 文件 (20Gb) C# ASP.NET 中搜索数据
- laravel - Laravel 方法分页不存在尝试控制器