2017-11-10 2 views
0

ブックにあるすべてのタブを特定の値で検索し、別のブックに日付を返すExcel上の関数があります。今私は、私が開発したVBAマクロとその機能を組み合わせようとしています。私が使用している関数は多くのタブを使って検索しているので、多くの行に分けなければなりませんでした。複数の行に分割された長い関数は、VBAマクロと組み合わせることができません。

私はiserror()とvlookup()を使ってワークブックのタブを使って電子メールを見つけるかどうかを調べるために関数を少し説明します。それが見つかると日付を返します。そうでない場合は、最初のものと同じ特性を持つ別のものを実行します。 2番目のタブでメールが見つかった場合は同じですが、日付を書き込んだら、別のタブをすべて検索するまで別のタブを実行します。

私は、コマンドを実行するために "_"下の行に続けて "_"を文字列の中に入れてはいけません。

私は3つの異なるコードを開発しました。

第一試みる

> ActiveCell.FormulaR1C1 = _ 
>   "=IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week1 [EmailAddress],1,FALSE))),""6/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week2 [EmailAddress],1,FALSE))),""13/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week3 [EmailAddress],1,FALSE))),""20/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week4 [EmailAddress],1,FALSE))),""27/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week5 [EmailAddress],1,FALSE))),""4/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week6 [EmailAddress],1,FALSE))),""11/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week7 [EmailAddress],1,FALSE))),""18/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week8 [EmailAddress],1,FALSE))),""25/12/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[EmailAddress],1,FALSE))),""1/1/2018"" ," & _ 
> "IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[EmailAddress],1,FALSE))),""1/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week10[EmailAddress],1,FALSE))),""8/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week11 [EmailAddress],1,FALSE))),""15/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week12 [EmailAddress],1,FALSE))),""22/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week13 [EmailAddress],1,FALSE))),""29/1/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week14 [EmailAddress],1,FALSE))),""5/2/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week15 [EmailAddress],1,FALSE))),""12/2/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week16 [EmailAddress],1,FALSE))),""19/2/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week17 [EmailAddress],1,FALSE))),""26/2/2018"" ," & _ 
> "IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week18[EmailAddress],1,FALSE))),""5/3/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week19 [EmailAddress],1,FALSE))),""12/3/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week20 [EmailAddress],1,FALSE))),""19/3/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week21 [EmailAddress],1,FALSE))),""26/3/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week22 [EmailAddress],1,FALSE))),""2/4/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week23 [EmailAddress],1,FALSE))),""9/4/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week24 [EmailAddress],1,FALSE))),""16/4/2018"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week025 [EmailAddress],1,FALSE))),""23/4/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week26 [EmailAddress],1,FALSE))),""30/4/2018"", ""Something is Wrong""))))))))))))))))))))))))))" 

実行私は1004

第二ランタイムエラーが上記のよう

ActiveCell.FormulaR1C1 = _ 
     "=IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week1 [Email Address],1,FALSE))),""6/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week2 [Email Address],1,FALSE))),""13/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week3 [Email Address],1,FALSE))),""20/11/2017"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week4 [Email Address],1,FALSE))),""27/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week5 [Email Address],1,FALSE))),""4/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week6 [Email Address],1,FALSE))),""11/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week7 [Email Address],1,FALSE))),""18/12/2017"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week8 [Email Address],1,FALSE))),""25/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9 [Email Address],1,FALSE))),""1/1/2018"" , & _ 
     IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9 [Email Address],1,FALSE))),""1/1/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week10[Email Address],1,FALSE))),""8/1/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week11[Email Address],1,FALSE))),""15/1/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week12 [Email Address],1,FALSE))),""22/1/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week13[Email Address],1,FALSE))),""29/1/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week14[Email Address],1,FALSE))),""5/2/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week15[Email Address],1,FALSE))),""12/2/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week16[Email Address],1,FALSE))),""19/2/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week17 [Email Address],1,FALSE))),""26/2/2018"" , & _ 
     IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week18[Email Address],1,FALSE))),""5/3/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week19[Email Address],1,FALSE))),""12/3/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week20[Email Address],1,FALSE))),""19/3/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week21 [Email Address],1,FALSE))),""26/3/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week22[Email Address],1,FALSE))),""2/4/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week23[Email Address],1,FALSE))),""9/4/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week24[Email Address],1,FALSE))),""16/4/2018"" ,IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week025[Email Address],1,FALSE))),""23/4/2018"" , IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week26[Email Address],1,FALSE))),""30/4/2018"", ""Something is Wrong"")))))))))))))))))))))))))))" 

そのようなコードを試してみたが終了し、開始時に括弧なしで持っていますその結果は予期しない文の終わりです。第三

ActiveCell.FormulaR1C1 = _ 
    "=IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week1[Email Address],1,FALSE))),""06/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week2[Email Address],1,FALSE))),""13/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week3[Email Address],1,FALSE))),""20/11/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week4[Email Address],1,FALSE)))," & _ 
    """27/11/2017"",IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week5[Email Address],1,FALSE))),""04/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week6[Email Address],1,FALSE))),""11/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week7[Email Address],1,FALSE))),""18/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week8[Email Address],1,FALSE)))," & _ 
    """25/12/2017"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[Email Address],1,FALSE))),""01/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week9[Email Address],1,FALSE))),""08/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week10[Email Address],1,FALSE))),""15/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week11[Email Address],1,FALSE)))," & _ 
    """22/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week12[Email Address],1,FALSE))),""29/01/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week13[Email Address],1,FALSE))),""05/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week14[Email Address],1,FALSE))),""12/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week15[Email Address],1,FALSE)))," & _ 
    """19/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week16[Email Address],1,FALSE))),""16/02/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week17[Email Address],1,FALSE))),""05/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week18[Email Address],1,FALSE))),""12/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week19[Email Address],1,FALSE)))," & _ 
    """19/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week20[Email Address],1,FALSE))),""26/03/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week21[Email Address],1,FALSE))),""02/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week22[Email Address],1,FALSE))),""09/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week23[Email Address],1,FALSE))), & _ 
    """16/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week24[Email Address],1,FALSE))),""23/04/2018"", IF(NOT(ISERROR(VLOOKUP(RC[-2],DataExtract.xlsx!Week025[Email Address],1,FALSE))),""30/04/2018"","" ""))))))))))))))))))))))))))" 
このコードは、3の最良と思わ

を試したが、エラーメッセージは、「コンパイラのエラー:構文エラー」である私は、私が試してみましたので、機能が正しく動作することを知っている

それは単一の細胞上にある。 3回目の試みでは、自動的にマクロとして記録しようとしました。

私は何が間違っているのか、間違っていますか?

+0

あり他の問題かもしれませんが、あなたは、構造化の前にスペースを入れずに試してみましたリファレンス? – pnuts

+0

@pnuts 2回目の試行で試したところ、まだコンパイルエラーが表示されています。期待値:ステートメントの終わりと2行目の開始点がハイライトされます – Aldaron47

+0

"2回目の試行"で閉じ括弧に足りない可能性があります。 – pnuts

答えて

0

この式を使用して、すべての異なる週の電​​子メールアドレス列への参照を持つ別のシート(例:INDEX)を設定することができます。=IFERROR(INDIRECT("Week" & COLUMN()&"!B"&ROW()),"")アドレス)。したがって、1週目の電子メールアドレスはすべて1列目、2列目は2列目などです。この領域は、EmailsTableという名前の範囲にします。このUDFを使用してください:

Public Function WeekNumber(sEmail As String) As Variant 
    '// Finds the column number (i.e. week number) of the first 
    '// occurrence of the given email address in the EmailsTable 
    '// If not found returns zero 
     Dim oFound As Range 


     Set oFound = [EmailsTable].Find(sEmail, , xlValues, xlWhole, xlByColumns, xlNext) 

     If oFound Is Nothing Then 
      WeekNumber = 0 

     Else 

      WeekNumber = oFound.Column 

     End If 

    End Function 

このUDFは、指定された電子メールが最初に出現する週番号を返します。 INDEXシートの別の部分では、各シートに対応する26の日付のリストを設定し、リストに名前を付けます(例: "DateList")。このような式を使ってDateListで日付を見つけることができます。セルB24に電子メールアドレスのために:

=IFERROR(INDEX(DateList,WeekNumber(B24)), "Not found") 

またはあなたの代わりにINDEXのVLOOKUPを使用し、週0のエントリを含めることができ

関連する問題