• ベストアンサー

ExcelVBAで部分一致(*)をしたい

以下のコードで部分一致(*)をさせようとしたのですが、 コンパイルエラーのメッセージが出てしまいます。 どうしたらいいのでしょうか。 よろしくお願いします。 test = Cells(2, 3).Value test2 = Cells(1, 3).Value If * & test & * = test2 then …

質問者が選んだベストアンサー

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

#1です。 >If test Like "*" & test2 & "*" then ↓の方が適切ですね。失礼しました。 If test2 Like "*" & test & "*" then

smorgas030
質問者

お礼

ありがとうございました。 解決しました。

その他の回答 (3)

回答No.4

やりたいことはみんなの言うとおり文字列リテラルの書き方とその連結、like演算子の使用なんだろうけど・・・ 個人的にはその路線放置でhana-hana3さんの方法に賛成。 Option Explicit Sub hoge() Dim test As String Dim test2 As String test = "[" test2 = "[[" '実行時エラー:パターン文字列が不正です If test2 Like "*" & test & "*" Then End If End Sub とか考慮するのが面倒くさい

smorgas030
質問者

お礼

ありがとうございました。 解決しました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

if文ではそのような使い方はできません。 If InStr(test , test2) > 0 Then InStr関数 http://officetanaka.net/excel/vba/tips/tips33.htm http://officetanaka.net/excel/vba/function/InStr.htm

smorgas030
質問者

お礼

ありがとうございました。 解決しました。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

Like演算子と組み合わせます。 If test Like "*" & test2 & "*" then

smorgas030
質問者

お礼

ありがとうございました。 解決しました。

関連するQ&A

  • エクセルマクロで数値の一致ができない

    マクロで以下のコードを作成しましたが、うまくいきません。 If Left(Cells(3, 2).Value, 5) = Cells(3, 6).Value Then ……………………… End if Cells(3, 2),Cells(3, 6)の値が数値だと見かけでは一致していますが、 一致していないとされています。 ■うまくいかない Cells(3, 2)…123456789 Cells(3, 6)…12345 Cells(3, 2),Cells(3, 6)を文字に変えると問題なく動作します。 ■うまくいく Cells(3, 2)…abcdefgh Cells(3, 6)…abcde Cells(3, 2),Cells(3, 6)を数値でもうまくいくにはどうしたらいいのでしょうか。 よろしくお願いします。

  • 一致するように思えるのですが。

    不思議でなりません。 以下のようなコードを書いていますが、 間違いなく一致するはずなのに一致しない方にのみ流れます。 (atariのメッセージが出ません) If Cells(n, 4) = Cells(8, 12) Then msgbox "atari" Else MsgBox Cells(n, 4) MsgBox Cells(8, 12) End If ということで、elseに比較する両方を表示してみましたが、 チャンと同じ数字(実際は194)が表示されます。 1ステップずつのトレースでもマウスを宛てると194と表示されます。 どのように調べればよいでしょうか。 考えられるポイントを教えてください。

  • 実行時エラー13 型が一致しません。エラー2029

    エクセルです。 A1に「=a」と文字が入っていて、 #NAME? となります。 その状態でvbaで セルA1に「=a」が入っているのなら としたい為、 Sub test() If Cells(1, 1) = "=a" Then End If End Sub こうしたのですが、 実行時エラー13 型が一致しません。 になります。 vba中断中に、Cells(1, 1)の部分にマウスカーソルを当ててみると エラー 2029 となっています。 If Cells(1, 1) = "=a" Then が無理なら、 If Cells(1, 1) = "#NAME?" Then なら行けるかな?と思いましたが、 全く同じエラーになります。 最終的に何がやりたいかと言うと、 Sub test() If Cells(1, 1) = "=a" Then Rows(1).delele End If End Sub のように、#NAME?の場合は、その行を削除したいです。

  • ifの条件であるセル範囲と別の範囲が完全に一致するとしたい

    エクセルのマクロで、 if **** then の部分の ****にある範囲のセルとある範囲のセルが完全に一致しているという If Range(Cells(2, 3), Cells(60, 3)) = Range(Cells(2, 4), Cells(60, 4)) Then みたいなかんじにしたいのですが、これだとエラーになります。 どうしていけばいいでしょうか? 宜しく御願いします。

  • ExcelVBAにて異なるシート間での値貼り付け

    Excel VBAの異なるシート間での値のコピーと貼り付けに関して質問をさせてください。 私はExcel2007を使って、Sheet1のセルの値をsheet2に貼り付けようとして以下のコード(1)を書きましたが、うまくいきません。動作確認のためsheet1内での値のコピペを行うコード(2)を作成し実行したところ、正常に動作しました。 コード(1)をコンパイルしたときに表示されるメッセージは、[実行時エラー'1004':アプリケーション定義またはオブジェクト定義のエラーです] です。 質問としては、 Q1:等号(=)を用いた値の貼り付けは、異なるシート間に対応していないのでしょうか。 Q2:コード(1)を改良する場合、どのように書き直せばよいでしょうか。 アドバイスいただけましたら幸いです。 コード(1) Worksheets("Sheet2").Range(Cells(1, 10), Cells(5, 10)).Value = Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Value コード(2) Worksheets("Sheet1").Range(Cells(1, 10), Cells(5, 10)).Value = Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Value

  • ExcelVBA エラー処理で2回目の同一エラーは

    こんにちは。 EcxelVBA初心者です。 セルD8~D10の値をCP44~CP100の値と比較し、一致したら8~10行目のそれぞれのセルに記入する際、 CP44~CP100に一致しない場合(エラー91)、エラー処理でメッセージを表示し、次の比較に進みたくてGOTOを使用していますが、 一度目のエラーはできるのに、二度目のエラーでは「実行時エラー91」が表示されてしまいます。 なぜ、一度目と同じようにエラー処理でメッセージ表示、次の比較に勧めないのでしょうか? よろしくお願いします。 Sub test() Dim i As Integer Dim lng As Long i = 8 lng = 10 On Error GoTo D_Error i = 8 Cells(i, "D").Value = StrConv(Cells(i, "D").Value, vbUpperCase) '半角小文字は半角大文字に修正 strType = Cells(i, "D").Value For i = 8 To lng Cells(i, "D").Value = Trim(StrConv(Cells(i, "D").Value, vbUpperCase)) '半角小文字は半角大文字に修正し、余分なスペースも取る strType = Cells(i, "D").Value If Len(Trim(Cells(i, "D").Value)) = 0 Then ' D列のデータがなければ次の行へ GoTo BBB End If intStr = 0 Cells(i, "D").Select strType = Cells(i, "D").Value intStr = InStr(strType, "-") 'ハイフンの位置で調べる If intStr = 0 Then 'ハイフンがなければ、あいまい検索で文字列を探す Set rngTarget = Range("CP44:CP100").Find(What:=strType, lookat:=xlPart) intTarget = rngTarget.Row Cells(i, "AE").Value = Cells(intTarget, "CR").Value Cells(i, "AF").Value = Cells(intTarget, "CS").Value Cells(i, "AG").Value = Cells(intTarget, "CT").Value Else 'ハイフンがあれば、「(」カッコの有無を調べてから、「-」前の文字を完全一致で探す If Mid(strType, intStr - 1, 2) = "(-" Then strType = Left(strType, intStr - 1 - 1) Else strType = Left(strType, intStr - 1) End If Set rngTarget = Range("CP44:CP100").Find(What:=strType, lookat:=xlWhole) intTarget = rngTarget.Row Cells(i, "AE").Value = Cells(intTarget, "CR").Value Cells(i, "AF").Value = Cells(intTarget, "CS").Value Cells(i, "AG").Value = Cells(intTarget, "CT").Value End If BBB: Next i D_Error: If Err.Number = 91 Then If i > lng Then GoTo AAA End If MsgBox "CP列に該当する型式がありません。" & Chr(13) _ & Chr(13) _ & "  型式があるものには「-」を使用してください。" & Chr(13) _ & " それ以外はCP44~CP100にデータを入力してください。" ActiveSheet.Cells(i, "D").Interior.ColorIndex = 3 GoTo BBB Else GoTo AAA End If AAA: 'D8から下にデータがない場合 Set rngTarget = Range("CP44:CP100").Find(What:=strType, lookat:=xlPart) '完全一致の解除 Range("D8").Select End Sub

  • 連続するセルの比較をしたいのですが、(型が一致しません)のエラーが出ます。

     下記のどの部分でエラーになるのか、お教えください よろしくお願いします。  Sub CellsSamp() Sheets("sheet3").Select If Range(Cells(5, 1), Cells(5, 6)) = Range(Cells(5, 8), Cells(5, 25)).Value Then Range(Cells(6, 1), Cells(6, 6)) = Range(Cells(5, 1), Cells(5, 6)).Value End If End Sub

  • ExcelVBA一致しない場合その他の行に集計する

    「ExcelVBA複数条件一致後別シートに結果表示」という質問を以前させていただき、丁寧にコードを解説していただきました。 ※その節はありがとうございました。 ●ファイルの内容(概要)配下の通りの構成です。  <Sheet1>   A列:性別(男性:1、女性:2でコード化)   B列:死因コード(数値5~6桁)   C列:年齢   D列:市町村(3桁でコード化「201」等)  <Sheet2>Sheet1で条件に一致したものを以下の通り表を作成する   ・「セルA1」に表にしたい市町村コードをあらかじめ入力しておく   ・セルB1~セルEC1まで死因コード   ・セルA2~セルA132まで年齢0~130   ・セル範囲B2~EC132に「A1」に入力した市町村コードの男性の値が入る   ・セルB133~セルEC133まで死因コード   ・セルA134~A264まで年齢0~130   ・セル範囲B134~EC264に「A1」に入力した市町村コードの女性の値が入る そして、以下のコードを教えていただきました。 **************************************************** Dim r As Long Dim i As Integer, j As Integer, k As Integer Dim Wsf As Object Dim SCode As Range, Nenrei As Range Dim Ws1 As Worksheet, Ws2 As Worksheet Set Ws1 = Worksheets("sheet1") Set Ws2 = Worksheets("sheet2") Set Wsf = Application.WorksheetFunction Application.ScreenUpdating = False Ws2.Range(Ws2.Cells(2, 2), Ws2.Cells(132, 133)).ClearContents Ws2.Range(Ws2.Cells(134, 2), Ws2.Cells(264, 133)).ClearContents With Ws2 Set SCode = .Range(.Cells(1, 1), .Cells(1, 133))  ↑ここはこのように書いていただいたのから、  指定の死因分類があったためシートから参照するようコードを変えています。  手元にファイルが無くてかけないのが初心者の情けないところです。  申し訳ありません。※シートは同一ファイル内におくようにしています。 End With r = 2 Do While Ws1.Cells(r, 1).Value <> "" If Ws1.Cells(r, 4).Value = Ws2.Cells(1, 1).Value Then If Ws1.Cells(r, 1).Value = 1 Then i = 1 ElseIf Ws1.Cells(r, 1).Value = 2 Then i = 134 End If With Ws2 Set Nenrei = .Range(.Cells(i, 1), .Cells(i + 130, 1)) End With j = i + Wsf.Match(Ws1.Cells(r, 3).Value, Nenrei, 0) - 1 k = Wsf.Match(Ws1.Cells(r, 2).Value, SCode, 0) Ws2.Cells(j, k).Value = Ws2.Cells(j, k).Value + 1 Else End If r = r + 1 Loop Application.ScreenUpdating = True Set Scode = Nothing Set Nenrei = Nothing Set Wsf = Nothing Set Ws1 = Nothing Set Ws2 = Nothing End Sub **************************************************** 表はあらかじめ作成しておくので、そこに集計結果が入ります。 実行していたら、古いファイルに不詳の死因コードが登場し、 どうしたらいいかと考えた結果、死因コードの列の最後に「その他」を設け、 死因コードに一致しない場合にはそこに集計結果をカウントすることは できないか?という考えに至りました。 自分で考えるのが一番勉強になると分かっていても試行錯誤している時間が無く、 急ぎのためお知恵のある方々にご協力を頂ければと思い、 再度質問させていただいた次第です。 前の質問は↓こちらです。 http://okwave.jp/qa/q8356291.html 何卒よろしくお願い申し上げます。

  • vbsのFolderExistsで部分一致をさせたい

    VBSで以下のコードを作成しましたが動作しません。 ********動作しない************************** if (objFileSys.FolderExists("200810*")= True) then  msgbox "yes" else  msgbox "no" end if ********動作する************************** if (objFileSys.FolderExists("200810")= True) then  msgbox "yes" else  msgbox "no" end if 部分一致でフォルダが存在するかをしたいのですが、 どうしたらいいのでしょうか。 よろしくお願いします。

  • 比較したいセルの文字列が一致したら"一致"

    いい案が思い浮かばないため皆さんのお知恵をお貸しください。 下はエクセルと思ってください    A列             B列 1  2009/01/07/22:55   2009/01/07/22:56 2  テスト1           テスト1 3  テスト2           テスト2 4  テスト3            テスト3 5  テスト4           テスト6 とこのようなシートがあります。 セルA1とB1は時間のため可変で比較対照としたくありません それ以外のA列とB列がすべて一致したとき一致 不一致があればセルA5が不一致とmsgboxで出したいと考えております。 まだ思案中で途中なのですが Sub test() Dim i As Integer i = 1 Do While Cells(i, 1) <> "" If Cells(i, 1) = Cells(i, 2) Then MsgBox "一致" i = i + 1 ElseIf Cells(i, 1) <> Cells(i, 2) Then MsgBox "不一致" i = i + 1 End If Loop End Sub いまはまだこの程度のレベルです 宜しくお願いします。

専門家に質問してみよう