连接数据描述并与数据范围对齐

时间:2018-02-16 17:16:21

标签: excel vba excel-vba loops

我一直在尝试学习visual basic来编写代码,以便在使用excel中的数据时执行任务。我一直在复制我在网上找到的代码片段并将它们拼凑在一起。目前,我的文件夹中包含数以千计的.csv文件(从CMM输出的数据)。

在每个文件中,A列始终包含数据标签,B列始终包含CMM数据。

目前,我的程序允许用户选择多个.csv文件,并且以迂回的方式,他们最终都在Excel中的一个工作表上,第一列中的数据标签和下一列中的数据。

例如,如果打开10个CSV文件,数据标签将位于第一列,数据将显示在接下来的10列中。

问题在于数据标签未与数据对齐,并且通常每行数据都有多个标签。

我已经能够将数据标签连接到每行数据的一个标签中,但无法弄清楚如何将此标签与数据行对齐。

在这一点上,我会很高兴有一个单独的代码块来完成这个但是......我怀疑我的代码块连接标签可以很容易地修改来完成任务,我只是没有能够搞清楚。

所以我的代码吐了出来:

(Flatness) : Item (113)

Plane:RH_5_Mating_Surface

                                                             5.012  4.014  6.313  etc...

(Z) : Item (128) / (X) : Item (135)

Circle:Offset_Dowel_Hole

                                                             1.012  2.987  5.478  etc...

Circle:Cast_Hole_From_Offset_Dowel_Hole

                                                             2.147  7.895  4.258  etc...

然后,此代码连接标签并在B列中将它们吐出:

Dim rng1 As Range
Dim Lastrow As Long
Dim c As Range
Dim concat As String

Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

Set rng1 = Range("A9:A" & Lastrow)   
concat = ""
For Each c In rng1
If c > 0 Then
    concat = concat & " " & c.Value
    concat = Trim(concat)
Else
    c.Offset(-1, 1).Value = concat
    concat = ""
End If
Next c

结果是:

(Flatness) : Item (113) Plane:RH_5_Mating_Surface

                                                             5.012  4.014  6.313  etc...


(Z) : Item (128) / (X) : Item (135) Circle:Offset_Dowel_Hole

                                                             1.012  2.987  5.478  etc...

Circle:Cast_Hole_From_Offset_Dowel_Hole

                                                             2.147  7.895  4.258  etc...

我需要的是:

我无法弄清楚如何在这里展示但是......

我需要匹配的行,也请注意,这里显示数据和标签偏移相同的数量,但实际上它们不是。所以我的想法是我需要它来搜索包含数据的下一行并将标签放在它旁边。

我觉得我可以改变这一部分......

Else
    c.Offset(-1, 1).Value = concat

但我不知道怎么做......

我尝试在这里嵌套另一个“For Each”,而不是类似于它已经在做的,但是使用“For Each d In rng2”,其中“rng2”是数据列,它将查找带有数据和位置的下一行“ concat“使用数据旁边”d.offset(-1,-1).Value = concat“

我无法弄清楚如何让它发挥作用......

1 个答案:

答案 0 :(得分:0)

这是一种可行的方法。 删除空单元格并向上移动列。如果数据顺序一致,则应正确排列。

For i=1 to Lastrow
    If Range("A" & i).Value=""
        Range("A" & i).Delete Shift:=xlUp
    End If
    If Range("B" & i).Value=""
        Range("B" & i).Delete Shift:=xlUp
    End If
Next

您可以根据工作表更改范围。此外,修改代码以使用另一个' IF'条件检查空白,如果这对你的情况更好。