利用VBA查找excel中一行某列第一次不为空与最后一列不为空的列数

昨日同事有需求,想知道每个商品第一次销售的月份,以及最后一次销售的月份. 本想通过什么excel函数来解决,但是找了半天也没找到合适的,最后还是通过VBA来解决吧.

使用方法:

Excel工具-宏-Visual Basic编辑器 在左侧栏中点右键,

插入-模块

然后输入:


 1 Function Last0(ByVal Int_Row As Integer) As Integer
 2     Last0 = 14
 3     Do While Cells(Int_Row, Last0) = "" And Last0 >= 3
 4         Last0 = Last0 - 1
 5     Loop
 6 
 7 End Function
 8 
 9 '这里需要注意的是 函数的返回值貌似是 变量必须与方法名一致 很奇葩的要求....
10 Function Frist0(ByVal Int_Row As Integer) As Integer
11     Frist0 = 3
12     Do While Cells(Int_Row, Frist0) = "" And Frist0 <= 255
13         Frist0 = Frist0 + 1
14     Loop
15     If Frist0 > 255 Then
16         Frist0 = 8888
17     End If
18 End Function

 

然后在单位格中可以直接引用

例如:=Frist0(4) 返回值即为4行中第一个不为0的单元格列号,

如果函数返回8888,表明这行没有数据。

### 使用 `VLOOKUP` 返回整行数据 在 Excel 中,`VLOOKUP` 函数本身并不支持直接返回整个行的数据。然而,可以通过一些巧妙的方法来实现这一目标。 #### 方法一:使用数组公式和辅助 为了返回整行数据,可以在工作表中创建多个辅助,每个辅助对应要返回的不同字段。假设有一个表格如下: | ID | Name | Age | |----|-------|-----| | 1 | 张三 | 25 | | 2 | 李四 | 30 | 如果希望根据 `ID` 查找并返回对应的整行数据,则可以分别针对每一列编写单独的 `VLOOKUP` 公式[^1]。 对于 `Name` : ```excel =VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) ``` 具体来说,当查找 `ID` 为 1 的记录时,在 `B8` 单元格输入以下公式获取名字: ```excel =VLOOKUP(1, A2:C4, 2, FALSE) ``` 同样地,在另一个单元格中通过调整第三参数 `col_index_num` 获取其他的信息,比如年龄: ```excel =VLOOKUP(1, A2:C4, 3, FALSE) ``` 这种方法虽然简单易懂,但对于大量数据或频繁更新的情况不太实用。 #### 方法二:利用 `INDEX` 和 `MATCH` 组合 更为灵活的方式是采用 `INDEX` 配合 `MATCH` 函数组合。这允许动态指定待检索区域以及所需的结果位置。考虑同样的例子,现在想要一次性获得所有相关联的信息而不仅仅是单个属性值。 构建一个通用表达式用于任意给定键(这里是 `ID`),并通过改变最后一项中的相对偏移量来访问不同的内容: ```excel =INDEX(B$2:B$4,MATCH($A8,$A$2:$A$4,FALSE)) ``` 此公式的含义是从范围 `$A$2:$A$4` 寻找等于 `$A8` 的项目,并将其索引传递给 `INDEX` 函数作为行号;接着从另一组数据源 (`B$2:B$4`) 提取出相应的条目。 重复上述过程以覆盖所有感兴趣的即可得到完整的行记录。 #### 方法三:借助第三方插件或宏编程 除了内置功能外,还可以探索更多高级解决方案,例如安装额外加载项或是编写 VBA 宏脚本来简化操作流程。这些方法通常提供了更高的自动化程度和支持复杂逻辑的能力,但同时也增加了学习成本和技术门槛。 综上所述,尽管标准版 `VLOOKUP` 不足以满足需求,但是结合其他工具和技术完全可以达成目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值