如何使用C列

时间:2015-06-08 22:10:53

标签: excel vba excel-vba filter

我已经完全重写了我原来的问题,我希望这对Stack礼仪来说还可以吗?

(那不是第3个问题)

       ****SAMPLE DATA****

Date        Order           Reference Field 1
06/03/15    **865754iFP 002**   
06/03/15    **865754iFP 002**   
06/03/15    **818013Dc6 002**   
06/03/15    **817660RiV 004**   
06/03/15                     **920488Hgg 001**
06/03/15                     **920488Hgg 001**
06/03/15    **123771Pq2002**    
06/03/15    123712p1 001    

在上面的示例数据中,您会看到3个标题,日期;订购;参考。领域1。 (Col,s A,B,C,1-8行)

两栏都有订单。这些数字是我在工作簿中突出显示粗体的数字。

我删除了通常填充空格的数据。 (在我的工作簿中有28列和数百行数据。)

我想尝试识别所有粗体单元并将它们合并到一个单元格中。您会注意到,如果A列中没有粗体单元格,则同一行的B列中存在粗体。它将在何处以及以何种形式发生变量。每一行都会有一个粗体单元格。

这是订单号,我需要找到工作表上的所有订单号,无论它们在哪里,突出显示它们,并将每个订单号放入C列,但在同一行中找到它。

工作簿已经运行了一个代码,用于查找,突出显示和清除这些订单号,因此它们都处于我需要它们在最终工作表中的相同基本结构中。例如; 123456ABC; 6个数字,后跟2个或3个字符(Alpha / Num)。

现在我的问题是将它们合并为一列;或者这个术语可能会将它们复制到一列中。

使用C列中的数据填写B列中的所有空白。在我的工作簿中,订单以灰色填充而非粗体字体突出显示。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了你的需求,那么你可以使用它:

Sub test()
    Dim n&, cl As Range, temp$
    n = Cells(Rows.Count, "A").End(xlUp).Row
    For Each cl In Range([B2], Cells(n, "B"))
        'if B grey and C grey
        If cl.Interior.ColorIndex = 15 And cl.Offset(, 1).Interior.ColorIndex = 15 Then
            cl.Value = cl.Value & "; " & cl.Offset(, 1).Value
            cl.Offset(, 1).Value = "": cl.Offset(, 1).Interior.Pattern = xlNone
        'if B not grey and C grey
        ElseIf cl.Interior.ColorIndex <> 15 And cl.Offset(, 1).Interior.ColorIndex = 15 Then
            cl.Interior.ColorIndex = 15: cl.Offset(, 1).Interior.Pattern = xlNone
            temp = cl.Offset(, 1).Value: cl.Offset(, 1).Value = cl.Value
            cl.Value = temp
        End If
    Next cl
End Sub

colorindex可以替换为另一种颜色,具体取决于您使用的颜色

运行宏之前

数据:

enter image description here

运行宏后

数据:

enter image description here

答案 1 :(得分:0)

您需要对每个使用过的列应用过滤器,即查找上次使用的列索引,并使用for循环来应用过滤器,因为您已经在最后一列进行过了。

您可以使用以下代码查找上次使用的列的索引并使用循环。

Public Function LastColumn(Optional wks As Worksheet) As Long
  Dim wks As Worksheet
  Set wks = ActiveSheet
  LastColumn = wks.Cells.Find(What:="*", _
  After:=wks.Range("A1"), _
  Lookat:=xlPart, _
  LookIn:=xlFormulas, _
  SearchOrder:=xlByColumns, _
  SearchDirection:=xlPrevious, _
  MatchCase:=False).Column
End Function