首页 > 解决方案 > 如何创建一个循环来读取一系列单元格并确定哪些具有值以及每个单元格的右侧是什么

问题描述

我正在尝试编写一个程序,该程序可以读取由 12 个单元格组成的一系列单元格(比如说:P79、R79、T79、V79、X79、Z79、AB79、AD79、AF79、AH79、AJ79、AL79)及以下这些单元格有 6 个单元格(比如说:V81、X81、Z81、AB81、AD81、AF81),程序正在寻找在所述范围内的单元格中是否有输入值。

该程序应该能够从左到右读取第一行的单元格并向下循环到下一行并从右到左读取。

如果顶行中的所有单元格中都有值,则程序会中断并且不会读取底行中的值。

当程序从每个单元格读取值时,它应该创建一个由三列组成的表(比如说:M88、N88、O88),最左边的列应该有单元格编号(按照程序读取的单元格顺序(无论哪个单元格)在循环中首先有一个值被赋予数字 1,然后下一个具有值的单元格被赋予数字 2 等等)。中间列应该有从范围中读取的相应单元格中写入的任何值。右列应该具有每个包含值的单元格右侧的值。

要读取的第一个值应给出值“Left End”和要读取的最后一个值(无论是在顶行中具有值的第 12 个单元格还是在最左边的单元格中具有值)底行)应该给出值“右端”。

表中的一行可能如下所示的示例:

Cell #   Cell Value   Position/Left/Right

 1         First            Left End

布局示例

这是我到目前为止的代码:

Sub Code()
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets("Sheet1")
    Dim i As Integer, j As Integer, k As Integer

' First loop to compare a car to the rest after it
    For i = 1 To 12
        For j = i + 1 To 12
        If Not IsEmpty(ws.Range("Cell_" & i)) And Not IsEmpty(ws.Range("Cell_" & j)) Then
                ws.Range("B82").Offset(i).Value = j
                Exit For
            End If
        Next j
    Next i

' Loop backwards to find "Right End"

For k = 12 To 2 Step -1 '24 To 2
        If Not IsEmpty(ws.Range("Cell_12")) Then
        ws.Range("B82").Offset(12).Value = "Right End"
        Exit For


' Has the "Right End" Follow when cars are left blank for lower row

    ElseIf IsEmpty(ws.Range("Cell_" & k)) And Not IsEmpty(ws.Range("Cell_" & k - 1)) Then
        ws.Range("B82").Offset(k - 1).Value = "Right End"
        Exit For


        End If
Next k

我在这里只是将一个计数插入到单元格范围中,我想做的是让我的代码按照我描述的顺序实际读取范围内的单元格,并且一次查看哪些单元格中写入了值并查看哪些单元格(其中包含值)位于任何具有值的单元格的右侧,并生成上述表格。

标签: vbaexcelexcel-2010

解决方案


在阅读了您的解释后,这非常具有挑战性,我试图重新创建您所要求的内容。我使用了编号为 1 到 12 的单元格 A1:L1。在 A2:L2 下方的行中,添加了一些数字。if value <> ""你可以看到哪些单元格包含一个值。在第二个工作表中制作了表格:

Sub test()
Dim a As Integer
Dim i As Integer
Dim name As String

ActiveWorkbook.Sheets(1).Activate
a = 1

For i = 1 To endcel
    If Sheets(1).Range("a1").Offset(a, i - 1).Value <> "" Then
       name = Sheets(1).Range("A1").Offset(a, i - 1).Value
       Sheets(2).Activate
       Sheets(2).Range("b2").Offset(i).Value = name
    End If
Next i
End Sub

这有帮助吗?您可以根据您的问题对其进行一些调整。祝你好运!


推荐阅读