2017-05-18 10 views
0

列Aの単語 "Apple"をチェックするループを作成しようとしました(私はVBAの新機能です)。列Aにはフルーツ名が含まれています。 「Apple」が見つかった場合、コードは範囲「H2:S2」を列Gにコピーし、列Aの対応する行の値をコピーします。VBAワイルドカードを使用して行内で値を見つける

ただし、検索条件の部分をワイルドカードに変更するとコードは実行されません私の目標は、単語Applecakeが存在する行を含めることです)。

lookupVal = "Apple" 'Works 
lookupVal = "*Apple*" 'Nothing happens 

はそれがワイルドカードで動作しますので、どのように私は以下のコードを調整する必要がありますまたは多分結果を達成するために、このコードの状態より良い解決策がありますか?

全コード:

Sub CopypasteValues() 
    Dim i, j, lastrowA As Long 
    Dim lookupVal As String 

    'finds the last row in Column A 
    lastrowA = Sheets("Dataset").Cells(Rows.Count, "A").End(xlUp).Row 

    'loop over values in Sheet "Dataset" 
    For i = 1 To lastrowA 
     lookupVal = "Apple" 'Define search critera 

     For j = 1 To lastrowA 
      currVal = Sheets("Dataset").Cells(j, "A") 
      If lookupVal = currVal Then 
       ValueCopy = Range("G2:S2").Copy 'Range to copy 
       Sheets("Dataset").Cells(j, "G") = Range("G" & j).PasteSpecial 
      End If 
     Next j 
    Next i 
End Sub 
+2

サイドノート:必ず**変数ごとにタイプを指定してください。 'Dim i、j、lastrowA As Long'では、最後のものは' Long'と宣言します。最初の2つは 'Variant'のままです:' Dim i As Long、j As Long、lastrowA As Long'を使用します。 「Long」と入力します。 –

+0

指摘してくれてありがとう!! – Wiz

答えて

3

あなたはLike演算子を使用することができます:lookupVal"*Apple*"だったとcurrVal"Aren't Apples nice to eat"た場合

If currVal Like lookupVal Then 

ので、テストはTrueだろうが。


また、あなたは大文字と小文字の区別の問題を回避したい場合は

If LCase$(currVal) Like LCase$(lookupVal) Then 

を使用する必要があります。


また、(必要に応じてLookAt:=xlPartまたはLookAt:=xlWholeパラメータで)Findを使用することを検討してではなく、セルごとの比較を行うことができます。しかし、それは実現可能な解決策であるかどうかについてのあなたの要求が正確であるかどうかにかかっています。

+0

多くの感謝!!!!私にとって完璧な作品です。 大変ご迷惑をおかけして申し訳ありません。私は今はそれに遭遇していないが、それを行うかもしれない。 – Wiz

+0

私は 'Find'を使用しようとしましたが、知識の段階ではまだ難しく、正しく動作させることができませんでした。 – Wiz

+0

@Wiz - 初心者の方で、スピードの問題を引き起こす可能性のあるデータがあまりない場合は、「好き」を使うのは間違いなく「最も簡単な」オプションになります。 – YowE3K

関連する問題