A、B、C の 3 つの列があります。
列 A には、NAME1、NAME2 などの名前が含まれます。
列 B には、値「YES」または「NO」のみが含まれます。
列 C には、列 B に値 "YES" を持つ列 A の名前が含まれていると想定されます。
列Bの値が「YES」である限り、列Aから列Cに値をコピーすると言えます。非常に簡単です:
C1=IF(B1="YES",A1,"")
しかし、これには空白のセルが含まれますが、これは望ましくありません。したがって、列 A のすべての名前を列 B に値「YES」でコピーし、空白をスキップして列 C に貼り付ける方法を探していると思います。
列内のすべてのセルを特定の値で色付けする VBA プロジェクトを見つけました。これを必要なものに編集する方法がわかりません。これが私がこれまでに思いついたコードです。
問題1)ランタイム エラー '1004' アプリケーション定義またはオブジェクト定義のエラー
2)列 A からのコピー
3) NewRangeからの重複の確認と削除
EDIT 1 : コードにコメント行を追加しました
EDIT 2 : NewRange をオフセット付きの列 A から作成するように変更します (実行時エラーのため未テスト)
EDIT 3 : 別のシートに貼り付けるためのコードとは別のシートからコピーするためのコード
EDIT 4 : 追加ユーザー @abahgat からの修正
EDIT 5 : 重複を削除
Sub RangeCopyPaste()
Dim cell As Range
Dim NewRange As Range
Dim MyCount As Long
MyCount = 1
'--> Loop through each cell in column B
'--> Add each cell in column A with value "YES" in column B to NewRange
For Each cell In Worksheets("Sheet1").Range("B1:B30")
If cell.Value = "YES" Then
If MyCount = 1 Then Set NewRange = cell.Offset(0,-1)
Set NewRange = Application.Union(NewRange, cell.Offset(0,-1))
MyCount = MyCount + 1
End If
Next cell
'--> Copy NewRange from inactive sheet into active sheet
NewRange.Copy Destination:=activesheet.Range("C1")
'--> Remove Duplicates
activesheet.Range("C1:C30").RemoveDuplicates
End Sub