質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.61%

エクセル、セル内英文字配置が微妙にズレている

解決済

回答 5

投稿

  • 評価
  • クリップ 1
  • VIEW 1,535

score 63

判定をキーにしてセルの背景色を変える簡単なコードを書いています。
こんな感じ。

If reportWs.Cells(j, k).Value = judge And reportWs.Cells(j, k).MergeCells Then
   reportWs.Cells(j, k).Interior.Color = RGB(0, 255, 0)
ElseIf reportWs.Cells(j, k).Value = judge Then 
   reportWs.Cells(j, k).Interior.Color = RGB(255, 0, 0)
end if


そこでエラーが出るので調べるとjudgeの英小文字とreport.cells(j,k).valueのそれとの違いに気づきました。

これがそのgifです

問題なのはcells(2,1)の文字でcells(1,1)の左寄せとも、cells(3,1)の半角空白を先頭に付けたものとも微妙に違います。gifの数式バーをみるとよくわかります。これがエラーの原因で、急いでいたので元データのほうをコピペの上、左寄せに書き換えてから実行しましたが、なんだか気になっています。

➀半角空白でない
➁インデントは0
➂標準文字

上記が原因ではないことは分かっています。
お教えくださると幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+2

推測ですが、ノーブレークスペース(あるいはその変種)かなと思います。
詳細は下記参照。

ノーブレークスペース - Wikipedia

jawaさんの回答にもあるワークシート関数の CODE() で確認すれば、半角空白なら 60、ノーブレークスペースなら 160 になります。(変種は上記のWikipediaで確認してください。)

ちなみにVBAで確認するには、Asc関数ではなくAscW関数を使います。Asc関数はShif-JIS、AscWはUnicodeを返しますが、ノーブレークスペースはShif-JISにはないので、Asc関数だと?のコードを返します。

CODE()AscW関数で文字コードを確認したら、

Replace(文字列, ChrW(160), "")

で削除できます。(160の部分は調べた文字コード)

ノーブレークスペース(またはその変種)はTRIMCLEANでは削除できません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 17:50

    ご回答ありがとうございます。
    予想通り、ノーブレークスペースでした。デバックで "?" が出たところでしっかり検索出来たら見つけることできたはずでした。ともあれ一つ賢くなりました、ありがとうございました。

    キャンセル

+2

Excel TRIM関数で消えない謎の半角スペースをVBAでなんとかする

↑これかな?
結局ここのhatena19さんのログに戻ってくるのかも?

この件に関しては、以前に「エクセルの学校」の掲示板でも話題になったような気がします。
対応策はそっちの方がいろいろな案が出てるかも?
あと、見えない文字を消すのは、ワークシート関数のClean関数が便利です。
が、今回の件の文字は消えないと思うので、あちこち探し回ってみるのも一案です。
(一応の解決案が見つかったところで、ベストの案という保証はないので、いろいろ見て回って、
見識を広げてみてください。)

自分で欲しい情報を探せるようになることも肝要です^^

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 17:53

    ご回答ありがとうございます。
    リンク先のとおり、ノーブレークスペースでした。

    自分で欲しい情報を探せるようになることも肝要です^^

    そうですね。精進いたします、ありがとうございました。

    キャンセル

+1

Web上の値等を張付けたのであれば、文字コードが原因である可能性が高いかと。

Asc等で文字コードを調べてみてください。
詳しい事は、ご自分で調べてみてください~

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 18:04

    ご回答ありがとうございます。
    結局、ノーブレークスペースでした。ありがとうございました。

    キャンセル

+1

スペース(空白文字)といっても、実は様々な種類があります。

普通の半角スペース(0x20)、タブ(0x09)、リターン(0x0A)、改行(0x0D)、NULL(0x00)、垂直タブ(0x0B)、UTF-8半角スペース(0xC2A0)

前後にスペースが含まれる恐れのあるデータの比較は、Trim関数で囲っておくと問題が起こりにくくなると思います。

後々で使うデータならデータの方にTrimを掛けたほうが良いですが、そこは状況次第です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 18:03

    ご回答ありがとうございます。
    結局、ノーブレークスペースでした。trim関数でも取れないようです。私はtrim関数も知りせんでした。恥ずかしい限りです。今後の励みにしたいと考えています。兎に角、ありがとうございました。

    キャンセル

+1

情報が不足しています

提示いただいた判定文のコードだけでは、reportWs.Cells(j, k).Valueや変数judgeにどんな値が入ってくるのかもわかりません。

実際の値も「文字」として提示されていませんし、添付の動画では見た目の違いしかわかりません。

これではろくなアドバイスもできませんよね?

推測込みのアドバイス

おそらくreportWs.Cells(j, k).Valueの(j,k)にはおそらく(2,1)などが入ってきて、変数judgeにはA1セルの値などが入っており、一致しないということだと思います。

提示いただいたコードを見る限り、値が一致していれば結合セルか否かに応じた色で着色する処理に入るので、そのどちらの処理にも入らないということですよね?

本当にこの2項が不一致となっているのなら、いかに見た目が似ていようともそれは「文字列として異なるもの」ということです。

ちなみにアドレスバーには書式設定にかかわらず、そのセルの内容が表示されますので、フォントサイズやインデントが異なってもaならaが同じように表示されるはずです。
しかし今回はアドレスバーに表示される内容が少しずつ異なっているようですので、実際に異なる値が入っているのは間違いないのでしょう。

確認のために

なぜ不一致と判断されているのか?

それを確認するためには、それぞれどんな文字を取得しているのかを把握する必要があります。
ExcelVBAerさんからの「文字コードを調べてください」というのもそういうことです。

考えられる要因はいくつかあります。

・全角/半角の違い
⇒フォントによっては全角/半角の違いが非常に見分けにくいものがあります。
ワークシート関数=LEN(A2)=LENB(A2)で文字の桁数を確認してみてください。
半角のaであれば、LENが1、LENBも1となります。
全角のであれば、LENが1、LENBが2となるはずです。
半角スペース+半角aであれば、LENが2、LENBも2となるはずです。

・余分な文字が含まれている
⇒これはExcelVBAerさんのアドバイスにある文字コードを調べる方法で確認できます。
VBAで確認するならASC関数を使います。
ワークシート関数で確認するなら、=CODE(A2)などで確認してみてください。
対象セルの先頭文字の文字コードが確認できると思います。
例えば先頭が半角aなら97、全角なら9057、半角スペースなら32が返されるはずです。


まずはここらへんから確認して、現状を把握されてはどうでしょうか?

そのうえで「この状態のまま一致と判断させる」のか、「不要な文字を含まず、文字種も統一して、一致するような値をセルに入れる」のか、対応方針を決めればいいと思います。
↑ここらへんがnatoさんからのアドバイスの部分です。

参考になれば幸いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 15:40

    ん?よく質問文を読み返すと「エラーが発生」している?
    mattuwanさんアドバイスのようなNBSPの問題だけならエラーにまではならなそうだけど・・。

    もしエラーが発生しているのなら「どんなエラーが発生しているのか」も追記願います。

    キャンセル

  • 2019/03/25 18:00

    ご回答ありがとうございます。
    エラーが発生する、とは思い通りに動いてくれないという意味です。紛らわしい表現にしてしまいました、申し訳ありません。情報が少なく、表現も正確でないため誤解させてしまったこと今後の課題にしたいと思います。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る