1

COL AにCOL Bから欠落している値があるとしましょう。欠落しているかどうかを見つけてから、行を削除してシフトアップしたいとします。構造は次のようになります

ID   | INFO1    | INFO2   | INFO3 ------------    ID2   | INFO1    | INFO2   | INFO3  
50   | XXXXX    | XXXXX   | XXXXX ------------    50    | XXXXX    | XXXXX   | XXXXX  
51   | XXXXX    | XXXXX   | XXXXX ------------    51    | XXXXX    | XXXXX   | XXXXX  
52   | XXXXX    | XXXXX   | XXXXX ------------    52    | XXXXX    | XXXXX   | XXXXX  
53   | XXXXX    | XXXXX   | XXXXX ------------    53    | XXXXX    | XXXXX   | XXXXX  
54   | XXXXX    | XXXXX   | XXXXX ------------    55    | XXXXX    | XXXXX   | XXXXX  
55   | XXXXX    | XXXXX   | XXXXX ------------    56    | XXXXX    | XXXXX   | XXXXX  

そして、私の問題が始まります。これまでのところ、私はこれを管理してきました:

Sub Teste()
   Dim rngA As Range
   Set rngA = Range("F2")
   Set rngB = Range("H2")
   While rngA.Value <> ""
        Columns("H:H").Select
        Set Cell = Selection.Find(What:=rngA.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
        If Cell Is Nothing Then
            rngA.Value = ""
            Set rngA = rngA.Offset(1)
        Else
            Set rngA = rngA.Offset(1)
        End If
    Wend
    While rngB.Value <> ""
        Columns("F:F").Select
        Set Cell = Selection.Find(What:=rngB.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
        If Cell Is Nothing Then
            rngB.Value = ""
            Set rngB = rngB.Offset(1)
        Else
            Set rngB = rngB.Offset(1)
        End If
    Wend

End Sub

これにより、ID2 で欠落している ID の値を見つけて空の値に置き換えることができますが、欠落している ID を削除したい | 情報1 | INFO2| INFO3 それらを削除して行を上に移動します。私の人生では、それを行う方法が見つかりません。(コードは例を反映していません)

誰かがそれを行う方法について考えを持っていますか?

4

1 に答える 1

0

あなたの例はコードと完全には一致しません-ID列と右側の3つの列を削除したいように見えます(したがって、ID列は列ごとに離れています)が、コードではID列はFとHです。以下の私のコードでは、FG と HI を削除したいと想定しています。

Dim searchColumn As Range
Dim rngA As Range

Dim i As Integer
For i = 1 To 2
    If i = 1 Then
        Set rngA = Range("f2")
        Set searchColumn = Range("h:h")
    Else
        Set rngA = Range("h2")
        Set searchColumn = Range("f:f")
    End If
    While rngA.Value <> ""
        searchColumn.Select
        Set Cell = Selection.Find(What:=rngA.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False)
        If Cell Is Nothing Then
            Set rngA = rngA.Offset(1)
            Range(rngA.Offset(-1), rngA.Offset(-1, 1)).Delete xlUp
        Else
            Set rngA = rngA.Offset(1)
        End If
    Wend
Next

追加の列を削除する必要がある場合は、行を変更します.Delete--1その行の は、削除する ID 列の右側にある列の数を表します。

于 2013-09-19T23:20:09.977 に答える