查看A列,与E列匹配,将B列复制到F列

时间:2013-08-02 01:19:20

标签: excel vba loops

所以我相信如果你了解VBA的方式,这很容易,我只是havnet能够让它为我工作。

这是我所拥有的表的一个例子。如果列A相同,我想将所有内容都移动到一行中。这是表,我也期待着。

A   B    C         D            E     F          G        H         I
11  Yes Yellow  8/1/2013 20:46  11  Yes 8/1/2013 20:46  Yellow  8/1/2013 20:46
11  No  Blue    8/1/2013 20:46  12  Yes 8/1/2013 20:46  Yellow  8/1/2013 20:46
11  YY  Red 8/1/2013 20:46      13  Yes 8/1/2013 20:46   Red    8/1/2013 20:46
11  NN  Yellow  8/1/2013 20:46                  
11  YYY Yellow  8/1/2013 20:46                  
11  NNN Blue    8/1/2013 20:46                  
11  YYYYY   Red 8/1/2013 20:46                  
11  NNNN    Yellow  8/1/2013 20:46                  
12  Yes Yellow  8/1/2013 20:46                  
12  No  Blue    8/1/2013 20:46                  
12  YY  Red 8/1/2013 20:46                  
12  NN  Yellow  8/1/2013 20:46                  
12  YYY Yellow  8/1/2013 20:46                  
12  NNN Blue    8/1/2013 20:46                  
13  Yes Red 8/1/2013 20:46                  
13  No  Yellow  8/1/2013 20:46                  
13  YY  Yellow  8/1/2013 20:46                  
13  NN  Blue    8/1/2013 20:46                  
13  YYY Red 8/1/2013 20:46                  
13  NNN Yellow  8/1/2013 20:46                  

这就是我试图用VBA做的事情。不是最好的,但我在尝试。

Sub Sample()
    Dim lastRow As Long, i As Long
    Dim ws As Worksheet

    Set ws = Sheets("Sheet1")

    lastRow = ws.range("A" & Rows.Count).End(xlDown).Row


    With ws
        For i = 1 To lastRow
            If range("A" & i).Value = range("E" & i) Then range("f" & i).Value = range("b" & i).Value
        Next i
    End With
End Sub

有人可以帮助我完成这项工作所需的VBA。我遇到循环问题,循环并将每个A值与E中的每个值进行比较。

2 个答案:

答案 0 :(得分:0)

所以你想把数据放在第1到8行,第B列到第D行,第1行,第F列和后面,因为对于第1到8行,A列中的'11'与E1中的'11'相匹配?
例如。 B1-> F1,C1-> H1(这是我缺少某个订单的第一个位置),D1-> G1,?? - > I1(来自第I列的内容来自哪里?) ,
(将下一个源行追加到同一目标行:) B2-> J1,...

首先,您需要澄清col到F(以及更远)的数据来自何处 然后:
如果我对你的意图的假设是正确的,那么这会带来其他问题:

  • col E是否始终包含col A的所有可能值,或者col E中是否存在col A中缺少的值(例如'14')?
  • col E中值的位置是否固定?

以下是一些建议,澄清后代码可能会跟随:

  • 确定col A中的行数
  • 确定col E中的行数
  • 使用2个循环:一个外循环用于从col A获取数据,一个内循环用于搜索col E中的数据
  • 使用ws.cells(row,col).value而不是range()
  • 如果要在同一目标行中追加来自不同源行的数据,请添加一个数组变量,以保留每个目标行的下一个空闲列的位置。

一般建议:

  • 不要使用像'i'这样的变量名称。不明确的变量名称带来许多缺点。使用iRow或类似的东西(易于处理搜索和替换,明显的meaining,有关变量类型的信息(i =整数),...)
  • 在模块顶部使用Option Explicit。这将强制您明确声明所有变量并确保正确使用变量。

答案 1 :(得分:0)

我不太确定你想要达到的目标。但是我根据自己的理解制作了一个代码。试试吧。

Sub Sample()
    Dim lastRowA As Long, lastRowB As Long, i As Long
    Dim ws As Worksheet
    Set ws = Sheets("Sheet1")
    With ws
        lastRowA = .Cells(.Rows.Count, 1).End(xlUp).Row
        lastRowE = .Cells(.Rows.Count, 5).End(xlUp).Row
    End With
    With ws
        For i = 1 To lastRowE
            CurrentEValue = Range("E" & i).Value
            MatchFound = False
            For j = 1 To lastRowA
                CurrentAValue = Range("A" & j).Value
                If CurrentAValue = CurrentEValue And Not MatchFound Then
                    Range("f" & i).Value = Range("b" & j).Value
                    MatchFound = True
                End If
            Next
        Next
    End With
End Sub