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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

5回答

599閲覧

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

hokosugi

総合スコア63

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

1クリップ

投稿2019/03/24 22:23

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

vba

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

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

これがそのgifです

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

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

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

torisan👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

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

ノーブレークスペース - 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 06:42

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2019/03/25 08:50

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

0

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

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

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

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

投稿2019/03/25 04:21

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2019/03/25 08:53

ご回答ありがとうございます。 リンク先のとおり、ノーブレークスペースでした。 自分で欲しい情報を探せるようになることも肝要です^^ そうですね。精進いたします、ありがとうございました。
guest

0

情報が不足しています

提示いただいた判定文のコードだけでは、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 02:31

編集2019/03/25 02:49
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jawa

2019/03/25 06:40

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

2019/03/25 09:00

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

0

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

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

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

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

投稿2019/03/25 02:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2019/03/25 09:03

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

0

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

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

投稿2019/03/25 00:09

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2019/03/25 09:04

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問