• ベストアンサー

VBA 2つの文字列の差を見る方法

webonerの回答

  • weboner
  • ベストアンサー率45% (111/244)
回答No.1

FIND関数での確認は? 実際のコードと文字列を提示したら原因を探してもらえると思います

High_Score
質問者

お礼

ありがとうございます。 指定のRootフォルダ内にある複数のフォルダの中から、strFolderにマッチ(Like使用)するものを選び、配列FolderListとして出力するものです。 sub SearchFolder() Dim strFolder As String, Root As String Dim i As Long Root=Thisworkbook.Path & "\data" Set FSO=CreateObject("Scripting.fileSystemObject").GetFolder(Root).SubFolders cnt=0 For Each f In FSO   Range("A1")=f.Name '値確認用 Range("A2")=strFolder '値確認用 If strFolder Like f Then   ' ★ここが問題 cnt=cnt=1 ReDim Preserve FolderList(cnt) FolderList(cnt)=f.Name End If Next End Sub Rootのフォルダの中には例えばA,B,Cと3個のフォルダがあるとして、 strFolder="B" として実行すると★行ではf.Name="B"の時にTrue判定してくます。ところが、 strFolder="B*" として実行すると、Falseです。私はTrueである事を期待してますが、何か違うのでしょうか? もうひとつ、デバック中はカーソルを当てた変数の値を確認出来ますが、f.Nameは出来ません。しかしfはフルパス表示がなされます。これは正しいと思っていいでしょうか?

関連するQ&A

  • 実行時エラー93 パターン文字列が不正です

    ifステートメントでlike演算子を使っていると、 ある文字列で「パターン文字列が不正です」というエラーになります。 意味が分からないのですが、like演算子で使えない文字列があるのでしょうか?

  • エクセルVBA 長さ0の文字列をNullに

    エクセル2000です。 アクセスから出力されたデータをエクセルに貼り付けた場合、問題がおきることがあります。 調べてみたら、アクセスでは、同じ空白でも、レコードが作られてからまだ一回もデータが入っていない状態と、何かデータが入ったことはあるが、削除されて今は空白になった状態をそれぞれ「Null値」と、「長さ 0 の文字列」との 2 種類に区別しているようです。 そのためなのか、それをコピーしてくるとエクセル側でも何もデータが入ってないのに「空白」とはみなされないセルができてしまい、マクロの動きをおかしくしてしまうことがあります。(今日、マクロが想定しない動きをして、その原因がわからず往生しました) やむをえず以下のようなマクロをつくりましたが、Usedrangeが広いとこれもけっこう時間がかかります。 Sub Null化() '長さ0の文字列をNullに   With Application     .ScreenUpdating = False     .Calculation = xlCalculationManual       For Each c In ActiveSheet.UsedRange         If c.Value = "" And Not IsNull(c) Then           c.ClearContents         End If       Next c     .Calculation = xlCalculationAutomatic     .ScreenUpdating = True   End With End Sub 最初から、「長さ 0 の文字列」セルを一度に選択する方法があれば簡単なのですが、そのような方法はありますか? あるいは他のもっとよい方法などがあればご教示くださいませ。  (o。_。)oペコッ

  • 文字列の比較に関する質問

    文字列をif文で比較したいのですが、まず下記の例だと char *a a="a"; if(a=="a"){ printf("等しい"); }else{ printf("等しくない"); } 文字列は等しくなるのですが下記の例ではなりません 何故なのでしょうか。 read(s_sock,&buf,sizeof(buf)) if(a=="GET"){ printf("TRUE") }else{ printf("FALSE"); }

  • 文字列で渡された式

    質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================

  • 【Teratermマクロ】文字列の一致比較について

    If文を用いて、文字列同士が同じかを確かめたいのですが If文では数字のみしか比較できないらしいということがわかりました。 Teratermの場合、他の方法などで文字列の一致を確認できないのでしょうか? ご存知の方がいらっしゃいましたら、是非教えて下さい。

  • ACCESS 文字列の比較(完全一致)

    いつもお世話になってます。 A = "a" B = "A" IF A = B Then で文字列AとBを比較するとTrueになってしまいますね。でもここではFalseに判定して欲しいのです。 Option Compare Database を Option Compare Binary にすればFalseになるのはわかるのですが、他の箇所の比較に影響が出るのが怖いので、それはしたくありません。 文字列を完全一致で比較する方法があると思うのですが、調べてもわかりませんでした。 知っている方、どなたか教えてください。 ACCESS2000です。 よろしくお願いします。

  • 【Excel】 *を上付き文字にするマクロ

    Excelで統計の図表を作成する際、 P値に付随する、その有意性を表す*(アスタリスク)を上付き文字に設定することが頻繁にあるのですが、面倒で困っています。 マクロで組みたいのですが、 LIKE演算子で*を設定する方法はどうすればいいのでしょうか? チルダを使用した"~*"でも無理だったのですが、方法があれば教えてください。 よろしくお願いします。 ※以下に現在暫定的に使用している、"数値"、"."、"-"以外の文字を上付きに設定するマクロを書いておきます。 Sub 数字のみ上付き設定() Dim セル As Range Dim 値 As String Dim 文字の位置 As Integer For Each セル In Selection For 文字の位置 = 1 To Len(セル.Value) 値 = Mid(セル, 文字の位置, 1) If 値 Like "[0-9]" <> True And 値 Like "." <> True And 値 Like "-" <> True Then セル.Characters(Start:=文字の位置, Length:=1).Font.Superscript = True End If Next 文字の位置 Next セル End Sub

  • Excel:文字列の比較:大文字と小文字の区別

    Excel(2002)のワークシートの数式で文字列を比較するとき 半角英字の大文字と小文字が区別されないようなのですが、 区別するためにはどうしたらよいのでしょうか。 ※任意のセルで ="a"="A" とすると TRUE が帰ってくる。Countif などの動作も同様。 ※VBAでは次のコードを実行すると FALSE が表示される。 Sub compare() If "a" = "A" Then MsgBox "TRUE" Else MsgBox "FALSE" End If End Sub カテゴリ違いかもしれません。とすれば申し訳ありません。よろしくおねがいします。

  • 文字列の配列の比較

    こんにちは。タイトルどおり簡単な質問なのですが、どうしても確認したいのでお願いします。 とあるメソッドで、2次元配列の中にいくつか大文字のOが入ってるのですが、与えられた配列にOがあればtrueを返し、なければfalseを返します。 public boolean cellAt(int row, int col){ if(space[row][col].equals("O")) return true; else return false; } rowとcolはテストメソッドから値を受け取ります。 これでプログラム自体は動くのですが、WebCatという自動的に採点するものがあるのですが、それによるとエラーがでてしまいます・・・。 どこが違うのかは教えてくれないのですが・・・。 上で間違っているとすれば、文字列の比較くらいしかないんじゃないかと思うのですが、 space[row][col].equals("O") これで比較できますよね? 他のを調べて、if (Arrays.equals(space[row][col], "O"))これを試してもみたのですが、赤線が出てしまって無理でした。 どなたか宜しくお願いします。

  • 文字列での数値の入力方法

    WINDOWS XP EXCELL 2003です。 6桁(200001~299999)の数字を入力をしていますが 例えば 200001 のコードを入力しようとしたときは 現在はそのまま 200001 と入力しています。 これを 1 と入力すれば 200001 と省略して入力する方法はないでしょうか。 下記の2つの方法で試しましたがうまくいきません。  1 ユーザー定義で  200000 と設定 セルに1と入力すると確かに200001となりますが 文字 列 の扱いになりません。  2 A1 = 200000 B1 = 1 で A1+B1=200001 と矢っ張り文字列にはなりません。 文字列を参照している数式が =IF(B7="","",VLOOKUP(B7,商品管理!$A$2:$B$211,2,FALSE)) & "" 何か良い方法で省力化できて入力でき且つ文字列なることは可能でしょうか。 良い方法がありましたらご指導いたたけませんでしょうか。 よろしく御願いします。