【发布时间】:2016-03-04 03:36:40
【问题描述】:
我是这个论坛和 vba 语言的新手,所以我希望得到一些指导。我有一个不同工作表的工作簿,但现在只有 3 个重要。第一张和第三张表包含将在 Sheet2 中互连的数据。 在 Sheet1 和 Sheet3 中,我有 Sheet1_Sheet3_Test。这是 Sheet 2 Sheet2_Test,首先是空的,我想自动化它,因为我之前是手动完成这项工作的。在图像中是我需要得到的。到目前为止,我有以下代码,它可以工作并填充 Sheet2 的 C 列。 但我在使用 A 列时遇到问题。我试图简单地使用如下公式:
{=IF(A3=A2;INDEX(Sheet3!$A$3:$A$16;SMALL(IF(ISNUMBER(SEARCH(Sheet1!$B$3;Sheet3!$C$3:$C$16));MATCH(ROW(Sheet3!$C$3:$C$16);ROW(Sheet3!$C$3:$C$16)));ROW(A1)));INDEX(Sheet3!$A3:$A$16;SMALL(IF(ISNUMBER(SEARCH(Sheet1!$B3;Sheet3!$C$3:$C$16));MATCH(ROW(Sheet3!$C$3:$C$16);ROW(Sheet3!$C$3:$C$16)));ROW(A$1))))}
问题是当 C 列中的文本发生更改时出现错误,现在我被卡住了。我不知道开发另一个宏是否会更好,或者我是否可以在公式中更改一些内容。
如果我的问题难以理解,我很抱歉,但解释起来有点困难。 我需要遍历 sheet1 中的每一行,例如:在 Sheet 1 中,我在第 3 行中有 INST - I_1 和 ID - AA。该公式在 sheet3 上搜索 AA 并按顺序返回所有值并填充 sheet 2 中的 A 列。然后它将再次转到 sheet 1 中的第 4 行并再次重复该过程,直到 Sheet1 上没有更多值。
Sub TestSheet2()
Dim Rng As Range
Dim InputRng As Range, OutRng As Range
xTitleId = "Sheet1"
Sheets("Sheet1").Select
Set InputRng = Application.Selection
On Error Resume Next
Set InputRng = Application.InputBox("Select:", xTitleId, InputRng.Address, Type:=8)
xTitleId = "Sheet2"
Sheets("Sheet2").Select
Set OutRng = Application.InputBox("Select:", xTitleId, Type:=8)
Set OutRng = OutRng.Range("A1")
For Each Rng In InputRng.Rows
xValue = Rng.Range("A1").Value
xNum = Rng.Range("C1").Value
OutRng.Resize(xNum, 1).Value = xValue
Set OutRng = OutRng.Offset(xNum, 0)
Next
End Sub
【问题讨论】:
-
真的需要
InputBox吗? -
这只是为了让我更容易。实际上,我在工作表 1 上有超过 2000 个值,我不能一次全部看完。
-
re: ' 我不能一次全部看完。' - 为什么不呢?内存数组处理可能会很快解决这个问题。
-
哼...其实你们两个是对的。我不需要它。就像我说的那样,我是新手,我在上一张表中有一个与此类似的宏,但因为我需要手动输入值。在这 3 张表中我不需要它,我只需要区分已经存在的信息。谢谢,我会改变它!但我仍然有 A 列的问题。仍在尝试解决它,但到目前为止没有运气。
标签: excel vba excel-formula