在列中查找具有值的最后一个单元格,并将值移动到新列/单元格

我有一个工作的macros,我很难过。

在我的Excel工作表中,我有一列(列IE),该列中的单元格将具有“每月”,“双月”或“每季度”,具体取决于该行中的帐户(每行是不同的帐户,而且这个帐户可以用三种不同的方式中的任何一种来支付)。 在一些单元格中可能有空值,每次运行这个macros时,都会有不同数量的值。

我需要将列IE中的单元格值移动到同一行中相应的“每月”(列B),“双月”(列C)和“季度”(列D)列。

有没有办法:

  1. 在列IE中获取/查找数据/行的结尾(不仅仅停留在第一个空值处)

  2. 确定这三个值中的哪一个在列IE的每一行中

  3. 将这些值移动到同一行的正确列,具体取决于值(月刊 – B列,B月份 – C列或Quarterly – D列)?

我可以做些什么:

Dim lastRow As Long lastRow = ActiveSheet.Range("IE" & Rows.Count).End(xlUp).Row Do While ActiveCell.Row <=lastRow 

然后添加我的代码来做“单元格移动”部分?

你可以把一个IF语句放到每一列查看列IE的列中,比如在B2中:

 =IF($IE2 = "Monthly",$IE2,"") 

然后你可以在C和D中修改其他两个值。

尝试这样的事情:

 Sub yourcode() LastRow = Range("IE50000").End(xlUp).Row 'I assume values begin at row 2 For i = 1 To LastRow Select Case True Case IsError(Cells(1 + i, "IE")) Nerrors = Nerrors + 1 Case Cells(1 + i, "IE") = "" NBlanks = NBlanks + 1 Case Cells(1 + i, "IE").Value = "monthly" m = m + 1 Cells(1 + m, "B") = Cells(1 + i, "IE") Case Cells(1 + i, "IE").Value = "bimonthly" b = b + 1 Cells(1 + b, "C") = Cells(1 + i, "IE") Case Cells(1 + i, "IE").Value = "quarter" q = q + 1 Cells(1 + q, "D") = Cells(1 + i, "IE") End Select Next i End Sub 

我想这就是你想要的。

在活动的表格中运行以下内容。

 Private Sub Process() Dim v As Variant, vOut As Variant Dim i As Long, j As Long, lLastRow As Long Const COL = 239 'IE With ActiveSheet lLastRow = .Cells(.Rows.Count, COL).End(xlUp).Row v = .[a1:ie1].Resize(lLastRow).Value2 ReDim vOut(1 To lLastRow, 1 To 3) For i = 1 To UBound(v) If Len(v(i, 2)) Then vOut(i, 1) = v(i, 2) If Len(v(i, 3)) Then vOut(i, 2) = v(i, 3) If Len(v(i, 4)) Then vOut(i, 3) = v(i, 4) If Len(v(i, COL)) Then Select Case LCase$(v(i, COL)) Case "monthly": vOut(i, 1) = v(i, COL) Case "bimonthly": vOut(i, 2) = v(i, COL) Case "quarterly": vOut(i, 3) = v(i, COL) End Select End If Next .[a1].Offset(, 1).Resize(lLastRow, 3) = vOut End With End Sub