1

さて、これが私が達成したいことです。この例では、4 つのデータ シートと合計シートで構成される 1 つのワークブックがあります。4 つのデータ シートのそれぞれには、同じパターンに従って類似した名前が付けられており、唯一の違いは日付です。(例: 9854978_1009_US.txt。1009 は変更日で、残りのファイル名は同じです)。これらのドキュメントのそれぞれで、列 F には合計を求めたい一連の数値が含まれていますが、実際に数値が含まれている F のセルの数はわかりません。(ただし、数字の下に追加情報が表示されることはないため、理論的には F 列全体を足し合わせることができます)。また、時間の経過とともに新しいファイルをワークブックに追加し、列 F からデータを収集するコードを書き直す必要はありません。基本的に、私が達成したいのは ' totals' ドキュメントを使用して、'9854978_????_US.txt' という名前のブック内のドキュメントからすべての列 F を取得します。疑問符はファイル名に基づいて変化します。純粋なExcelコードでこれを行うにはどうすればよいですか?

4

2 に答える 2

0

このような場合、VBA を使用することをお勧めしますが、Excel の数式のみを使用した (明らかに非効率的な) ソリューションを見つけました。

新しいシートのセル A1 に 1 を書き、次に下のセルに 2 を書きます。2 つのセルを選択し、下にドラッグします。オートコンプリート機能は、1 からドラッグの最後までの数値を生成します。9999になるまで続けて

セル B1 に数式を入力し=TEXT(A1,"000#")ます。数式を下にドラッグして、0001から9999までのテキストを取得します。

セル C1 に数式を入力し="9854978_"&B1&"_US.txt"ます。式を下にドラッグして、テキストを 9854978_0001_US.txt から 9854978_9999_US.txt に取得します

セル D1 に次の式を入力します =if(ISERROR(SUM(INDIRECT(C1&"!F:F"))),0,SUM(INDIRECT(C1&"!F:F")))。数式を下にドラッグして合計を取得します。

解決策は、可能な数のセットを減らすと、はるかに非効率になる可能性があります。年がない場合、可能な日付は 365 しかありません。

PS: ローカライズ版の Excel から数式を翻訳したため、数式が少し間違っている可能性があります。

于 2010-03-11T21:43:08.833 に答える
0

この計算を行う関数は次のとおりです。

Function TotalColF() As Double

    Dim wks As Worksheet

    For Each wks In ThisWorkbook.Worksheets
        If left(wks.name,7) = "9854978" then
            TotalColF = TotalColF + Application.WorksheetFunction.Sum(wks.Range("F:F"))
        End If
    Next wks

End Function

これは揮発性関数ではないため、別のシートを追加するか、列 F の値を変更すると、Ctrl + Alt + F9 を実行して再計算を強制するまで、修正された合計は表示されません。

常に正しい合計を表示する揮発性関数が必要な場合は、お知らせください。揮発性関数は再計算時間を遅くすることがありますが、それは問題にならないかもしれません。

VBA 経由で新しいシートを追加する場合、再計算を強制するために使用できる VBA 命令があります: Application.CalculateFull

于 2010-04-16T09:08:38.667 に答える