将用户定义的字符串插入公式

时间:2018-10-18 12:07:54

标签: excel vba excel-vba

在不使用VB 12年之后,我的一个朋友问我是否能够提供帮助,所以像个傻瓜一样,我同意提供帮助。在大多数情况下,我已经能够使用简单的VB自动执行过程。但是,我对最后一部分有些困惑,不确定是否有可能或实现该问题的最佳方法。

我的首要任务是复制一份报告,并按照用户输入的名称重命名该标签。

几个任务之后,我意识到我需要接受用户输入并将其插入公式中,然后将其放入单元格中。随着时间(每月),该公式将需要更改列。

以下是我到目前为止所做的事情,感谢您的帮助和投入。

sName是用户定义的输入,我想我已经正确地将其声明为全局变量

sNameSPVCLookup中用作选项卡的名称(不起作用)

sNamecountif中用作公式的一部分(不起作用)

  ' will copy SPC Report to new tab and ask user to name the tab

Dim sName As String

    Sub CopyRename()
        'Dim sName As String
        Dim wks As Worksheet
        Worksheets("SPC Report").Copy after:=Sheets(Worksheets.Count)
        Set wks = ActiveSheet
        Do While sName <> wks.Name
            sName = Application.InputBox _
              (Prompt:="Enter new worksheet name")
            On Error Resume Next
            wks.Name = sName
            On Error GoTo 0
        Loop
        Set wks = Nothing

    End Sub

    '------------------------
    Sub CreateDA()
        Dim ws As Worksheet
        With ThisWorkbook
            Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
            ws.Name = "Departmental Analysis"
        End With
    End Sub
    '------------------------
    Sub SPCVlookup() 
    'Sheets("sName").Select 'this needs to be user defined 
     Range(Range("E2"), Range("E2").End(xlDown)).Formula = "=VLOOKUP(D2,'Card Exchange'!$A$1:$V$218,6,FALSE)"
     End Sub

    Sub Countif()
    Sheets("Departmental Analysis").Select

    ' i think i need a for loop to cycle through the range coloums
     Range(Range("E2"), Range("E2").End(xlDown)).Formula = "=COUNTIFS('sname'!$A$1:$E$12104,A3)"
     End Sub

2 个答案:

答案 0 :(得分:0)

您在这里有两个问题。


Sub SPCVlookup() 
    Sheets("sName").Select 'selects the sheet called "sName"
    Range(Range("E2"), Range("E2").End(xlDown)).Formula = "=VLOOKUP(D2,'Card Exchange'!$A$1:$V$218,6,FALSE)"
End Sub

此代码选择名为"sName"的工作表。删除""标记:

Sub SPCVlookup() 
    Sheets("sName").Select 'selects the sheet called "sName"
    Range(Range("E2"), Range("E2").End(xlDown)).Formula = "=VLOOKUP(D2,'Card Exchange'!$A$1:$V$218,6,FALSE)"
End Sub

Range(Range("E2"), Range("E2").End(xlDown)).Formula = "=COUNTIFS('sname'!$A$1:$E$12104,A3)"

这有点棘手。您需要将sName复制到公式中,但为此需要转义(以防sName包含引号)。您可以通过将每个引号加倍来做到这一点:

Replace(sName, """", """"&"""")

所以...

Range(Range("E2"), Range("E2").End(xlDown)).Formula = "=COUNTIFS('" & Replace(sName, """", """"&"""") & "'!$A$1:$E$12104,A3)"

sName更改时,这不会更新单元格;为此,您需要设置电子表格名称。 VBA和公式中的变量不共享。

答案 1 :(得分:-1)

这使数据在完成子或功能时得以保留。没有特殊字符。

import numpy as np

def create_baskets(num_baskets, max_basket_size, unique_items):
    """
    Create list of baskets of variable length >= 3

    Parameters
    ----------
    num_baskets: 
        number of baskets (sub-lists)
    max_basket_size: maximum basket size
        Baskets will be of size range(3, max_basket_size)
    unique_items:
        number of unique items

    Returns
    -------
    ret: list of "baskets", of randomly generated length
    """
    baskets = []
    for i in range(num_baskets):
        n = np.random.choice(range(3, max_basket_size), 1)
        basket = np.random.choice(range(0, unique_items), n, replace=False)
        baskets.append(basket)
    return baskets

https://www.experts-exchange.com/articles/1135/Use-Excel's-hidden-data-store-to-share-data-across-VBA-projects.html