使用基于宏/ excel的公式

时间:2015-11-28 09:04:31

标签: excel excel-vba vba

我一直在excel手动创建配方。如果变量的数量很大,则该过程变得非常耗时。 Excel中是否有任何内置功能可以有效地用于创建配方?我试着写一个宏来生成这个公式,但还没有成功。如果需要,我可以分享。

一个这样的约束的例子是:

Cik - Cpk + Dipk - Tijk >= 0

其中
i = 1,2,...,8
'p'不等于'i',它包含值1,2,...,8
k = 1,2,...,8
j = 64个值存储在A1:A64中(i和k的总和组合= 8 * 8 = 64,例如11,12 .... 88)

当我手动生成配方并带有一点excel drag cell帮助时,它看起来像这样 -

C11-C21+D121-T171>=0    (7 is stored in cell A1)  
C11-C31+D131-T171>=0  
.  
.  
C11-C81+D141-T171>=0  
C21-C11+D211-T231>=0  
C21-C31+D231-T231>=0  
.  
.  
C21-C81+D241-T231>=0  
.  
.  
.  
.  
C12-C22+D122-T152>=0  
C12-C32+D132-T152>=0  
.  
.  
.  

C88-C78+D878-T838>=0 etc.  

1 个答案:

答案 0 :(得分:0)

从你的问题中无法判断你想用这些公式做什么,但是为了让你继续下面将给出一个所有排列的列表。这不是最快捷的方式,但代码应该足够明显,以便您根据需要进行调整。

这会将它们全部输出到Sheet1,因此请确保在运行此表之前保存了该表上的任何内容或在新工作簿中运行它。如果您确实需要单元格引用但是我没有禁用自动计算,则取消注释公式行,因此运行时间会更长。

Dim i As Integer
Dim k As Integer
Dim p As Integer
Dim ik As Integer
Dim pk As Integer
Dim ipk As Integer
Dim ji As Integer
Dim jk As Integer
Dim ijk As Integer
Dim r As Long
Dim formulaText As String

r = 0
For i = 1 To 8
    For p = 1 To 8
        If p <> i Then
            For k = 1 To 8
                ik = i * 10 + k
                pk = p * 10 + k
                ipk = i * 100 + pk
                For ji = 1 To 8
                    For jk = 1 To 8
                        r = r + 1
                        ijk = i * 100 + ji * 10 + jk
                        formulaText = "C" & CStr(ik) & "-C" & CStr(pk) & "+D" & CStr(ipk) & "-T" & CStr(ijk)
                        Sheet1.Cells(r, 1).Value = formulaText
                        'Sheet1.Cells(r, 2).Formula = "=" & formulaText
                    Next
                Next
            Next
        End If
    Next
Next