2016-05-05 6 views
0

私は両方のテキストを比較する2つの列を持っています。列Aはテキスト「Hello 2005 A LW Allocate」を含み、列Bはテキスト「A LW」を有する。私は、列Cに「Hello 2005 Allocate」があり、Dに「A LW」がなければならないように、列Aのテキストを分割したいと思います。列Bの値は、値{A、A LW、I、J}などの特定のリストの中に入れることができ、同じテキストを列Aのものと一致させて分割したい。誰かが助けることができれば本当に感謝しています。今、私はこのような何かに見えるコードがあります。Excel VBAでの一致するデータに基づく列の分割

`Sub Testing() 
    Dim DataRange As Range, CheckRange As Range, aCell As Range, bCell As Range 
    Dim rightStrng As String 
    Dim i As Long 
    Set ws = Worksheets("Sheet 1") 
    Set CheckRange = ws.Range("C2,C35000") - Column which has data 
    Set DataRange = ws.Range("F2,F34") - Column to which I am comparing data 
    With Worksheets("Sheet 1") 
    For Each aCell In CheckRange.Rows 
    Set bCell = DataRange.Find(What:=aCell, LookIn:=xlValues, _ 
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 
Set strng = Split(bCell) 
Set rightStrng = "" 
i = UBound(strng) 
rightStrng = Application.WorksheetFunction.Trim(rightStrng) 
Set bCell.Offset(, 2) = rightStrng 
Set bCell.Offset(, 1) = Left(aCell.Value, IIf(rightStrng <> "", InStrRev(bCell.Value, rightStrng) - 2, Len(bCell.Value))) 
Next aCell 
End Sub` 
+0

これは、 [this]への重複した質問(http://stackoverflow.com/questions/37038525/split-column-text-to-adjacent-column-using-excel-vba) – OldUgly

+0

@OldUgly私は数字に基づいて分割しようとしていたその質問でここでは、私はそれを比較に基づいて分割しようとしています – ShilpiT

+3

あなたの2つの質問のどちらも、質の高い質問と考えることのできる最低の基準を満たしていません。最初にどこから始めるのか分からないという言い訳で見過ごされるかもしれませんが、新しい基準をカバーするために再構成された2つの有効な回答があります。これは、不器用な質問に対する「ターンキー」の回答を提供することで問題になります。 OP(あなたの場合)は、十分な情報と独自の努力を提供し、以前の努力の質を新しい質問のテンプレートとして使用すると信じられています。 [ask]と[mcve]を読んで、この質問を改善してください。 – Jeeped

答えて

0

を確かに、この答えはまだこの少しです: https://www.youtube.com/watch?v=2ZO1jauV31U

しかし、私は正直な努力が似たにも関わらず、与えられたと感じました、元の投稿。あなたは、いくつかの文字列解析をしようと、あなたの文字列内のスペースの位置を返し、その後、真ん中を返すために、左半分Midを返すようにLeftを使用して、そしてRightされているように見えます

アプローチ正しい部分を返す代わりに、私は列Bに、私はそれらを見つけた場合、可能なエントリのリストを反復処理してみてくださいvbNullStringに置き換えると、私が見つけたものに印刷されることがあります

INSTR([スタート]、[文字列1]、[文字列2]、[ ]比較:文字列が見つからない場合

Instr機能は、String1またはゼロで見つかったString2の位置を返しますStartは(初めのために通常は1)から開始する文字列内の位置であるCompareされます。文字列の比較方法を指定する唯一の真のオプションパラメータです。

Debug.Print Instr(1, "abcd", "b") '<-- prints 2 in your immediate window 

Replace(Expression, Find, Replace)関数はReplace文字列に置き換えFind文字列のインスタンスとExpressionの文字列を返します

を交換してください。

Debug.Print Replace("abcdefg", "abc", "ABC") '<-- Prints "ABCdefg" in the immediate window. 

アプリケーション

あなたが考慮するためのいくつかの擬似コード:コード内

Dim searchVals(3) as String 
searchVals(0) = " A " 
searchVals(1) = " A LW " 
searchVals(2) = " I " 
searchVals(3) = " J " '<-- surrounded with spaces so we don't find all Js 

'...some code you already wrote... 
For Each myCell in myColumn 
    For i = 0 to 3 
    'For each search value I expect to find... 
     'If this search value is in there... 
     If InStr(1, myCell.Value, searchVals(i)) <> 0 Then 
      'I found my string! Replace the searchVal with a null string (i.e. remove it) 
      myCell.Offset(,1) = Replace(myCell.Value, searchVals(i), vbNullString) 
      'Print the string I found two to the Right 
      myCell.Offset(,2) = searchVals(i) 
      Exit For '<-- Once I find one, I can stop searching 
     End If 
    Next i 
Next myCell 

エラー

私はあなたがエラーメッセージ1本を得ている疑いがあります行:

Set strng = Split(bCell) 

SetキーワードはVBAのオブジェクト用に予約されており、Splitは文字列の配列を返します。これらの行だから、両方:

Set strng = Split(bCell) 
Set rightStrng = "" 

は次のようになります。初心者のために

strng = Split(bCell) 
rightStrng = "" 

を、これは一般的に暗記するものであるが、より技術的なもののためSetキーワードが何をするかについて:What does the keyword Set actually do in VBA?

+0

これは完全に動作します。どうもありがとうございます。私はそれを微調整して私の正確なニーズをアーチしました。なぜ私がスプリット機能にこだわられたのか分かりません。しかし、これはずっと良いです!再度、感謝します – ShilpiT

関連する問題