怎样用vba显示选择区域的第一个单元格的行的数值,列的数值

怎样用vba显示选择区域的第一个单元格的行的数值,列的数值,第1张

实现的方法和详细的 *** 作步骤如下:

1、第一步,显示该单元格中所选单元格的行号和列号,并使用VBA在以下两个单元格中进行显示,见下图,转到下面的步骤。

2、第二步,完成上述步骤后,按“Alt +  F11”打开VBA编辑界面,选择当前工作表以编写代码,见下图,转到下面的步骤。

3、第三步,完成上述步骤后,以下代码是当前单元格的行号,并将其放在当前单元格的下一个单元格中,见下图,转到下面的步骤。

4、第四步,完成上述步骤后,以下代码用于获取当前单元格的列号,并将其放在当前单元格下面的第二个单元格中,见下图,转到下面的步骤。

5、第五步,完成上述步骤后,编写代码完成,单击“运行”按钮(或按F5键),见下图,转到下面的步骤。

6、第六步,完成上述步骤后,当返回Excel时,可以看到当前单元格的行号和列号,见下图。这样,就解决了这个问题了。

Excel如果用VBA应该可以做到。但是即使用VBA也是编程,理论上也应该给劳务费。都要花不少功夫去做的,不是写个简单的函数处理些简单的数据。帮别人写简单的公式,通常我也不要钱,一般找我写公式的人还会给打赏一点点红包表示感谢的,毕竟是需要动脑筋才能产生的效果,提高工作效率的。如果写复杂的公式我还要收费呢。写一个较为复杂的功能,可能需要构思很长时间,还需要逐步验证,需要考虑部分会不会出现bug,或者其他错误,还要测试在各种条件下会不会出问题。费时间费精力,为什么不能要劳务费?Excel是一个灵活送数据库,可计算可编程,即使能实现这些功能,也需要耗费脑细胞去构思,需要动手写,需要反复测试验证的。不要说用Excel能做出就没价值。
当然,用其他编程能实现,也当然该给劳务费。花时间精力达成其要求,凭什么不能收费?它能说,我的小麦用人就能收割,然后它用别人收割机收割就可以不给钱了?

Option Explicit
Sub 发票号查询()
ApplicationScreenUpdating = False '关闭屏幕刷新

Dim j&, m&, k&, i&

j = Sheets("资料信息")[A65536]End(3)Row '计算资料信息表数据总行数
m = Sheets("同一发票号下商品信息")[A65536]End(3)Row '计算同一发票号下商品信息表数据总行数
Sheets("同一发票号下商品信息")Rows("3:" & m + 1)Delete '删除同一发票号下商品信息表第3到最后一个有数据的行
k = 2 '计数器k初始化为2 假设表头有2行,提取的数据copy的位置从第3行开始
For i = 2 To j 'i从第2行循环到资料信息表的最后一行
If Sheets("资料信息")Cells(i, "x") = Sheets("同一发票号下商品信息")Range("B1") Then '如果资料信息表的第i行第x列的值与同一发票号下商品信息表的B1单元格数据相同
k = k + 1 '计数器k的值+1
Sheets("资料信息")Rows(i)Copy Sheets("同一发票号下商品信息")Range("A" & k) '资料信息表第i行复制到同一发票号下商品信息表的A & k单元格 k为计数器的当前值,例如k=3就是A3单元格
End If
Next

[B1]Select

ApplicationScreenUpdating = True '恢复屏幕刷新

End Sub

Sub a()
Dim i As Integer
For i = 0 To UBound(Split(SelectionAddress, ","))
MsgBox Split(Split(SelectionAddress, ",")(i), "$")(2)
Next
End Sub
刚才又思考了一下,下面代码更加简单实用强大。
Sub test()
For Each c In SelectionRows
MsgBox cRow
Next
End Sub

用以下代码可实现:
Sub main()
Sheets("782 Forward Report")Activate
For i = 1 To Range("C65536")End(3)Row
If Cells(i, 3) = "Deutsche Bank" Then
For j = 1 To 256
Sheets("testing")Cells(i, j) = Cells(i, j)
Next
End If
Next
Sheets("testing")Columns("A:B")Delete
Sheets("testing")Columns("I:XX")Delete
End Sub
关于题目中出现的不能获取最大行的问题,是用Range("C65536")End(3)Row来解决的
关于End的相关知识如下:
For irow = 1 To [A65536]End(3)Row
If Abs(Cells(irow, 1)End(2) - Cells(irow, 256)End(1)) / Cells(irow, 1)End(2) > 01 Then Cells(irow, 1)End(2)(1, 2) = Cells(irow, 256)End(1)
Next
括号中的1、2、3、4分别代表向左、向右、向上、向下。END(x)表示从指定的单元格向左、向右、向上、向下最后一个有效RANGE
以Cells(irow, 1)End(2)为当前单元格,向右移一位。
假如Cells(irow, 1)End(2)为B2,Cells(irow, 1)End(2)(1, 2) 为C2
end(xlup)是向上,end(xldown)是向下,end(xltoleft)是向左,end(xltoright)是向右
关于[A65536]End(xlUp)row 中的[A65536]
在1995-2006年,excel工作簿包含65536行,但现在的office 2007中工作簿包含1048576行。[A65536]就是A列的最后一行的意思,这段话的意思就是,从A列最后一行向上找,找到有数据的行为止。
是从A列最下面往上遇到的有数据的列号
如果{A27}是你数据的最后列
I=[A65536]End(xlUp)row
则I就是27
[a65536]End(3)的意思是查找A列最后一个非空单元格,比如找到非空单元格为A2
[a65536]End(3)(2, 1)
(2,1)是数据行最末行的下一空单元格;(1,2)是数据行最末一个单元格的右侧单元格

1、将单元格所选单元格的行号和列号,分别用VBA显示在下面的两个单元格中,

2、按下Alt+F11,打开VBA编辑界面,选择当前工作表编写代码,

3、下面代码是得到当前单元格的行号并放到当前单元格下一个单元格中:

4、下面代码是得到当前单元格的列号并放到当前单元格下面第二个单元格中:

5、代码编写完成,点击运行子过程按钮(或按下F5),

6、最后返回Excel中,就可以看到得到了当前单元格的行号和列号,


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13339942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存