根据特定单元格中的值填充 Excel 工作表中的单元格

问题描述 投票:0回答:1

我正在尝试自动化数据输入任务,但传入数据的格式有些棘手。进来的是一个 CSV 文件,如下表所示。

        ATLANTIC SPIRIT             
        Looe                
Vessel  Species     Size        Kg      Date            Location
        POLLACK     2           2.5     23/04/2024  
        POLLACK     3           18.8    23/04/2024  
        POLLACK     41          5.4     23/04/2024  
        LING        3           1.9     23/04/2024  
        WHITING     2           0.4     23/04/2024  

        BEADY EYE               
        Plymouth                
Vessel  Species     Size        Kg      Date            Location
        BASS        4           15.7    23/04/2024  
        BASS        5           3.2     23/04/2024  

        BOY JACK                
        Plymouth                
Vessel  Species         Size    Kg      Date            Location    
        PLAICE          1       0.8     23/04/2024  
        BLONDE RAY      1       14.3    23/04/2024  
        BLONDE RAY      3       1.6     23/04/2024  
        SPOTTED RAY     5       1.2     23/04/2024  
        THORNBACK RAY   1       6.3     23/04/2024  
        THORNBACK RAY   2       15.7    23/04/2024  
        THORNBACK RAY   3       10.9    23/04/2024  
        THORNBACK RAY   4       2.6     23/04/2024  
        LOBSTER         1       2.7     23/04/2024  
        LOBSTER         2       1.1     23/04/2024  
        RAY BACKS       1       42.1    23/04/2024

我想根据数据中已有的值填写“船只”和“位置”下的值。我想要的最终结果是这样的:

        ATLANTIC SPIRIT             
        Looe                
Vessel              Species     Size        Kg      Date            Location
ATLANTIC SPIRIT     POLLACK     2           2.5     23/04/2024      Looe
ATLANTIC SPIRIT     POLLACK     3           18.8    23/04/2024      Looe
ATLANTIC SPIRIT     POLLACK     41          5.4     23/04/2024      Looe
ATLANTIC SPIRIT     LING        3           1.9     23/04/2024      Looe    
ATLANTIC SPIRIT     WHITING     2           0.4     23/04/2024      Looe

        BEADY EYE               
        Plymouth                
Vessel              Species     Size        Kg      Date            Location
BEADY EYE           BASS        4           15.7    23/04/2024      Plymouth
BEADY EYE           BASS        5           3.2     23/04/2024      Plymouth

        BOY JACK                
        Plymouth                
Vessel              Species         Size    Kg      Date            Location    
BOY JACK            PLAICE          1       0.8     23/04/2024      Plymouth
BOY JACK            BLONDE RAY      1       14.3    23/04/2024      Plymouth
BOY JACK            BLONDE RAY      3       1.6     23/04/2024      Plymouth
BOY JACK            SPOTTED RAY     5       1.2     23/04/2024      Plymouth
BOY JACK            THORNBACK RAY   1       6.3     23/04/2024      Plymouth
BOY JACK            THORNBACK RAY   2       15.7    23/04/2024      Plymouth
BOY JACK            THORNBACK RAY   3       10.9    23/04/2024      Plymouth
BOY JACK            THORNBACK RAY   4       2.6     23/04/2024      Plymouth
BOY JACK            LOBSTER         1       2.7     23/04/2024      Plymouth
BOY JACK            LOBSTER         2       1.1     23/04/2024      Plymouth
BOY JACK            RAY BACKS       1       42.1    23/04/2024      Plymouth

船舶和位置信息始终位于同一列中,但不同部分之间可以有任意数量的行。我尝试使用偏移量和 Vlookup,但没有任何方法可以接近工作。

我只是在逃避尝试这样做,还是有一种我没有想到的可行方法?

excel vba
1个回答
0
投票

我会用一段简单的代码来做到这一点:

循环所有数据。查看每个块顶部定义船只/位置的列(我假设这是 B 列)。 将船只名称以及下一行的位置保存到变量中(我将它们命名为

vessel
location
)。

对于接下来的行,将容器和位置写入该行的相应单元格中(我假设列 A 和 F)。

如果你发现一个空行,你就知道一个新的数据块开始了——重置变量,整个过程再次开始。

Sub testSub()
    With ActiveSheet
        Dim row As Long, lastRow as long
        lastRow = .Cells(.Rows.Count, "B").End(xlUp).row  ' Get number of rows
        Dim vessel As String, location As String        
        For row = 1 To lastRow
            Dim cellValue As Variant
            cellValue = .Cells(row, 2)
            If cellValue = "" Then
                ' A new block starts
                vessel = ""
                location = ""
            ElseIf vessel = "" Then
                ' First row of block: read Vessel
                vessel = cellValue
            ElseIf location = "" Then
                ' Second row of block: read Location
                location = cellValue
            Else
                If .Cells(row, "A") = "" Then .Cells(row, "A") = vessel
                If .Cells(row, "F") = "" Then .Cells(row, "F") = location
            End If
        Next row
    End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.