2017-02-11 7 views
1

SUMIFSの2番目の式で何が間違っているのか教えてください。" < " &$F$1を使用してください。返されるのは、すべてのセルでFALSEです。 <のない最後のSUMIFSは正常に動作します。SUMIFS VBAの数式が "<"

Sub SumGroups() 

Worksheets("Database").Activate 
Dim lastCode, lastFiltCode As Integer 
Dim Formula As String 

'Determine Last Row in Column O (Unfiltered Codes) 
lastCode = Range("O" & Rows.Count).End(xlUp).Row 

'Filter Unique Codes into Column A Sheet2 
Range("O1:O" & lastCode).AdvancedFilter Action:=xlFilterCopy, _ 
     CopyToRange:=Sheet2.Range("A1"), Unique:=True 
'Determine last Row in Column A (Filtered Codes) 
Worksheets("Sheet2").Activate 
lastFiltCode = Sheet2.Range("A" & Rows.Count).End(xlUp).Row 

'Place SUMIF Formulas in Columns Sheet2  
Worksheets("Sheet2").Range("B2:B" & lastFiltCode).Formula = _ 
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2)" 
Worksheets("Sheet2").Range("D2:D" & lastFiltCode).Formula = _ 
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & "," < " &$F$1)" 
Worksheets("Sheet2").Range("F2:F" & lastFiltCode).Formula = _ 
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & ",$F$1)" 

End Sub 
+0

あなたが不必要な '選択'と '活性化'をたくさん持っているのは –

+0

範囲$ I $ 2:$ I $は日付、Cell $ F $ 1は日付、 – Anthony

+0

こんにちは、$ <$ F $ 1)私はランタイムエラー '1004':アプリケーション定義またはオブジェクト定義エラーが表示されます。あなたの時間を感謝します。ありがとう。 – Anthony

答えて

0

まず、そのほかに

、あなたはミキシングアップされているいくつかのことを:

  • Worksheets("Database").ActivateWorksheets("Sheet2").Activateを使用しないようにしてください、そして代わりに、完全修飾のワークシートを使用してのように、範囲:。With Worksheets("Database")lastCode = .Range("O" & .Rows.Count).End(xlUp).Row
  • をあなたが持っているSheet2 nd Worksheets("Sheet2")、これらの2つは常に同じワークシートを意味するわけではありません。 Sheet2(コードネームで)の名前を "Something"に変更すると2番目のシートになり、Sheet3(コード名で)の名前を "Sheet2"に変更すると問題が発生します。どの方法を使用するか決めてください(私はWorksheets("Sheet2")を使いたい)。
  • Dim lastCode, lastFiltCode As Integerを意味する。lastCodeは、実際にはVariantであり、lastFiltCodeIntegerである。とにかく、最後の行を取得しようとしているときは、これらの変数の両方にLongを使用する方がよいでしょう。

コード

Option Explicit 

Sub SumGroups() 

Dim lastCode As Long, lastFiltCode As Long 

'Determine Last Row in Column O (Unfiltered Codes) 
With Worksheets("Database") 
    lastCode = .Range("O" & .Rows.Count).End(xlUp).Row 

    'Filter Unique Codes into Column A Sheet2 
    .Range("O1:O" & lastCode).AdvancedFilter Action:=xlFilterCopy, _ 
      CopyToRange:=Worksheets("Sheet2").Range("A1"), Unique:=True   
End With 

With Worksheets("Sheet2") 
    'Determine last Row in Column A (Filtered Codes) 
    lastFiltCode = .Range("A" & .Rows.Count).End(xlUp).Row 

    'Place SUMIF Formulas in Columns Sheet2 
    .Range("B2:B" & lastFiltCode).Formula = _ 
     "=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2)" 

    .Range("D2:D" & lastFiltCode).Formula = _ 
     "=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & "," & Chr(34) & "<" & Chr(34) & "&$F$1)" 

    .Range("F2:F" & lastFiltCode).Formula = _ 
     "=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode & ",A2,Database!$I$2:$I$" & lastCode & ",$F$1)" 
End With 

End Sub 
+0

ヒントをお寄せいただきましたShai Rado – Anthony

+0

@Anthonyあなたはここで得られた回答のうちの一つを「回答」としたいかもしれません。 –

+0

こんにちはシャイ・ラドー、私はこのサイトで初めてです。私は^の矢をクリックした。うまくいけば私は正しいことをした。 – Anthony

1
Worksheets("Sheet2").Range("D2:D" & lastFiltCode).Formula = _ 
"=SUMIFS(Database!$M$2:$M$" & lastCode & ",Database!$O$2:$O$" & lastCode &  ",A2,Database!$I$2:$I$" & lastCode & ","" < "" &$F$1)" 

これはそれを行います。 <を引用符で囲みます。 。私は式の内側に「カッコ"を追加するためにChr(34)を使用して式の内側<$F$1を得るために

+0

二重引用符を使用していただきありがとうございます! Mオマールあなたは学者で、紳士です。 – Anthony

2

他の回答が働く理由だけではなく、明確にする:

SUMIFS(ならびにCOUNTIFとして文字列演算子を必要とする種々の他のExcel関数は、()という論理演算子を期待します次の文は文字列として表現されます。つまり、「myString」などのスピーチマークで囲まれます。

式i例えばストリング。 ActiveCell.Formula = "=If(A1=3, 1, 0)"コンパイラは、文字列を示す一組の引用符について混乱します。たとえば、これは動作しません:ActiveCell.Formula = "=If(A1=3, "Yes", "No")"

技術的には、これに対処する方法は、必要な引用符を所有する引用符で囲むことです。 """ myValue """

しかし、これはすぐに混乱するようになります。代わりに、必要な文字を返すにはCharacter関数を使用します。この場合34。 chr(34) & myvalue & (chr34)

+0

すてきな説明だから、私が持っている '' 'を数えずに' Chr(34) 'を使うのが好きな理由です –