0

Excel に 2 つの列があり、すべてのセルにテキスト文字列が含まれています。列 A には 8000 個のセルが含まれ、列 B には 3000 個のセルが含まれます。列 B の各セルをチェックして、セル A1 の文字列が含まれているかどうかを確認する必要があります。存在する場合は、そのテキストを削除し、残りの文字列はそのままにしておく必要があります。次に、セル A2、A3 など、セル A8000 まで同じことを行う必要があります。これを手動で行うにはとてつもなく時間がかかり、VBA プログラマーにとっては簡単であることはわかっていますが、私はまったくの新人で、どこから始めればよいか悩んでいます。ありがとう。

4

5 に答える 5

1

BULKreplaceを使用する非常に簡単な方法は次のとおりです

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
        For i = 1 To lRow
            .Columns(2).Replace What:=.Range("A" & i).Value, _
                                Replacement:="", _
                                LookAt:=xlPart, _
                                SearchOrder:=xlByRows, _
                                MatchCase:=False, _
                                SearchFormat:=False, _
                                ReplaceFormat:=False
        Next
    End With
End Sub
于 2012-06-26T20:10:40.673 に答える
1

Wolf5370が提案するよりも速い方法があります。列Aのすべてのセルをループして、列Bで見つかった値を置き換えることができます。

このような何かがあなたを始めるはずです。

Option Explicit

Sub Replace()

Dim wks as Worksheet
Set wks = Worksheet("Shee1") 'change to suit your needs

With wks

   Dim rngLook as Range, cel as Range
   Set rngLook = Intersect(.UsedRange,.UsedRange.Offset(1),.COlumns(1))

   For each cel in RngLook
      .Columns(2).Replace cel.Value, "", xlPart
   Next

End With

End Sub
于 2012-06-26T20:11:23.580 に答える
0

VBAは必要ありません。この式を列Cに入力するだけです。

=VLOOKUP($B1,A:A,1,0)

データがB1で始まると仮定して、この式をB3000まで入力します。

ここで、列Bの値が列Aにある場合は、一致する値が列Cに表示されます。それ以外の場合は、が表示されます#N/A

最後に、列Bと列Cを列Cの値で並べ替えてから、不要なものを削除します。

これには30秒かかります。

上記と同等のVBAを投稿できる人が来ると確信しています。

于 2012-06-26T20:10:49.570 に答える
0

当初は、並べ替え (各列) と列のウォーク ダウン (マスター/トランザクション スタイル) を考えていました。ただし、部分文字列について話していることに気付いたので、ソート順は役に立ちません。これを行う唯一の方法は、1 つのループを別のループにネストし、8000 個のセルすべてを 3000 回チェックすることです。

dim c1 as integer, c2 as integer

for c2=1 to 3000

for c1=1 to 8000

cells(c1,1).value = Replace(cells(c1,1).value, cells(c2,2).value, "")

next c2

next c1

これは私の頭の上から手作りされていることに注意してください(そのため、タイプミスなどが予想されます)。基本的に、文字列を置換するたびに、私が言及したすべての時間をループしています-セル(c1,1)を変数にコピーして置換を行い、書き戻す前に変更されるかどうかを確認することで実行できます-aでテストします数サイクルして、どちらが速いかを確認します。

編集: いくつかのタイプミスを修正しました (実際には、第 2 項の「値」という単語が抜けていました)

PS: セルがわかりにくい場合は、代わりに Range を使用できCells(c1,1)ます。Range("A" &c1)Cells(c2,2)Range("B"&c2)

于 2012-06-26T19:57:18.983 に答える
0

VBA に限定されているのか、それとも列の追加が許容されるのかは不明です: 以下のように:

ここに画像の説明を入力

B3 で THIS と IS が削除されたときに、D3 で TH がどのように表示されるかに注目してください。

編集ああ、しかし今、これを「ループ」する必要があることがわかりました。対応を考え直さなければなりません。

于 2012-06-26T20:10:01.937 に答える