vba - 如何创建一个循环来读取一系列单元格并确定哪些具有值以及每个单元格的右侧是什么
问题描述
我正在尝试编写一个程序,该程序可以读取由 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
我在这里只是将一个计数插入到单元格范围中,我想做的是让我的代码按照我描述的顺序实际读取范围内的单元格,并且一次查看哪些单元格中写入了值并查看哪些单元格(其中包含值)位于任何具有值的单元格的右侧,并生成上述表格。
解决方案
在阅读了您的解释后,这非常具有挑战性,我试图重新创建您所要求的内容。我使用了编号为 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
这有帮助吗?您可以根据您的问题对其进行一些调整。祝你好运!
推荐阅读
- testing - Testcafe:我将 testcafe 更新为 0.23.2,测试使执行时间增加了两倍
- javascript - 在循环中更改某些元素的样式
- merge - 避免 Git 对某个文件类型进行任何合并
- python - 如何在没有回溯的情况下在 python 中只引发一个异常?
- c# - 使用 CLI 包装器中的 C++ 函数模板
- c++ - opengl 在 mingw 编译器 netbeans 中找不到库
- networking - 使用 Kubernetes 的直接 pod 网络
- c - 创建字符指针数组
- sql - 在计算不同的列值时使用 Group By
- javascript - 从 Javascript 函数中提取 dataURL