【问题标题】:Offset data down a cell if cell contains data如果单元格包含数据,则将数据向下偏移
【发布时间】:2019-12-26 14:06:35
【问题描述】:

我需要修改下面的代码以根据单元格是否包含最多5个数据来动态偏移。

然后如果超过 5,我希望它显示一个消息框以显示错误。

我有这个工作的 VB 代码:

Evaluate("OFFSET(INDEX(B$6:B$72,MATCH(""" & Me.Pool_Numbers.Value & """,A$6:A$72,0)),1,0)") = Change_Pool.Value

我希望它看起来像这样,但我不知道如何实现它。

for every cell that contains data, 
set offset value +1 

Evaluate("OFFSET(INDEX(B$6:B$72,MATCH(""" & Me.Pool_Numbers.Value & """,A$6:A$72,0)), * OFFSET AMOUNT * ,0)") = Change_Pool.Value

If offset > 5
msgbox "You cannot do this blablabla"

【问题讨论】:

  • 如果您efit your question 提供示例数据和预期结果可能会有所帮助。您可以将屏幕截图上传到imgur.com 并在此处链接到它们
  • 你的意思是,给定一行中的一个单元格,你想检查接下来的 5 行是否有数据?如果包含数据的行超过 5 行,则返回 you cannot do this bla bla bla?

标签: excel vba indexing match offset


【解决方案1】:

此上下文中的 Evaluate 方法返回一个 Range 对象。因此,我们可以将结果范围分配给一个对象变量,然后我们可以设置一个 For/Next 循环来检查前五个单元格中是否有一个空单元格,可以在其中输入所需的值。

Dim targetCell As Range
Set targetCell = Evaluate("OFFSET(INDEX(A$6:A$72,MATCH(""" & Me.ComboBox1.Value & """,B$6:B$72,0)),1,0)")

Dim emptyCellFound As Boolean
emptyCellFound = False

Dim i As Long
For i = 0 To 4
    If Len(targetCell.Offset(i, 0).Value) = 0 Then
        targetCell.Offset(i, 0).Value = Change_Pool.Value
        emptyCellFound = True
        Exit For
    End If
Next i

If Not emptyCellFound Then
    MsgBox "No empty cell found!", vbExclamation
End If

【讨论】:

  • 你搞定了,回家我的解释不是太复杂,非常感谢!
  • 太好了,很高兴我能帮上忙。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多