有一个非常简单的ListBox 1显示Sheet 5中的数据。沿着用于显示来自Sheet 5的数据的代码,是用于将数据保存到另一个工作表(Sheet 9)的代码。我的问题是,按照ListBox 1显示将数据放在正确的行和列上。
这是Sheet 5中ListBox 1显示的图像:
这是第5页的原始数据图像:
这是第5页的原始数据文本:
Month || Color || Time
August || Red || 0:00:12
August || Blue || 0:00:02
September || Blue || 0:00:03
October || Yellow || 0:01:00
October || Green || 0:00:10
这是Sheet 9的原始图像(ListBox 1数据保存到其中[临时-因为我有一个想要的Sheet 9输出]):
这是我的整个表单代码:
Option Explicit
Private Sub UserForm_Initialize()
With Worksheets("Sheet5")
Dim c As Range
Dim i As Long
For Each c In .Range("A2:A100")
With Me.ListBox1
.ColumnHeads = True
.ColumnCount = 3
.ColumnWidths = "75;75;75;75"
.AddItem
.List(i, 0) = c
.List(i, 1) = c.Offset(, 1)
.List(i, 2) = Format(c.Offset(, 2), "hh:mm:ss")
i = i + 1
End With
Next c
End With
Dim shT As Worksheet, cT As Range
Set shT = ThisWorkbook.Sheets("Sheet9")
Dim nT As Long
shT.Range("B2: M2").ClearContents
shT.Range("B3: M3").ClearContents
'shT.Range("B4: M4").ClearContents
'shT.Range("B5: M5").ClearContents
For nT = 1 To Me.ListBox1.ListCount - 1
'LOCATE
Set cT = shT.Range("1:1").Find(Me.ListBox1.List(nT, 0), , xlValues, xlWhole)
If Not cT Is Nothing Then
cT.Offset(1, 0).value = ListBox1.List(nT, 1)
cT.Offset(2, 0).value = ListBox1.List(nT, 2)
End If
Next nT
End Sub
这是我上面代码的当前结果。当列表框1中显示绿色标记时,不显示下面的红色标记。本工作表中的第1行和A列都是手动编码的。这不是我想要的Sheet 9输出。我只是显示我正在使用的代码的当前输出。
这是我想要的输出下面按照ListBox 1显示,这是可能的吗?如果是这样,那么应该在上面的代码中做什么修改,才能以这种方式在Sheet 9中保存?第1行和第A列仍然是手动编码的(换句话说,只有动态时间将根据ListBox 1中显示的正确月份和颜色保存在工作表中):
感谢你的评分
3条答案
按热度按时间3pvhb19x1#
Pivot数据
主要
帮助-列表框
The Help - Pivot
Application.Match
的“功能”替换为将月份和颜色写入字典,以便分别搜索列和行索引。5n0oy7gb2#
请试试下一条路。它使用数组,主要在内存中工作,即使在更大的范围内也很快:
w7t8yxp53#
试试看吧