Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Excel 2016)
TRIM関数の使用法
投稿日時: 24/03/31 11:48:23
投稿者: shimoichimabu

他社から更新マスターファイル(Excel)をもらいました。
しかし、品名、ロット番号の先頭に通常のスペースでないスペース?が付いています。
いわゆるゴミ?
このゴミ?をセルにコピーし、=CODE関数で調べると、31でした。
まず、この数字の意味はなんでしようか?
そこで、高速に処理をするため、以前ネットで入手した下記コードを実行したら、このゴミは除去できました。
 
Dim a As Variant
 
With ActiveSheet.UsedRange
    a = Application.Trim(Application.Clean(.Cells)
    .ClearContents '←にしたら更に高速処理されるそうです
    .Value = a
End With
 
向学のためですが、TRIMはワークシート関数でもあり、VBA関数でもあります。
下記コードではエラーが出ます。なぜ Application でないと駄目でしようか?
 
a = WorksheetFunction.Trim(Application.Clean(.Cells)
a = Trim(Application.Clean(.Cells)

回答
投稿日時: 24/03/31 15:27:50
投稿者: WinArrow

=CODE(LeFT(A1,1))
→31
は、制御文字の1つです。
TRIM関数では削除できません。
 
半角スペースならば、32になります。
ワークシート関数に
REPLACE関数で対応できると思います。
 
=IF(CODE(LEFT(A1,1))=31,REPLACE(A1,1,1,""),A1)

回答
投稿日時: 24/03/31 15:30:12
投稿者: WinArrow

TRIM関数
ワークシート関数とVBAでは、
若干違いますから、よく調べて使いましょう。

回答
投稿日時: 24/03/31 15:35:21
投稿者: WinArrow

引用:

以前ネットで入手した下記コードを実行したら、このゴミは除去できました。

TRIMでは除去できません。
Application.Clean
で、印刷できない文字が除去されてだけです。

回答
投稿日時: 24/03/31 16:42:34
投稿者: WinArrow

引用:

向学のためですが、TRIMはワークシート関数でもあり、VBA関数でもあります。
下記コードではエラーが出ます。なぜ Application でないと駄目でしようか?

 
一言で言うと「仕様」です。
 
機能も違いまう。
スペルが同じでも機能が異なるものあります。
 
よく調べて使いましょう。

投稿日時: 24/03/31 20:35:41
投稿者: shimoichimabu

WinArrowさん、いつもお世話になっております。
 
>ワークシート関数とVBAでは、若干違いますから、よく調べて使いましょう。
確かに調べましたら、
「ワークシートのTRIM関数は文字列中の余分なスペースも削除しますが、VBAのTrim関数は前後のスペースのみを取り除きます。」との記載があり、少し違いますね。
 
>=CODE(LeFT(A1,1)) →31 は、制御文字の1つです。TRIM関数では削除できません。
やはり、ただのスペースとは違うのですね。
 
>一言で言うと「仕様」です。
承知しました。
 
この度はもやもやが取れて、すっきりしました。
ありがとうございました。