所以我正在尝试编写一个公式,允许我将第2页上的某个值复制到工作表1上,当且仅当它存在于列#34; Num Available"
Sheet 2/Line 1:
B C
PRODUCT "NUM AVAILABLE"
A 12
B
C 15
D 13
E
Sheet 1:
RUN 1
PRODUCT "NUM AVAILABLE"
A 12
RUN 2
PRODUCT "NUM AVAILABLE"
C 15
RUN 3
PRODUCT "NUM AVAILABLE"
D 13
我使用的公式是Run 1:
=IF('Line 1'!C5>0,'Line 1'!$B5,IF('Line 1'!C6>0,'Line 1'!$B6,IF('Line 1'!C7>0,'Line 1'!$B7,IF('Line 1'!C8>0,'Line 1'!$B8,IF('Line 1'!C9>0,'Line 1'!$B9,IF('Line 1'!C10>0,'Line 1'!$B10,IF('Line 1'!C11>0,'Line 1'!$B11,IF('Line 1'!C12>0,'Line 1'!$B12,IF('Line 1'!C13>0,'Line 1'!$B13,IF('Line 1'!C14>0,'Line 1'!$B14,IF('Line 1'!C15>0,'Line 1'!$B15,IF('Line 1'!C16>0,'Line 1'!$B16,IF('Line 1'!C17>0,'Line 1'!$B17,IF('Line 1'!C18>0,'Line 1'!$B18,IF('Line 1'!C19>0,'Line 1'!$B19,IF('Line 1'!C20>0,'Line 1'!$B20,IF('Line 1'!C21>0,'Line 1'!$B21,IF('Line 1'!C22>0,'Line 1'!$B22,IF('Line 1'!C23>0,'Line 1'!$B23,IF('Line 1'!C24>0,'Line 1'!$B24,IF('Line 1'!C25>0,'Line 1'!$B25,IF('Line 1'!C26>0,'Line 1'!$B26,IF('Line 1'!C27>0,'Line 1'!$B27, "NO ENTRY")))))))))))))))))))))))
线条与表格相同。
我的问题是,当我在其他线路上使用此代码并增加我正在查看的运行次数时,此代码最终变得庞大。此代码打印出Run 2的产品名称(如果它存在于" Number available"并且在Run 1中不存在
Run 2:
=IF(AND(NOT(D$5='Line 1'!$B5),'Line 1'!C5>0),'Line 1'!$B5,IF(AND(NOT(D$5='Line 1'!$B6),'Line 1'!C6>0),'Line 1'!$B6,IF(AND(NOT(D$5='Line 1'!$B7),'Line 1'!C7>0),'Line 1'!$B7,IF(AND(NOT(D$5='Line 1'!$B8),'Line 1'!C8>0),'Line 1'!$B8,IF(AND(NOT(D$5='Line 1'!$B9),'Line 1'!C9>0),'Line 1'!$B9,IF(AND(NOT(D$5='Line 1'!$B10),'Line 1'!C10>0),'Line 1'!$B10,IF(AND(NOT(D$5='Line 1'!$B11),'Line 1'!C11>0),'Line 1'!$B11,IF(AND(NOT(D$5='Line 1'!$B12),'Line 1'!C12>0),'Line 1'!$B12,IF(AND(NOT(D$5='Line 1'!$B13),'Line 1'!C13>0),'Line 1'!$B13,IF(AND(NOT(D$5='Line 1'!$B14),'Line 1'!C14>0),'Line 1'!$B14,IF(AND(NOT(D$5='Line 1'!$B15),'Line 1'!C15>0),'Line 1'!$B15,IF(AND(NOT(D$5='Line 1'!$B16),'Line 1'!C16>0),'Line 1'!$B16,IF(AND(NOT(D$5='Line 1'!$B17),'Line 1'!C17>0),'Line 1'!$B17,IF(AND(NOT(D$5='Line 1'!$B18),'Line 1'!C18>0),'Line 1'!$B18,IF(AND(NOT(D$5='Line 1'!$B19),'Line 1'!C19>0),'Line 1'!$B19,IF(AND(NOT(D$5='Line 1'!$B20),'Line 1'!C20>0),'Line 1'!$B20,IF(AND(NOT(D$5='Line 1'!$B21),'Line 1'!C21>0),'Line 1'!$B21,IF(AND(NOT(D$5='Line 1'!$B22),'Line 1'!C22>0),'Line 1'!$B22,IF(AND(NOT(D$5='Line 1'!$B23),'Line 1'!C23>0),'Line 1'!$B23,IF(AND(NOT(D$5='Line 1'!$B24),'Line 1'!C24>0),'Line 1'!$B24,IF(AND(NOT(D$5='Line 1'!$B25),'Line 1'!C25>0),'Line 1'!$B25,IF(AND(NOT(D$5='Line 1'!$B26),'Line 1'!C26>0),'Line 1'!$B26,IF(AND(NOT(D$5='Line 1'!$B27),'Line 1'!C27>0),'Line 1'!$B27,IF(AND(NOT(D$5='Line 1'!$B28),'Line 1'!C28>0),'Line 1'!$B28,IF(AND(NOT(D$5='Line 1'!$B29),'Line 1'!C29>0),'Line 1'!$B29,IF(AND(NOT(D$5='Line 1'!$B30),'Line 1'!C30>0),'Line 1'!$B30,IF(AND(NOT(D$5='Line 1'!$B31),'Line 1'!C31>0),'Line 1'!$B31, "NO ENTRY")))))))))))))))))))))))))))
当我将Runss的数量增加到5时,我超过了我可以使用的字符数。我确实需要一些帮助。公式正是我所需要的 - 我只需要一种更有效的方法来实现我的目标。非常感谢VBA或公式简化建议。
答案 0 :(得分:1)
这也可以通过矩阵公式实现。
在Sheet1 B2中:
=INDEX(Sheet2!B$2:B$10000,SMALL(IF(Sheet2!$C$2:$C$10000>0,ROW(Sheet2!$C$2:$C$10000)-1),ROW(A1)))
将公式粘贴到单元格中,然后按[ctrl] + [shift] + [enter]创建矩阵公式。然后它看起来像:
{=INDEX(Sheet2!B$2:B$10000,SMALL(IF(Sheet2!$C$2:$C$10000>0,ROW(Sheet2!$C$2:$C$10000)-1),ROW(A1)))}
现在您可以向下和向右复制此公式。
问候
阿克塞尔
答案 1 :(得分:0)
我建议您使用this answer中的代码并根据您的需要进行调整。
核心根据需要将值读入数组,循环创建输出数组,然后在一次操作中将结果写出。
x1 = Range("A2").Resize(N, 1).Value
x2 = Range("B2").Resize(N, 1).Value
' Declare array3
ReDim x3(1 To N, 1 To 1)
'Process arrays
For i = 1 To N
If Not IsEmpty(x2(i, 1)) Then
x3(i, 1) = x2(i, 1)
Else
x3(i, 1) = x1(i, 1)
End If
Next i
'Output array 3
Range("C2").Resize(N, 1).Value = x3
我不能从给定的信息中说出太多(也许屏幕截图可以帮助)所以这是我现在能做的最好的事情。也许你需要两个循环,在外循环上创建一个新的工作表,并在内循环中复制值。