私はVBAを初めて使用し、「テスト」、「データ」、または「新規」を含む列Aのすべてのセルを検索し、これらすべてのセルを列Bにコピーするマクロを作成する必要があります.B2から始まり、他のすべてのセルC2 から始まる列 C にコピーする必要があります。
質問する
558 次
2 に答える
1
回答を受け入れたことは理解していますが、これらのタイプのフィルタリングを多数行う場合、セルを反復処理するとパフォーマンスが低下する可能性があります。を試してくださいarray
。また、LIKE
演算子を使用して値を比較します。これは完璧wildcard operator
です。次のコードを VBA プロジェクト モジュールに追加します。シートにボタンを追加し、 経由でサブルーチンを呼び出しますbutton click event
。
Option Explicit
Sub filterSpecifics()
Dim rng As Range
Dim lastRow As Long
Dim vArray As Variant
Dim i As Integer
lastRow = Sheets(3).Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Sheets(3).Range("A1").Resize(lastRow)
vArray = WorksheetFunction.Transpose(rng.Value)
For i = LBound(vArray) To UBound(vArray)
If Not IsEmpty(vArray(i)) Then
If Not vArray(i) Like "test*" And _
Not vArray(i) Like "data*" And Not vArray(i) Like "new*" Then
vArray(i) = "" '-- remove the value
End If
End If
Next i
'-- output the array to the column B
rng.Offset(0, 1).Resize(UBound(vArray)) = Application.Transpose(vArray)
End Sub
出力:
于 2013-01-29T13:39:22.997 に答える
0
VBA エディターを開き、シート 1 (Microsoft Excel オブジェクトの下) に以下のコードを貼り付けます。
Option Explicit
Sub MyMacro()
Dim iLastRow As Long
Dim i As Long
Dim sVal As String
iLastRow = range("A65536").End(xlUp).Row 'get last row in use
For i = 2 To iLastRow 'iterate trough rows from second to last in use
sVal = range("A" & i).Value
If sVal = "test" Or sVal = "data" Or sVal = "new" Then
range("B" & i).Value = sVal
Else
If sVal <> "" Then range("C" & i).Value = sVal
End If
Next i
End Sub
マウス ポインターがプロシージャ内のどこかに設定されていることを確認し、MyMacro
F5 キーを押してコードを実行します。それはあなたが求めた魔法を行うはずです:-)
于 2013-01-29T08:49:41.370 に答える