Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从具有多行的单元格列生成列表_Excel_Vba_Office 2007 - Fatal编程技术网

Excel 从具有多行的单元格列生成列表

Excel 从具有多行的单元格列生成列表,excel,vba,office-2007,Excel,Vba,Office 2007,我有一个表,其中一列是item的属性。一个项目可以有多个属性,所有属性都存储在每个项目的一个单元格中,以单独的文本行显示。我想创建一个脚本,该脚本将列出我迄今为止使用过的所有属性类型,并将该列表保存在第二个工作表中。它可能无法通过标准公式实现,因此我假设需要使用VBA。我以前从未使用过VBA,也不知道如何完成这项任务。我也找不到这种语言的任何参考。我正在使用MS Office 2007 Sub export() Dim cell As Range Dim i As Long, j As Long

我有一个表,其中一列是item的属性。一个项目可以有多个属性,所有属性都存储在每个项目的一个单元格中,以单独的文本行显示。我想创建一个脚本,该脚本将列出我迄今为止使用过的所有属性类型,并将该列表保存在第二个工作表中。它可能无法通过标准公式实现,因此我假设需要使用VBA。我以前从未使用过VBA,也不知道如何完成这项任务。我也找不到这种语言的任何参考。我正在使用MS Office 2007

Sub export()
Dim cell As Range
Dim i As Long, j As Long
Dim var() As String
j = 1
For Each cell In Sheets(1).Range("a1:a10")
    Var = Split(cell, vbLf)
        For i = 0 To UBound(Var)
            Sheets(2).Range("a" & j).Value = Var(i)
            j = j + 1
        Next i    
Next cell
End Sub
我的示例循环sheet1中a1:a10范围内的所有单元格。让它适应你的需要。 每个单元格在换行时拆分,每行复制到第二张图纸中

我的示例循环sheet1中a1:a10范围内的所有单元格。让它适应你的需要。
每个单元格在换行符上拆分,每行复制到第二张工作表中。

这里是@nick rulez伟大答案的修改版本,它使用了dictionary对象,允许您排除所有重复项

Sub export()

Dim cell As range
Dim i As Long, j As Long
Dim var As Variant
Dim dictionary As Object
Set dictionary = CreateObject("scripting.dictionary")

On Error Resume Next
j = 1
For Each cell In Sheets(1).range("a1:a10")
    var = Split(cell, vbLf)
    For i = 0 To UBound(var)
        dictionary.Add var(i), 1
        j = j + 1
    Next i
Next

Sheet2.range("A1").Resize(dictionary.count).Value = _
Application.Transpose(dictionary.keys)

End Sub

工作原理:它与nick的功能相同,但不是将每个拆分条目写入sheet2,而是将条目添加到字典文件中。因为字典不允许有两个相同值的键,所以它会跳过重复(不过你需要在下一步错误恢复时使用)。Dictionary具有极酷的转置键数组的功能,因此在最后,我只需一步复制整个列表。

这里是@nick rulez伟大答案的修改版本,它使用Dictionary对象,允许您排除所有重复项

Sub export()

Dim cell As range
Dim i As Long, j As Long
Dim var As Variant
Dim dictionary As Object
Set dictionary = CreateObject("scripting.dictionary")

On Error Resume Next
j = 1
For Each cell In Sheets(1).range("a1:a10")
    var = Split(cell, vbLf)
    For i = 0 To UBound(var)
        dictionary.Add var(i), 1
        j = j + 1
    Next i
Next

Sheet2.range("A1").Resize(dictionary.count).Value = _
Application.Transpose(dictionary.keys)

End Sub

工作原理:它与nick的功能相同,但不是将每个拆分条目写入sheet2,而是将条目添加到字典文件中。因为字典不允许有两个相同值的键,所以它会跳过重复(不过你需要在下一步错误恢复时使用)。Dictionary具有极酷的调换键数组的功能,因此在最后,我只需一步复制整个列表。

非常感谢。它缺少我需要的重复检查,但我可以自己调整代码。再次感谢。+1个好代码!我添加了一个答案,对其进行了修改,以避免重复条目。非常感谢。它缺少我需要的重复检查,但我可以自己调整代码。再次感谢。+1个好代码!我添加了一个答案,对其进行修改,以避免重复条目。