excel 偏移到下一个非空单元格

btxsgosb  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(239)

我正在建立一个模板,从用户选择的excel文件中获取所有需要的输入。
用户选择的这些excel文件通常有相同的布局,但是数据不能在完全相同的位置找到,每个文件包含随机的列合并,这使得不可能硬编码所需数据的位置。所以我创建了一些循环,但这些也不是100%有效。
给予你一个例子,我有这个用户输入excel文件:

从这里我需要检索所有持卡人的姓名,我编写了下面的代码将这些姓名加载到我的模板中,它在第4行的范围内查找单词“Naam”,然后偏移它以获得姓名。

Sub KlantInformatie(wsTemplate, wsKlantprofiel)
    Dim i, j As Range
    
    'Inladen accountnummer
    wsTemplate.Range("antAccountnummer").Value = wsKlantprofiel.Range("B2").Value
    
    'Zoeken en inladen van namen CH en ECH's
    For Each i In wsKlantprofiel.Range("C4:K4").Cells
    If i.Value = "Naam" Then
        With wsTemplate
            .Range("antNaamCH") = i.Offset(, 1).Value
            .Range("antNaamECH1") = i.Offset(, 6).Value
            .Range("antNaamECH2") = i.Offset(, 10).Value
            .Range("antNaamECH3") = i.Offset(, 11).Value
            .Range("antNaamECH4") = i.Offset(, 12).Value
            .Range("antNaamECH5") = i.Offset(, 13).Value
            .Range("antNaamECH6") = i.Offset(, 14).Value
            .Range("antNaamECH7") = i.Offset(, 15).Value
            .Range("antNaamECH8") = i.Offset(, 16).Value
            .Range("antNaamECH9") = i.Offset(, 17).Value
            .Range("antNaamECH10") = i.Offset(, 18).Value
        End With
    End If
Next i

然而这些偏移并不总是正确的,因为数据可能在不同的列中。所以我认为我需要的是一个代码,偏移到下一个非空值。但我不知道如何做到这一点。

lf5gs5x2

lf5gs5x21#

有一个名为searchpos的范围,从Naam开始向右移动,函数nextCHvalue将其向右移动,并返回找到的下一个可用值。当intersect返回Nothing时,它将在到达所用范围的末尾时停止移动。
注意,不存在对标头的检查,例如检查cardhouder是否是标头单元的一部分。

Sub KlantInformatie(wsTemplate, wsKlantprofiel)
    Dim i, searchpos As Range
    
    'Inladen accountnummer
    wsTemplate.Range("antAccountnummer").Value = wsKlantprofiel.Range("B2").Value
    
    'Zoeken en inladen van namen CH en ECH's
    For Each i In wsKlantprofiel.Range("C4:K4").Cells

    If i.Value = "Naam" Then
        With wsTemplate
            Set searchpos = i
            .Range("antNaamCH") = nextCHvalue(searchpos)
            .Range("antNaamCH") = nextCHvalue(searchpos)
            .Range("antNaamECH1") = nextCHvalue(searchpos)
            .Range("antNaamECH2") = nextCHvalue(searchpos)
            .Range("antNaamECH3") = nextCHvalue(searchpos)
            .Range("antNaamECH4") = nextCHvalue(searchpos)
            .Range("antNaamECH5") = nextCHvalue(searchpos)
            .Range("antNaamECH6") = nextCHvalue(searchpos)
            .Range("antNaamECH7") = nextCHvalue(searchpos)
            .Range("antNaamECH8") = nextCHvalue(searchpos)
            .Range("antNaamECH9") = nextCHvalue(searchpos)
            .Range("antNaamECH10") = nextCHvalue(searchpos)
        End With
    End If
Next i
End Sub

Function nextCHvalue(ByRef searchpos As Range)
    Do
        Set searchpos = searchpos.offset(, 1)
    Loop While IsEmpty(searchpos) And Not Intersect(searchpos, searchpos.Worksheet.UsedRange) Is Nothing
    nextCHvalue = searchpos.Value
End Function

相关问题