2016-05-13 6 views
3

VBAを初めて使用しました.2枚のシートの間に部分文字列(またはセル)のマッチングを行いたいと思います。Excelの部分セル(または文字列)が一致します

名1の例では、「ITエグゼクティブサリー・リム」

だろうName2は例が

Name1 = Sheets("Work").Cells(RowName1, ColName1) 
Name2 = Sheets("Roster").Cells(RowName2, ColName2) 

'This condition doesn't work 
If Name1 = "*" & Name2 & "*" Then 
    'The "Name2" comes out with a compile error: Invalid Qualifier 
    Name2.Font.Strikethrough 
    Exit Do 
Else 
    End If 

しかし、それは動作していない「サリー・リム」になります。コーディングを実行すると、何も起こらないか、エラーが表示されます。ジョンによって提案されたように、私は「範囲」に「文字列」からの私の宣言を変更し、もう後に取り消し線部分が解決されていて、それが「コンパイルエラー」が表示されません

If ShiftName Like "*" & CashName & "*" Then 
    CashName.Font.Strikethrough = True 

編集したコーディングを助けてくださいコールマン。

私は、Name1とName2を両方ともSallyに変更して試してみました。そして、以下の条件を使って打ち切りを行ってください。私はそれが条件を実行不可能にした "*"だと信じていました。

If ShiftName Like CashName Then 
    CashName.Font.Strikethrough = True 

どのように条件を変更して部分的に一致させることができますか?

第2編集:

マイバッド!私は自分のName1が大文字であることに気付きました。

+0

どのようにコードが機能していますか?変数名は数字で始めることはできません。 –

+0

だから私はそれを動作させるためにどのように変更することができますか?私を教えてください。ありがとうございました – stupidgal

答えて

3

を可能

If Name1 Like "*" & Name2 Then 

Strikethroughも正しく使用する必要があります。これをTrueに設定する必要がブール型プロパティです。編集に

If Name1 Like "*" & Name2 Then 
    Name2.Font.Strikethrough = True 
    Exit Do 
Else 
    End If 

Dim Name1 As Range, Name2 As Range 'If you don't have this already declared 

'then ... in the loop: 

Set Name1 = Sheets("Work").Cells(RowName1, ColName1) 
Set Name2 = Sheets("Roster").Cells(RowName2, ColName2) 

If Name1.Value Like "*" & Name2.Value & "*" Then 
    Name2.Font.Strikethrough = True 
    Exit Do 
Else 
    End If 

それを:あなたの拡大の質問に基づいて

、あなたはこのような何かを行うことができますRange変数に.Valueを使用することは厳密には必要ではありません(Likeを使用した比較は、それなしでは期待どおりに機能します)。ただし、範囲Vを使用すると、範囲オブジェクトのデフォルトプロパティに頼るのではなく、不可能です。

また、完全に変数Name1Name2で済ますことができます:

If Sheets("Work").Cells(RowName1, ColName1).Value Like "*" & Sheets("Roster").Cells(RowName2, ColName2).Value & "*" Then 
    Sheets("Roster").Cells(RowName2, ColName2).Font.Strikethrough = True 
    Exit Do 
Else 
    End If 

最終発言:ElseEnd If直後はやや無意味です。おそらくあなたの実際のコードはelse節で何かをします。そうでない場合は、他のコードを完全に削除してからの直後にあるExit Do

+0

確かに...良いキャッチ:) –

+0

あなたの助けをありがとう。しかし、私は "コンパイルエラー:Invalid qualifier"を受け取った。 – stupidgal

+0

@stupidgal私はあなたのコードスニペットだけを持っていました。私は 'Name2'が範囲をループするために使われていたRange変数だと仮定していましたが、明らかにそうではありません。 'Name2'はどのように宣言されていますか?おそらく、あなたのコードを編集して、周囲の 'Do Loop'(またはそれ以上のコード、おそらく長すぎない場合は全体のサブコード)を含めることができます。 –

1

Likeオペレータ使用する:あなたは、あなたが特定のパターンマッチングにLikeを使用することができますが、それはまたLikeの使用に関する@MacroManの答えに加えて野生文字*

+0

上記のコードは機能しませんでした。私がそれを実行すると、条件に応答がありません – stupidgal

+0

'Name1'は明らかに' Name2'が何であれ終了しません。これらの回答はあなたの質問のコードに基づいています。あなたが見ている値は見えません。 –

+0

多分私はそれを再度確認します – stupidgal

関連する問題