[[20210201210310]] 『同じ文字列で一致しない理由』(テラ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『同じ文字列で一致しない理由』(テラ)

お世話になります。 
マクロや関数で文字列や数値を参照・比較するのですが
形式等一致しているのに参照されません。
調べていると、元のデータがCSVファイルから文字・数値を別のブックへコピーペーストして比較しているのが悪さをしていそうなことが分かっています。(ペーストした文字を比較元データとすると動きますが、手打ちの文字だと表示されません)
この場合手打ち文字とコピーした文字列を一致させる方法を教えてくれませんでしょうか?
参考になるか分かりませんが、元のマクロを下記に貼っておきます。

    Dim 検索値() As Variant
    Dim 検索範囲() As Variant
    検索値 = Worksheets("参照").Range("D2:D112").Value
    検索範囲 = Worksheets("元").Range("A2:AE10001").Value 
    Dim ary() As Variant
    ReDim Preserve ary(1 To UBound(検索範囲), 1 To UBound(検索範囲, 2))
    Dim myDic As Object
    Set myDic = CreateObject("scripting.dictionary")
    Dim i As Long, j As Long, k As Long
    For i = 1 To UBound(検索値)
        myDic(検索値(i, 1)) = i
    Next
    For i = 1 To UBound(ary)
        If myDic.Exists(検索範囲(i, 2)) Then
            k = k + 1
            For j = 1 To UBound(ary, 2)
                ary(k, j) = 検索範囲(i, j)
            Next
        End If
    Next
    Worksheets("結果").Range("A2").Resize(k, UBound(ary, 2)).Value = ary

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 理屈としてですが、

 文字長、文字型、一文字毎の文字コード を調べれば、何が違うのか判明するハズです。

 その調査をするのが確実です。
 当てずっぽうで原因を考えるのは時間の浪費になることが多いです。

 >この場合手打ち文字とコピーした文字列を一致させる方法
 上の調査で何が違うのか分かる訳ですから、
 悪さをしている方の文字を悪さしなかったものに変更する、と言う段取りになります。

(半平太) 2021/02/01(月) 23:25


半平太様、返信ありがとうございます。
無知な質問で申し訳ないのですが、文字コードの判定というのは関数で言うCODE・UNIKODEを使った分析のような形になりますか?手打ちの文字とコピー文字での違いを調べる感じで。

(テラ) 2021/02/02(火) 01:00


 >文字コードの判定というのは関数で言うCODE・UNIKODEを使った分析のような形になりますか?

 UNICODEが絡む場合はそうですが、
 通常は当該2つのデータをワークシート上に並べて、関数で判定していますけども。(私は、ですが)

  (1) C2セル =ISBLANK($B2)
  (2) D2セル =LEN($B2)
  (3) E2セル =TYPE($B2)
  (4) F2セル =CODE(MID($B2,COLUMN(A1),1))  これを右にコピー

 <見比べ表 結果図>
 行  _____A_____  ___B___  __C__  ___D___  _E_  _F_  _G_  ___H___  ___I___  ___J___
  1               データ   空白   文字長   型   c1   c2   c3       c4       c5     
  2  正しい       ab       FALSE        3    2   97   98       32  #VALUE!  #VALUE!
  3  悪さされた   ab       FALSE        2    2   97   98  #VALUE!  #VALUE!  #VALUE!
  4                                                                                
  5  正しい          1234  FALSE        4    2   49   50       51       52  #VALUE!
  6  悪さされた      1234  FALSE        4    1   49   50       51       52  #VALUE!
  7                                                                                
  8                                                                                
  9  正しい          0123  FALSE        4    2   48   49       50       51  #VALUE!
 10  悪さされた       123  FALSE        3    1   49   50       51  #VALUE!  #VALUE!

(半平太) 2021/02/02(火) 10:05


半平太様、ありがとうございます。
文字コードとは・・・??
となって調べてる段階でして、判定方法分からず仕舞いだったので非常に助かりました。
上記の方法で、一度試してみます。
(テラ) 2021/02/02(火) 19:52

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.