2012-12-19 15 views
9

セルA1:A1000にデータがあります。それはこのように、小さなノートに続く名前のリストです:特定の文字の後にセル内のデータを削除します。

  • SAM「速い
  • ニック」長い
  • 彼らはすべての後に"と空間を持っている

トム・」クイック

私は試してみるためにマクロを使っていましたが、何もできませんでした。私はこれをするかもしれない?ここで

答えて

23

はマクロなしの気の利いたトリックです:

は、適切な範囲を選択します(あるいは単に列全体を選択するにはAをクリック)して、Ctrl+Fを行い、Replaceをクリックし、Find書き込みで正確"*をしてReplace withを残しますボックスは空です。今すぐReplace allをクリックしてください!

これは、置き換えられたボックスを空のままにしたワイルドカードとして*を使用するため、引用符の後のすべてを置き換えます(および含めます)。

編集:ここで示唆したように、このためのVBAコードです:

Columns("A:A").Replace What:="""*", Replacement:="", LookAt:=xlPart 
+1

'Text to Columns'を通らずにすばやく簡単に...大きなプログラムの一部としてVBAで '.Replace'メソッドを書く方法をOPに示す価値があります。 –

+2

偉大な答え。常にデータのバックアップを作成してください。 –

1
Sub Macro1() 
    For Row = 1 To 1000 
     S = Range("A" & Row).Cells.Value 
     Pos = InStr(S, Chr(34)) 
     If Pos > 0 Then Range("A" & Row).Cells.Value = Left(S, Pos - 1) 
    Next 
End Sub 
+0

本当ですか?なぜこのような状況で 'Find'と' Replace'がうまく動作するのでしょうか? –

+1

Scott、私は同意します。他のアプローチはより速く簡単です。 (私はAlexandreが投稿したFindのワイルドカードについて知りませんでしたが、精神的なツールボックスに入っています)OPはマクロについて話していたので、マクロでやっていました。彼らがより複雑なものに遭遇して正規表現を思いつくことができない場合、彼らには役に立つかもしれません。 – Ernie

5

簡単!使用しているExcelのバージョンはわかりませんが、簡潔にConvert Text to Columnsを実行してから、セルを区切り記号"で分割します。これにより、必要なデータと削除できるデータの2つの列が表示されます。

  • Delimitedを選択Convert Text to Columnsメニューを見つけ、Othernext
  • を打つ

    1. ハイライトコラム
    2. Dataメニューを見つける:ここ

      は、Office 2010で散歩ですボックス、タイプ"
    3. ヒットFinish

    完了!今度は、列Aにすべての名前があり、列Bを削除するだけです。

    要約すると、「テキストを列に変換」し、区切り記号"を使用してセルを分割します。超簡単で高速です。

  • +1

    また、インポートするデータが表示されているセクションが表示されたら、2番目の列を選択して「列をインポートしない(スキップ)」に変更すると、列Bを削除する心配はありません – SeanC

    4

    いくつかのオプション:あなたは、さらにその後、値を操作するために必要な場合

    Range("A1:A1000").Replace """*", vbNullString 
    

    を交換して、以下でより適切である:正規表現で

    Dim str As String, strClean As String 
    Dim cell As Range 
    
    For Each cell In Range("A1:A1000") 
    
        With CreateObject("vbscript.regexp") 
         .Pattern = "\""(.*)" 
         .Global = True 
         cell = .Replace(cell, vbNullString) 
        End With 
    
    Next cell 
    
    正規表現がなければ10

    は、文字列を分割する:あなたは、ソースデータを保持したい場合は

    Dim strSplit() As String 
    Dim cell As Range 
    
    For Each cell In Range("A1:A1000") 
    
        If (cell.Value <> vbNullString) Then 
    
         cell.Value = Split(cell.Value, """")(0) 
    
        End If 
    
    Next cell 
    
    +1

    ?なぜこのような状況で、 'Find'と' Replace'がループして 'RegEx'を呼ぶのはなぜですか? –

    +0

    追加ユーザーが処理後に各値で何かをする必要がない限り、この状況では、別のオプションとして置き換えてください。 – InContext

    2

    を、あなたはまた、次の列で、簡単なExcelの数式でそれを行うことができます。 =LEFT(A1,SEARCH("""",A1)-1)

    0

    押しctrl + fは、find whatボックスにreplace tab、タイプ*をクリックし、replace allをクリックしてください:あなたのデータは列Aであると仮定すると、以下の式では名前のみを返します。 replaceボックスに何も入れる必要はありません。ここでは、.の後にすべてを置き換えます。

    関連する問題