2017-09-08 9 views
1

列H(行数はファイルごとに異なります)のセル値が「単語」または「単語2」かどうかを確認しようとしています。 「Words」または「Words2」を含まないセルは、スペース区切り文字に基づいて別々の列に分割され、「Words」および「Words2」を含むセルは変更されません。現在、私のコードはどのセルも分離していません。私はDim as RangeとInStrを使用するのが初めてで、使用するのが最も効率的かどうかは完全にはわかりません。私は無用にコードの複数のバリエーションを試してみました。 ARGNAMEは列Hの各セルです(少なくとも、それは私が目指しているものです)。列のセル値が特定のテキストの場合、セル値がテキストと列で分割されます

Sub WordSplit 
    Dim lastRow As Long 
     lastRow = Range("A" & Rows.Count).End(xlUp).Row 
    Dim SrchRng As Range, ARGNAME As Range 
     Set SrchRng = Range("H1:H" & lastRow) 
     For Each ARGNAME In SrchRng 
      If InStr(1, ARGNAME.Value, "Words") Or InStr(1, ARGNAME.Value, "Words2") < 0 _ 
      Then Columns("H:H").TextToColumns Destination:=Range ("H1"), DataType _ 
       :=xlDelimited, ConsecutiveDelimiter:=True, Space:=True, _ 
       FieldInfo:=Array(Array(1, 1)),TrailingMinusNumbers:=True 
      End If 
     Next ARGNAME 
End Sub 

答えて

0

Option Explicit 

Public Sub WordSplit1() 
    Dim ws As Worksheet 
    Set ws = Sheet1 

    Dim lastRow As Long 
    lastRow = ws.Range("H" & Rows.Count).End(xlUp).Row 

    Dim srchRng As Range, argName As Range 
    Set srchRng = ws.Range("H1:H" & lastRow) 

    For Each argName In srchRng 

     If InStr(1, argName.Value2, "Words") = 0 And _ 
      InStr(1, argName.Value2, "Words2") = 0 Then 

       argName.TextToColumns Destination:=argName, _ 
             DataType:=xlDelimited, _ 
             ConsecutiveDelimiter:=True, _ 
             Space:=True, _ 
             FieldInfo:=Array(Array(1, 1)), _ 
             TrailingMinusNumbers:=True 
     End If 

    Next 
End Sub 

あなたの最初のL2:たとえば

:H1 = "言葉" 変更なし、かつH2 = H2への分割 "私は気にしない言葉"コードは正しかったですが、次のように更新しました:

  • 先頭にoを付けました.
  • それが簡単InStrに関連
  • の問題を読むために作るに固定されたコードのインデント:モジュール
  • 特定のシート(シート1コードネーム):を持つすべての範囲の完全修飾fを
    • それだけで(正の整数を返します。 > = 0)
    • セルが「言葉」が含まれていませんし、それが「Words2」
    • が含まれていない場合はすべての InStr式は
    • )だけではなく、最後の1(戻り値をチェックしなければなりません
    • 初期場合:
    • If InStr(1, ARGNAME.Value, "Words") Or InStr(1, ARGNAME.Value, "Words2") < 0
    • になる:
    • If InStr(1, argName.Value, "Words") = 0 And InStr(1, argName.Value, "Words2") = 0
  • 次に問題:
    • Ifステートメントが無効位置(構文エラー)の2行目に分離され、
    • ") < 0 _ Then Columns("H:H")
    • あなたの次の行には「言葉」や「Words2」
  • を含まないセル毎に複数の単語を含む列H内のすべてのセルを分割

コードは、列H

を超えたデータがないことを意味し
+0

ああのようなものを試してみてください列 '。 しかし、私は 'TextToColumns'のための列Hの目標範囲を維持する必要がありました。なぜなら、その列の代わりに元の列から開始する必要があったからです。 はい、具体的には、ファイル内の行数がファイル内ではなくファイル内で一貫しているため、列Aの列Hが列Aと一致することを確認しました。ありがとうございました! – Liz

+0

私はあなたの開始列インテントに気づき、私の答えを –

0

私は `InStr`文を分離し、代わりに` `Or`のAnd`だけでなく、私の` TextToの範囲にそれらを更新し、この

Sub WordSplit() 
Dim lastRow As Long 
Dim r As Long 

lastRow = Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Count 

    For r = 1 To lastRow 
     If Cells(r, 8) = "Words" Or Cells(r, 8) = "Words2" Then 
     Else 
      Cells(r, 8).TextToColumns Destination:=Cells(r, 8), 
      DataType:=xlDelimited,TextQualifier:=xlDoubleQuote, 
      ConsecutiveDelimiter:=True 
     End If 
    Next r 
End Sub 
+0

更新しました。これは、変更が必要なアウトラインではなく、元のコードを完全に変更する同様の必要性を満たすために働くかもしれません。行数をカウントするために上記のコードを挿入すると、ファイル全体で同じ数の行を維持するという本来の目的が失われる可能性があります。この特定の 'lastRow'にデータが含まれていても削除されていた行をインクルードするのかどうかはわかりません。区切り記号は、二重引用符の代わりにスペース区切り記号です。入力いただきありがとうございます!別の可能性を見るのはいつも素晴らしいです。 – Liz

関連する問題