2017-05-19 5 views
0

私はColumns(2).Copy Destination:=Columns(1)を仮使用して "x"の1列を左に含むすべてのセルをオフセットしていますが、メモリが非常に消費され、 "x"値だけをオフセットすることはできません。"x"を含むセルをオフセットする最も効率的な方法

このコンディションが満たされたセルだけをオフセットし、より効率的な方法で作成する方法はありますか?

答えて

1

あなたはおそらく、あなたが持っているしかし、多くの行のために100を設定し、この

For i = 1 To 100 
    If ActiveSheet.Cells(i, 2).Value = "x" Then 
     ActiveSheet.Cells(i, 1).Value = ActiveSheet.Cells(i, 2).Value 
    End If 
Next 

のようなものを試してみたいと思います。私はこれがあなたが持っているものよりも速く動くかどうかも分かりません。私はあなたの目標をここで欠場していない限り。

、あなたはシート

For Each rcell In ActiveSheet.Cells 
    If recll.Column >= 1 And rcell.Value = "x" Then 
     ActiveSheet.Cells(rcell.Row, rcell.Column - 1).Value = ActiveSheet.Cells(rcell.Row, rcell.Column).Value 
    End If 
Next 

内のすべてのセルを通過したいが、この1つは、おそらく本当に長い時間がかかる場合。理想的には、使用している最後の行と列を知っている場合は、ネストされたループを使用する必要があります。このようにして、データが含まれていると思われるセルを反復するだけです。

2
以下の回答に似

、しかしでループの各-について、全範囲のために:(:C A)のためにあなたがにあなたの範囲を設定した場合、しかしこれに注意する必要があり

Sub MoveOver() 

    Dim rng As Range 
    Dim c As Range 

    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("B:B") 

    For Each c In rng 
     If c.Value = "x" Then c.Offset(0, -1) = c.Value 
    Next c 

End Sub 
+2

たとえば、そのようなオフセットを使用してエラーが発生します。したがって、2列目以降を開始するときは注意が必要です。カラム# – user3005775

関連する問題