当前位置: 首页 > 知识库问答 >
问题:

如何为VBA中的每一个交替列找到最后的第二行?

毛声
2023-03-14

是否有一种方法可以找到工作表中交替列的最后第二行在这种情况下是Time1、Time2等的最后第二行,然后将其复制并粘贴到另一个工作表上,如图所示?通常,当每个列具有相同的行数时,使用LastRow=.range(“e”&.rows.count).end(xlUp).row就可以完成这项工作,但这一次,每个交替列具有不同的行数,所以我不能使用LastRow定义。下面是我尝试的代码,我被如何操作以获得每个交替列的最后第二行所困扰。

Sub main()

Dim i As Long

Dim j As Long

Dim lastrowv1 As Long

Dim LastColumn As Long


i = 1 'i for column
j = 2  'j for row



Set sht = ActiveWorkbook.Sheets("current")
LastColumn = sht.Cells(1, sht.Columns.count).End(xlToLeft).Column

For i = 1 To LastColumn Step 2
    With sht

'How do i find the last 2nd row for every alternate column(in this case time1,time2,time3...timex) in VBA?

'
'
'

End Sub

当试图将这些值存储在另一个工作表上时(例如:

     For m = 2 To i - 2 Step 2
                Sheets("Breakdown").Cells(m / 2 + 1, 3) = timecoll.Add.Cells(.Rows.count, i).End(xlUp).Offset(-1, 0).Value

'^argument not optional error above
              Next m

如果有空数据,我想给那些有空数据的列命名为“short”,我该怎么做呢?

共有1个答案

司徒啸
2023-03-14

使用与获取最后一列相同的方法,我们可以从循环中获取每列的最后一行,并偏移-1行。

然后将值存储在集合中(或对它们执行任何您想要的操作)。

    Dim i As Long
    Dim lastcolumn As Long

    Dim sht As Worksheet

    Set sht = ThisWorkbook.Sheets("current")

    Dim timecoll As Collection
    Set timecoll = New Collection
    With sht
        lastcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column

        For i = 1 To lastcolumn Step 2
            timecoll.Add .Cells(.Rows.Count, i).End(xlUp).Offset(-1, 0).Value
        Next i
    End With

对于您的编辑,我不确定该循环是什么,所以我将转储到工作表(“breakdrow”)中的A列。

dim k as variant

set sht = thisworkbook.sheets("Breakdown")
i = 1
with sht
    for each k in timecoll
        .cells(i, 1).value = k
        i = i + 1
    next k
end with

好吧,这是编辑后的全部内容:

Option Explicit

Sub test()
    Dim i As Long
    Dim lastcolumn As Long

    Dim sht As Worksheet

    Set sht = ThisWorkbook.Sheets("current")

    Dim timecoll As Collection
    Set timecoll = New Collection
    With sht
        lastcolumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
        On Error GoTo short
        For i = 1 To lastcolumn Step 2
            timecoll.Add .Cells(.Rows.Count, i).End(xlUp).Offset(-1, 0).Value
        Next i
        On Error GoTo 0
    End With

    Dim k As Variant

    Set sht = ThisWorkbook.Sheets("Breakdown")
    i = 1
    With sht
        For Each k In timecoll
            .Cells(i, 1).Value = k
            i = i + 1
        Next k
    End With
    Exit Sub
short:
    timecoll.Add "Short"
    Resume Next
End Sub

 类似资料:
  • 我写了一个函数来交换C中队列的第一个和最后一个元素 注意:“只考虑(空、去队列、CREATQ和入队)是其他函数。 但是如果最后一个元素在中间被复制,如果这是队列的元素(5,1,9,3,9),如果我们跟踪这些元素上的函数,它将会是(9,1,3,5),有一个丢失了! 那么,如果这个函数有逃避这个或任何其他想法的话?!

  • 你有什么想法,我怎么能得到字符串的第二个点后的第一个字符。 在第一种情况下,我应该得到,在第二种情况下我应该得到。我考虑用点分割字符串,并提取第三个元素的第一个字符。但这似乎很复杂,我认为还有更好的方法。

  • 假设我有一个如下形式的numpy数组: 我想找到第一个索引的索引(对于每一列),其中的值是非零的。 因此,在本例中,我希望返回以下内容: 我该怎么办?

  • 问题内容: 图片我想获得一个特定的框架,你可以在图像中找到的“href”,我试图尽我可以,但我不能够得到的“href” 我尝试了上面的代码,我使用了该框架的Xpath并尝试获取该框架的href。链接:“ https://iaeme.com/ijciet/issues.asp?VType=8&IType=10&JType=IJCIET&PageNumber=1 ” 问题答案: 按照您共享以获取所有“

  • 问题 你需要去找出一个月的最后一天,但是一年中的各月并没有一个固定时间表。 解决方案 利 用JavaScript 的日期下溢来找到给出月份的第一天: now = new Date lastDayOfTheMonth = new Date(1900+now.getYear(), now.getMonth()+1, 0) 讨论 JavaScript 的日期构造函数成功地处理溢出和下溢情况,使日期的计算

  • 问题内容: 我有一个这样的清单: 我想要这样的结果(列表中的 每个 第一个元素): 我尝试了[:: 1] [0],但没有用 我几周前才开始学习Python。Python版本= 2.7.9 问题答案: 您可以从列表理解中的每个元素获取索引 同样,要学究,您没有的,您没有的。