2016-12-07 5 views
0

私は、各クライアントのタイムカードから日単位の時間を合計して1日の合計時間を算出できる関数を作成しようとしています。各クライアントには、単一のワークブック内に独自のシートがあります。複数のシートからExcel VBAを合計

Function LastSheet() 
Application.Volatile 
LastSheet = Sheets(Sheets.Count).Name 
End Function 

Function FirstSheet() 
Application.Volatile 
FirstSheet = Sheets(3).Name 
End Function 

そして、もう一つは、最後のシートを見つけるために:

現在、私は最初のクライアントとなっシート(ワークブックで3枚目)を決定する機能を持っています

和算機能でこれらを動作させるのに問題がある部分です。

=sum(FirstSheet():LastSheet()!A1 

これは基本的に達成したいことです。問題は、文字列に変換せずに連結する方法がわからず、シートとセルの参照であることを認識していないということです。

ご協力いただければ幸いです。

+1

を私はあなたの質問に答えた場合、私に教えてください - あなたはより多くの助けが必要な場合、私に知らせて自由に感じます。 – user1274820

答えて

1

したがって、たとえば式は次のようになります。すべてのシートにSheet2-Sheet4A1:A5を合計う

=SUM(Sheet2!A1:A5,Sheet3!A1:A5,Sheet4!A1:A5)

これを行うためにVBAコードを書く必要がありますか?

数式として一度入力することはできませんか?

また、VBAを書いて数式を生成する手間がある場合は、VBAコードで合計を行うほうが意味があります。

ない場合は、この試してみてください。

Sub GenerateTheFormula() 
Dim x, Formula 
Formula = "=SUM(" 'Formula begins with =SUM(
For x = 3 To Sheets.Count 
    Formula = Formula & Sheets(x).Name & "!A1," 'Add SheetName and Cell and Comma 
Next x 
Formula = Left(Formula, Len(Formula) - 1) & ")" 'Remove trailing comma and add parenthesis 
Range("B1").Formula = Formula 'Where do you want to put this formula? 
End Sub 

結果:

Results

+1

私はgifが好きです。空白を減らしてタブを表示することを検討してください。 Excelのウィンドウサイズを変更した私のデモと比較する[デモ](https://www.dropbox.com/s/r6m7p08nmqey02q/demo.gif?dl=0) –

+0

ハハ、チップのおかげで - 一緒に投げます通常、それは悪い考えではありません。私はほとんどシートを表示する必要はありません - 私はほとんどファイルサイズがひどいので、gifのサイズを小さくすることについてほとんど心配しています。 – user1274820

+0

あなたは私にチップをくれたので、私はあなたに1つを与えます。チェックアウト 'ScreenToGif'。それは無料で超便利です。 https://screentogif.codeplex.com/ – user1274820

1

関数は、文字列ではなく、実際のワークシートを返します。ワークシートは文字列をうまく解析しません。だから、Evaluate関数を使用して第三の機能を追加します。

Function MySum(rng As Range) 

MySum = Application.Caller.Parent.Evaluate("SUM(" & FirstSheet & ":" & LastSheet & "!" & rng.Address & ")") 

End Function 

は、その後、あなたは、単にそれを呼び出します:MySum(A1)

それはあなたがすでにとして評価できる文字列を作成するために作成した他の二つの機能を使用しています式。

+0

これはうまくいくはずですが、#VALUEが得られます!私はそれを使用しようとするとき。私はそれが違いを生むならば、Excel 2016にいる。 – bearded4glory

+0

私のOffice 365 Excelで動作します。私は窓を使用しています。私はExcel 2016について確信していません。 –

+0

最初はうまくいかなかった理由はわかりませんが、他の関数をかなり短くしてしまったので、他の関数をロールバックしてしまいました。 ありがとう! – bearded4glory

0

私はウルの質問を完全に理解できませんでしたが、私は理解していたので、別のクライアントの異なるシートを持っていますが、1列目の日付と2の列を含みます。 は、クライアントとカラム2は、総時間に

Sub countHours() 
Dim last_Row As Integer 
Dim sum As Double 
sum = 0 
    'Because I know number of client 
    For i = 1 To 2  'i shows client particular sheet 

    last_Row = Range("A" & Rows.Count).End(xlUp).Row 

    Sheets(i).Activate 

    For j = 2 To last_Row 

    'In my Excel sheet column 1 contains dates and column 2 contains number of hours 

    sum = sum + Cells(j, 2) 
    'MsgBox sum 
    Next j 

    'Sheet 3 is my final sheet 
    ThisWorkbook.Sheets(3).Cells(i + 1, 2).Value = sum 
    sum = 0 
    Next i 

    End Sub 

それを試してみてくださいハッピーコーディング含まれています

関連する問題