- ベストアンサー
エクセル関数で文字列の中のスペースの有無を調べたい。
エクセル関数について教えてください。 全てが半角のはずの文字列・A1セルについて、下記について調べたいです。 1.同列(A列)の他のセルに入力されている文字列とのダブリチェック(同じ文字列がないかの確認) *ダブリがある場合"ダブリ"表示 2.A1の文字列中のスペースの有無 *スペースがある場合"スペース"表示 3.A1の文字列中に全角が混ざっていないか *全角がある場合"全角"表示 1.については、 =IF(COUNTIF(A:A,A1)>=2,"ダブリ","") の関数を使用してチェックが出来ると思うのですが、 2.については、関数TRIM 及び 置換での削除方法、3.については、 関数ASC での半角変換 しか手段が見つかりませんでした。 上記のものをマクロを組んでいる中に組み込みたいので、出来れば、上記3つの結果をひとつのセル(C1)に表示させたいのですが、可能でしょうか? *A1セルに上記3つが当てはまる場合、C1セルに "ダブリスペース全角" と表示させたい。 どれについて引っかかっているのかがわかればいいので、記号などに置き換えてもかまいません。 可能な限り調べては見たのですが、私の知識ではどうにもなりませんでした。 もし、いい案などがあればご紹介してください。 宜しくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
s_husky です。 2:=IF(COUNTIF(A3,"* *")+(LEN(A3)<>LEN(TRIM(A1))), "スペース","") 両端のスペースを忘れていました。
その他の回答 (6)
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。 >メッセージボックスを使うというとこに眼から鱗でした 私の意図と違います。画面に出して、結果を手軽に確認して、私自身が、間違ったことをいってないか、確かめているだけです。 ワークシートファンクションが使えるという実例です。 関数でおなじみだし、ロジックでVBで組む(注)よりコーディング行が 少なくて済むように思います。 (注)For Nextで全行に対しIF文を繰り回し、件数を勘定するような例
s_husky です。 A3はA1に変えて下さい。 A1、A2、A3とテストセルを作っていました。 A1に変えて回答するつもりが、そのままになっていました。 無用な疑問を抱かせてスミマセン!
お礼
いえいえ。 こちらこそわざわざテストセルまで作ってご回答頂きありがとうございました。 エクセルを使っていると疑問だらけなもので…。 質問に答えていただきありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 マクロを考えてみました。 マクロについては、スペースは、全角半角がありますから、一旦、半角にして調べるか、でなければ、Like演算子の場合は、Text Compare モードにしてあげる必要がありますね。それが面倒なら、StrComp や InStr の vbTextCompare を引数にしてあげる必要があるかと思います。 CountIf は、自分のセルよりも手前にあるものと比較しています。ご自身がマクロを作る時の参考にしていただければ良いかと思います。 Sub CharCheckerPrc() Dim r As Range Dim c As Range Dim msg As String '検索列よりいくつ右側に出力するか? Const OFFSET_COL As Integer = 2 If TypeName(Selection) <> "Range" Then Exit Sub If Selection.Columns.Count > 1 Then MsgBox "複数の列は不可能です。", vbInformation: Exit Sub Set r = Selection Application.ScreenUpdating = False For Each c In r 'マウス選択 If VarType(c.Value) = vbString Then 'ダブり If WorksheetFunction.CountIf(Range(r.Cells(1), c), c.Value) > 1 Then msg = ",ダブり" End If 'スペース If InStr(1, c.Value, Space(1), vbTextCompare) > 0 Then msg = msg & ",スペース" End If '全角 If Len(c.Value) <> LenB(StrConv(c.Value, vbFromUnicode)) Then msg = msg & ",全角" End If If msg <> "" Then c.Offset(, OFFSET_COL).Value = Mid$(msg, 2) End If End If msg = "" Next Set r = Nothing Application.ScreenUpdating = True End Sub
お礼
丁寧にありがとうございます。 マクロ初心者なもので、わからないところが多々ありますが、これを元に少しずつ勉強していこうと思います。 ここ何日かは月末処理に終われますので、現在使用中のものに組み込められればそのまま使用させていただきたいと思います。 ありがとうございました。
1:=IF(COUNTIF(A:A,A1)>=2,"ダブリ","") 2:=IF(COUNTIF(A1,"* *"), "スペース","") 3:=IF(LEN(A1)<>LENB(A1),"全角","")
- imogasi
- ベストアンサー率27% (4737/17069)
1は WorksheetFunctionとしてCountIfを使うで良いと思います。 2は TRIMは真ん中のスペースは1つは残るでしょう。 Sub test02() x = WorksheetFunction.Substitute(Cells(2, 1), " ", "") x = WorksheetFunction.Substitute(x, " ", "") MsgBox x If x <> Cells(2, 1) Then MsgBox "スペースあり" End If End Sub 3は Sub test03() x = WorksheetFunction.Asc(Cells(3, 1)) MsgBox x If x <> Cells(2, 1) Then MsgBox "全角あり" End If End Sub 朝時間がなく取り急ぎ。ご参考に。
お礼
ありがとうございます。 メッセージボックスを使うというとこに眼から鱗でした。 ただ、チェックデータの中にミスデータが膨大にあるものでその全てにメッセージボックスを使うのはちょっと難しいかもしれません。 ただ、これにヒントを受けてマクロに組み込んでみたいと思っております。 朝早くからありがとうございました。
- papayuka
- ベストアンサー率45% (1388/3066)
希望する答えとなってるか解りませんが、、、 2)=IF(AND(ISERROR(SEARCH(" ",A1,1)),ISERROR(SEARCH(" ",A1,1))),"","スペース") 3)=IF(LEN(A1)=LENB(A1),"","全角") 一緒に表示はそれぞれ作業列を用意してC1に =D1&E1&F1 の方が簡単かと。
お礼
早朝から有難うございました。 月末処理に使用させていただきました。 やはり作業列を作るのが簡単ですかね~。 明日から短期間でマクロの組み換えをすることになっているので、いろいろといじくってみようと思います。 ありがとうございました。
お礼
ありがとうございます。 全角チェックの方法は結構何通りもあるのですね。 上記の関数 2:=IF(COUNTIF(A3,"* *")+(LEN(A3)<>LEN(TRIM(A1))), "スペース","") について再度お聞きしたいことがあるのですが、 COUNTIF(A3,"* *")とありますが、これはA3セルの中のスペースを探すという解釈でよろしいでしょうか? そうなるとA1に変えてしまってよろしいのでしょうか? またはA3セルをあけて関数を使用するとのことでしょうか? 全然理解していなくて申し訳ありませんが、再度ご指導をいただけたらと思います。 宜しくお願いいたします。