2

1 から 50 までのシートと、シート 1 からシート 50 に基づく数式を含む集計シートがあります (非常に長い数式です!)。ただし、マクロを実行するたびに、マクロは 50 枚のシートのうちの 1 つを削除し、集計シートのすべての数式が #Ref になります。

間接関数を使用できることはわかっていますが、非常に長い数式があり、1 つのセルの数式は実際には 50 枚すべてを参照しています。間接関数を1つずつ入れて50枚すべてを参照するには、かなりの時間がかかります。

例: セルの 1 つの数式は次のとおりです。

if(sheet1!A1=2,1,0)+if(sheet2!A1 = 2,1,0)+...+if(sheet50!A1=2,1,0)

この数式を列に沿って行に沿ってドラッグする必要があります。

これをすばやく実行して #Ref エラーを取り除く方法はありますか? マクロまたは数式ベースでこれを行うことは気にしません。助けてください。ありがとう!

4

2 に答える 2

0

削除する前に、削除したいシート名の式を削除するコードを追加できます。

たとえば、「=Sheet1!B1+Sheet2!B1」のような式は「=+Sheet1!B1」になります。

Sub test()
    Dim i As Integer
    Dim deleteSheetName As String  ' sheet name that you want to delete
    Dim currentFormula As String 
    Dim currentFormulaArr() As String

    deleteSheetName = "Sheet2"
    currentFormula = Mid(Cells(1, 1).formula, 2, Len(Cells(1, 1).formula) - 1)
    currentFormulaArr = Split(currentFormula, "+")
    Cells(1, 1).formula = "="
    For i = 0 To UBound(currentFormulaArr)
        If Not currentFormulaArr(i) Like "*" & deleteSheetName & "*" Then
            Cells(1, 1).formula = Cells(1, 1).formula & "+" & currentFormulaArr(i)
        End If
    Next i
End Sub

1セル分だけ作ります。すべてのシートで使用されているすべてのセルをループする必要があります。私の考えを理解していただければ幸いです。

チャフの解決策の方が優れていて速いと思いますが、シートを取り外す前に彼の解決策を適用できます。

... Range("<summary sheet name>").Replace What:="+IF(" & deleteSheetName & "*)", ....

私の笑える英語でごめんなさい。

于 2013-05-31T19:31:51.333 に答える