【问题标题】:Excel Do while to obtain adjacent cells when cell equals valueExcel当单元格等于值时执行while获取相邻单元格
【发布时间】:2018-07-26 09:54:11
【问题描述】:

我有两张床单。工作表 1(客户跟踪器 - OC)有一列,其中每一行都包含是或否。如果值为 yes ,则右侧相邻的两个单元格中有两个值。

我想为每个宏创建一个 do while / 循环遍历 sheet1 中 yes/no 列中的每个单元格,如果值为 yes ,则在空白表 2 中创建一个新行,其中两个相邻的值来自第 1 页。

表 1

   A    B    C
1  YES  4    6 
2  NO 
3  YES  91   42

工作表 2 中的期望结果(“合同”)

   A    B
1  4    6 
2  91   42

我有以下代码,但“溢出”出错。

    Sub ForEach_Loop()

Dim TrackerLastRow As Integer
Dim TrackerCurrentRow As Integer
Dim ContractLastRow As Integer
Dim ContractCurrentRow As Integer

TrackerLastRow = Worksheets("Customer Tracker - OC").Range("T1").End(xlDown).Row
    TrackerCurrentRow = 1

    ContractLastRow = Worksheets("Contracts").Range("A1").End(xlDown).Row
    ContractCurrentRow = 1

    Do While TrackerCurrentRow <= TrackerLastRow

      If Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Value = "Yes" Then
            Worksheets("Contracts").Range("A" & ContractCurrentRow) = Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Offset(, 1).Value
            Worksheets("Contracts").Range("B" & ContractCurrentRow) = Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Offset(, 2).Value
            TrackerLastRow = TrackerLastRow + 1
            TrackerCurrentRow = TrackerCurrentRow + 1
            ContractLastRow = ContractLastRow + 1
            ContractCurrentRow = ContractCurrentRow + 1
        End If

        TrackerCurrentRow = TrackerCurrentRow + 1
        ContractCurrentRow = ContractCurrentRow + 1

        Loop


End Sub

任何帮助将不胜感激

【问题讨论】:

  • 首先将所有 Integer 替换为 Long,然后不再使用 Integer。
  • 我尝试替换 Integer,但宏似乎没有做任何事情,看起来还有更多问题。
  • 溢出错误意味着您尝试保存的值超出了每种数据变量的限制。示例:您不能将数字 1000 保存在定义为 Byte 的变量中,因为 Byte 数据的限制是 255。所以正如@Jeeped 所说,将所有整数替换为 Long,然后调试代码以查看失败的位置。用 F8 执行它
  • 过滤列 A 为“是”,然后一步复制/粘贴列 B:C 不是一种选择吗?
  • 为什么要在 while 循环中的 if 语句中增加变量?变量 ContractLastRow 的用途是什么?

标签: vba excel foreach do-while


【解决方案1】:

您似乎过度增加了 var 并过度扩展了整数类型 var 的功能限制。

Option Explicit

Sub ForEach_Loop()

    Dim TrackerLastRow As Long, TrackerCurrentRow As Long
    Dim ContractLastRow As Long, ContractCurrentRow As Long

    With Worksheets("Contracts")
        ContractLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        ContractCurrentRow = 1
    End With

    With Worksheets("Customer Tracker - OC")

        TrackerLastRow = .Cells(.Rows.Count, "T").End(xlUp).Row
        TrackerCurrentRow = 1

        Do While TrackerCurrentRow <= TrackerLastRow

            If .Cells(TrackerCurrentRow, "T").Value = "Yes" Then
                Worksheets("Contracts").Range("A" & ContractCurrentRow) = .Range("T" & TrackerCurrentRow).Offset(0, 1).Value
                Worksheets("Contracts").Range("B" & ContractCurrentRow) = .Range("T" & TrackerCurrentRow).Offset(0, 2).Value
                ContractCurrentRow = ContractCurrentRow + 1
            End If

            TrackerCurrentRow = TrackerCurrentRow + 1

        Loop
    End With


End Sub

【讨论】:

    【解决方案2】:

    我已经设法解决它,我确实更改为整数并删除了一些不必要的增量。想想我一开始有点困惑。感谢您的帮助!

        Sub ForEach_Loop()
    
    Dim TrackerLastRow As Long
    Dim TrackerCurrentRow As Long
    Dim ContractLastRow As Long
    Dim ContractCurrentRow As Long
    
    TrackerLastRow = 2486
        TrackerCurrentRow = 3
    
    
        ContractCurrentRow = 1
    
        Do While TrackerCurrentRow <= TrackerLastRow
    
          If Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Value = "Yes" Then
    
                Worksheets("Contracts").Range("A" & ContractCurrentRow) = Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Offset(, 1).Value
                Worksheets("Contracts").Range("B" & ContractCurrentRow) = Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Offset(, 2).Value
    
                TrackerCurrentRow = TrackerCurrentRow + 1
                ContractCurrentRow = ContractCurrentRow + 1
    
                Else
    
                TrackerCurrentRow = TrackerCurrentRow + 1
    
            End If
    
    
    
            Loop
    
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多