2

セルの列に参照データセットがあります(行の場合もありますが、何でもかまいません)。

いくつかのワークシートを調べて、選択した値の範囲を確認し、現在のセル値が参照データにある場合は、現在のセルがいくつかに変更されるまで、次の一連のセルのオフセットに貼り付ける値として使用します参照データの新しい値。この時点で、新しい値と次の一連のセルに対して貼り付けプロセスを繰り返す必要があります。例えば

Sub doStuff()
Dim RefRange As Range, queryRange As Range, checkCell As Rnage
String pasteDate As String

Set RefRange = Range("A1:A50")
Set queryRange = .Selected

For Each checkCell In queryRange
  If checkCell.Value IN RefRange <***here's where I don't know what to use ***>
     pasteData = checkCell.Value
     ' Advance to next item
     Next
  ElseIf checkCell.Value Not In queryRange <***here's where I don't know what to use ***>
     ActiveCell.Offset(0,+1).Value = pasteData
  End If
Next
End Sub

SQLでこれを行う方法を知っていますが、VBAに同様の方法がありますか?

SQLの場合:

Select a, b from table where c in ('foo', 'bar', 'baz') OR

Select a, b from table where c in (select e from some_other_table)

TIA

4

1 に答える 1

1

すべてのデータをループして、列全体で数式を使用し、結果の値に置き換える必要があるとは思えません。このような:

Sub Test()

    With ActiveSheet.UsedRange.Columns(3).Offset(1)
        .Formula = "=IF(ISERROR(MATCH(B2,A:A,0)),"""",B2)"
        .Value = .Value
    End With

End Sub

上記のコードは、B列のすべての値を調べて、A列の一致をテストします。一致するものが見つかった場合は、B列の値がc列に表示されます。一致するものが見つからない場合は空白のセルが表示されますが、任意のセルに変更できます。

ここに画像の説明を入力してください

于 2012-09-15T11:03:47.943 に答える