0

循环通过具有相同值且具有一定范围的A 列的实际工作,该范围必须使用B 列中的评论检查最新日期,并在C列中打印带有日期的评论,请帮助我找到解决方案问题..或指南以找到解决此问题的方法...请检查屏幕截图以获取清晰的信息..在此先感谢专家

在此处输入图像描述

4

2 回答 2

5

循环可能是所有计算机编程主题中最强大的东西。请参阅以下示例,了解有关如何实现目标的一些想法。

对于每个示例的范围数据中的每个单元格

在 Excel 中编程 VBA 时最常见的事情之一是循环遍历指定范围内的单元格集合,如下例所示,它将“数据”工作表上 4 个单元格的地址和值打印到即时窗口:$B$2:a、$C$2:b、$B$3:1、$C$3:2。

Dim rng As Range: Set rng = Application.Range("Data!B2:C3")
Dim cel As Range
For Each cel In rng.Cells
    With cel
        Debug.Print .Address & ":" & .Value
    End With
Next cel

循环遍历每个示例的行数据中的单元格

下面的代码显示了如何循环使用 RowIndex:=2 行中的单元格。应用于右侧工作表中的数据,这将返回 1、2。由此我们看到行是从 rng 的起点开始计算的,因此工作表上的行是 3,rng 内的行是 2。此外,仅采用设置范围 rng 内的单元格。

Dim rng As Range: Set rng = Application.Range("Data!B2:C3")
Dim i As Integer
For i = 1 To rng.Rows.Count
    Debug.Print rng.Cells(RowIndex:=2, ColumnIndex:=i).Value
Next

循环遍历列中的单元格

下面的代码显示了如何循环使用 ColumnIndex:=B 列中的单元格。应用于右侧工作表中的数据,这将返回 a, 1, 2。由此我们看到列是从 rng 的起点开始计算的,因此列是工作表上的 C,rng 内的 B。此外,仅采用设置范围 rng 内的单元格。

Dim rng As Range: Set rng = 
Dim i As Integer
For i = 1 To rng.Rows.Count
    Debug.Print rng.Cells(RowIndex:=i, ColumnIndex:="B").Value
Next

循环遍历范围中的列

下面的代码显示了如何遍历 Range B2:C4 中的列。应用于右侧工作表中的数据,这将返回 2、3。从这​​里我们看到列是从工作表的起点开始计算的。

Dim rng As Range: Set rng = Application.Range("B2:C4")
Dim col As Range
For Each col In rng.Columns
    Debug.Print col.Column
Next col

循环遍历范围内的行

下面的代码显示了如何遍历 Range B2:C4 中的行。应用于右侧工作表中的数据,这将返回 2、3、4。由此我们看到,行数是从工作表的起点开始计算的。

Dim rng As Range: Set rng = Application.Range("B2:C4")
Dim col As Range
For Each col In rng.Rows
    Debug.Print col.Row
Next col

循环遍历每个 2 个区域示例的范围数据中的区域

通常我们假设一个范围具有矩形形状,但不一定是这种情况。右侧的示例表显示了一个包含两个区域的选择:Selection.Address 返回 $B$2:$C$3,$F$2:$F$3。这种情况也可能由于 Intersect 方法或其他原因而发生。要分别处理这两个范围,可以从 Areas 集合中选择:

Dim rng As Range: Set rng = Application.Selection
Dim rngArea As Range
For Each rngArea In rng.Areas
    Debug.Print rngArea.Address
Next rngArea
于 2017-10-08T15:21:42.513 回答
2

我建议以一种相当简单的方法声明一些维度(假设您已对 A 列进行了排序):

Dim i As Long, j As Long, k As Long, LR As Long
LR = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LR
    If Cells(i, 1).Value = Cells(i - 1).Value Then
        If j = 0 Then
           j = Cells(i - 1, 1).Row
        End If
    Else
        If j > 0 Then
            k = Cells(i - 1, 1).Row
            Cells(j, 3).Value = Application.Max(Range(Cells(j, 1), Cells(k, 1)))
            j = Cells(i, 1).Row
            k = 0
        End If
    End If
Next i
于 2017-09-25T19:57:39.790 回答