【问题标题】:Excel VBA - Grouping list of strings in one cellExcel VBA - 在一个单元格中分组字符串列表
【发布时间】:2017-05-11 17:01:45
【问题描述】:

我不知道如何最好地描述这一点,但我最好用图片来解释我的问题。

我有 2 个工作表:

在工作表数组中,有一定的句点与它们对应的“数组”相关联。

Sheet1中,有一个字符串列表,格式为:dd/mm/yyyy hh:mm:ss AM/PM - # 按数字升序排列,然后按日期排列,最后按时间。

我的代码通过提取 Array 中的数据并将它们列在一个单元格中,在 Sheet1 中生成这些值。我使用的代码是。

Sub Filter()
Const Array_FirstRow As Integer = 2 'Indicates the first row (row 2) in Array sheet
Dim Array_RowIndex As Integer 'variable to loop through array values of col A

Dim Summary_PeriodMoment1 As String 'in worksheet Sheet 1
Array_RowIndex = Array_FirstRow
Array_LastRow = Array_RowIndex - 1
Summary_PeriodMoment1 = ""

For Array_RowIndex = Array_FirstRow To Array_LastRow
  If Summary_PeriodMoment1 <> " " Then
  Summary_PeriodMoment1 = Summary_PeriodMoment1 & ", " & Worksheets("Array").Cells(Array_RowIndex, Array_DateTime_Column).Value
  End If
Next
Sheet1.Cells(1, 1).Value = Summary_PeriodMoment1
End Sub

这有点令人困惑,而且阅读起来过于复杂。有什么办法可以添加代码:

  1. 按# 对值进行排序/分组并按日期合并(以减少混乱)?喜欢吗?

  1. 每个值都有一个单独的单元格,再次按 # 分类(我想稍后使用其他代码将这些值绘制在透视图上,所以希望它采用友好的格式

基本上我想用 VBA 脚本重新格式化/转置一些数据。知道我应该使用哪些功能吗?谢谢!

++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++ 更新:我有在 one 单元格中转置一串值所需的东西。我想知道这是否可以对多个单元格进行。我尝试使用此代码:

 Sub TextToRows()
'Code for 1.2. section
Dim Arr As Variant
Dim Arr1 As Variant
Dim Arr2 As Variant
Dim InputRng As Range, InputRng2 As Range, InputRng3 As Range, OutputRng As Range, OutputRng1 As Range, OutputRng2 As Range

Set InputRng = Range("B1") 'Cell Containing all the text
Set InputRng1 = Range("B2")
Set InputRng2 = Range("B3")
Set OutputRng = Range("D1") 'First Cell of a column that you want the output there
Set OutputRng1 = Range("G1")
Set OutputRng2 = Range("J1")

Arr = Split(InputRng.Value, ",")
Arr1 = Split(InputRng.Value, ",")
Arr2 = Split(InputRng.Value, ",")

Set OutputRng = OutputRng.Resize(UBound(Arr) - LBound(Arr) + 1)
OutputRng.Value = Application.Transpose(Arr)

Set OutputRng1 = OutputRng1.Resize(UBound(Arr1) - LBound(Arr1) + 1)
OutputRng.Value = Application.Transpose(Arr1)

Set OutputRng2 = OutputRng2.Resize(UBound(Arr2) - LBound(Arr2) + 1)
OutputRng.Value = Application.Transpose(Arr2)

End Sub

似乎它只适用于 InputRng 而不是 InputRng1 或 InputRng2

【问题讨论】:

  • 转置是一种方式,能不能不修改生成数据的代码更友好?
  • B1 有多少条记录?超过16000?
  • 你试过什么?此外,您能否将数据样本复制/粘贴到帖子中,以便我们更轻松地重新创建您的问题并最终解决它?
  • 是的,有一种方法可以添加代码。您可以使用拆分功能,然后进行一些排序以使事物以正确的顺序排列。要将其全部排序到一个单元格中,一种方法是创建一个包含所有适用时间的# 的用户定义对象,然后根据需要重新创建显示。
  • 实现第一部分,然后玩弄问题的第二部分并向我们展示一些代码。因此,我们或许能够帮助您实现目标。

标签: vba excel


【解决方案1】:

1。 如何在一个单元格中拆分逗号分隔的数据? (往下看)

1.1。如果您没有任何其他数据,并且记录数不超过 excel 中可能的列数,则可以选择在工作表中进行转置(而不是使用下面的代码)。

1.2。 (如果您的数据超过 excel 列的限制):否则,您需要使用数组。下面的代码回答了您问题的第一部分。它会将单元格拆分为 "," 作为分隔符。

2。 然后,您可以在 Data 选项卡中使用 Text to Columns 和分隔符 ":" 来获取一列中的数字和另一列中的日期。

3。 使用How To Transpose Cells In One Column Based On Unique Values In Another Column? 根据数字对它们进行分组。

Sub TextToRows()
'Code for 1.2. section
Dim Arr As Variant
Dim InputRng As Range, OutputRng As Range

Set InputRng = Range("B1") 'Cell Containing all the text

Set OutputRng = Range("D1") 'First Cell of a column that you want the output there

Arr = Split(InputRng.Value, ",")

Set OutputRng = OutputRng.Resize(UBound(Arr) - LBound(Arr) + 1)
OutputRng.Value = Application.Transpose(Arr)

End Sub

【讨论】:

  • 谢谢,我会尝试第一部分并回复您。
  • @Urvil 更新了我的答案。现在它完全解决了你的问题。 (在样本数据上测试)
  • 嗨,Masoud,我已经尝试过了,到目前为止它有效!我的下一个问题是 - 如何让代码针对多个值运行?例如,我在 B1、B2 和 B2 中有一个字符串,我想将它们粘贴到单元格 D1、G1 和 H1 中。我尝试操纵代码,但无济于事(我的回复有更新的代码)。
  • @Urvil 我建议接受这个答案,并用这个代码发布另一个问题以及关于如何更新它的具体问题。您也可以参考这个问题作为记录。扩大问题的范围并不是 SO 的好方法,因为它在大多数情况下会导致没有得到答案,没有引起足够的关注等。Why you should accept an answer?
  • 感谢马苏德的建议。我在同一问题上发布更新后几秒钟才看到这条消息。我应该创建一个新问题还是这次可以?
猜你喜欢
  • 2017-11-30
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多