単一セルに複数の結果がある「IF式」のVBA [完了]


-6

これをVBAに変換する方法この式を使用すると、6行のみがカバーされ、式はすでに長すぎます。私のレポートは600行あります。

=IF(AND('Risk & Issue Log'!$K$2=$D5,'Risk & Issue Log'!$L$2=F$8,OR('Risk & Issue Log'!$F$2="Open",'Risk & Issue Log'!$F$2="In-progress")),'Risk & Issue Log'!$D$2," ")&IF(AND('Risk & Issue Log'!$K$3=$D5,'Risk & Issue Log'!$L$3=F$8,OR('Risk & Issue Log'!$F$3="Open",'Risk & Issue Log'!$F$3="In-progress")),'Risk & Issue Log'!$D$3," ")&IF(AND('Risk & Issue Log'!$K$4=$D5,'Risk & Issue Log'!$L$4=F$8,OR('Risk & Issue Log'!$F$4="Open",'Risk & Issue Log'!$F$4="In-progress")),'Risk & Issue Log'!$D$4," ")&IF(AND('Risk & Issue Log'!$K$5=$D5,'Risk & Issue Log'!$L$5=F$8,OR('Risk & Issue Log'!$F$5="Open",'Risk & Issue Log'!$F$5="In-progress")),'Risk & Issue Log'!$D$5," ")&IF(AND('Risk & Issue Log'!$K$6=$D5,'Risk & Issue Log'!$L$6=F$8,'Risk & Issue Log'!$F$5="Open"),'Risk & Issue Log'!$D$6," ")


コメントから -

したい -

  1. シート上の各値を比較する Risk & Issue Log 列に K セルに D5
  2. シート上の各値を比較する Risk & Issue Log 列に L セルに F8
  3. シート上の各値を比較する Risk & Issue Log 列に F 貴ぶ Open または In-progress
  4. それぞれの row これを行うと、列の対応するセルの結果が欲 D すべてが True または blank 何かが一致しない場合
  5. 出力はすべて、コンマとスペースで区切られた1つのセルにまとめてください。

VBAでこれを行うにはどうすればよいでしょうか。


2
説明してもらえますか 言葉で あなたが欲しいもの?それは誰もが座ってこの巨大な式を見て、あなたがそれに何をしたいのかを知ってもらうことをたくさん求めています。
Excellll

1
VBAに変換することはできません。あなたはVBAを学び、この公式をまねるためのコードを作成する必要があります。これはおそらくあなたが得る最も良いものです。ここに誰かが座ってあなたのためにそれを改宗させるのに十分でない限り、私たちは彼らのために人々の仕事をするためにここにいません。 VBAについて具体的な質問がある場合は、尋ねることができますが、まず自分で始めてください。
Matthew Williams

こんにちは@MatthewWilliams、ありがとうございます。私は2年間VBAを使用して使用してきましたが、私は録音と編集のみをしています。式では不可能だと思われるので、これがVBAで可能かどうかを知りたいだけです。私はループを使うことを考えていますが、私は苦労しています。あなたのすべての答えを高く評価してください。
Charlemagne

@Excellll私はこの式をVBAでコーディングしようとしています。ループを使用して式の論理テストを最後の行まで繰り返すことを考えています。そして結果(trueの場合はvalue、falseの場合はvalue)は単一のセルでのみ返されるはずです。
Charlemagne

説明してみてください 式は何をする
Raystafarian

回答:


1

すべてのコメントを読み、最後にあなたがやろうとしていたことを考え出した後(私は思う)...私は次のUDFがうまくいくと信じています。これをVBAの新しいモジュールに貼り付けてから、結果タイプ= summaryizeLog()を表示したいセルに入力してEnterキーを押します。

Function summarizeLog() As String

    'Define some variables
    Dim shtLog As Worksheet
    Dim shtSum As Worksheet
    Dim i As Integer

    'set the two worksheet variables
    Set shtLog = Sheets("Risk & Issue Log")
    Set shtSum = Sheets("Summary") '<---rename this to your needs


    'loop from 2 to 600 (these are the rows in your Risk & Issue Log to test, change to suit your needs)
    For i = 2 To 600

        'Now the test.
        'Does K2 through K600 equal D5, F2 through F600 equal either Open or In-Progress, and does L2 through L600 equal F8
        If shtLog.Range("K" & i).Value = shtSum.Range("D5") _
            And (shtLog.Range("F" & i).Value = "Open" Or shtLog.Range("F" & i).Value = "In-progress") _
            And shtLog.Range("L" & i).Value = shtSum.Range("F8") Then

            'If we passed, then grab the value in D for this row and append it the value that will be returned by this function
            '   (with a comma and space)
            summarizeLog = summarizeLog & ", " & shtLog.Range("D" & i).Value
        End If
    Next i
End Function

私はとても感動しました。私はすぐにコードをテストします。どうもありがとうございました。 Visual Basicを学ぶために何を読むべきかについての提案はありますか?私はとても興味があります。
Charlemagne

できます。完璧!
Charlemagne

うまくいったことをうれしく思います。私はVBAのものについての推奨事項を作ることはできません。必要に応じて学びました。私は最大のハードルがあると思います:1. If-then-else、forループなどのような基本的なプログラミングもの2.特定のセルの中で内容を参照および/または設定する方法。 Like Sheets( "sheetname")。Range( "A1")。valueまたはSheets( "Sheetname")。cells(&lt; row&gt;、&lt; column&gt;)value 3.ワークシートイベントでsubまたはfunctionを起動する方法、またはボタン、またはこの例で使用したようなUDF呼び出し。あなたはそれらの3つを手に入れ、VBAで必要なことの90%を実行できます。例を見て、どのように尋ねる前に試してみてください。
JNevill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.