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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

4回答

9995閲覧

文字列内に含まれる空白を置換するマクロの記述方法について

ryuujinn

総合スコア72

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2016/11/28 14:19

文字列内に含まれる空白二つを,に置換したくマクロを書いたのですが
どうしても上手くいきません
以下のコードが書いたコードになります

やりたいことは

TV パソコン ラジオ ビデオ CDプレイヤー アンプ

処理したい結果↓

TV,パソコン,ラジオ,ビデオ,CDプレイヤー,アンプ

文字と文字の間には空白が二つあります

Sub Sample() Dim myRange As Range For Each myRange In Range("A1") myRange.Replace _ What:=" ", Replacement:=",", _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False Next End Sub

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

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

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

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

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

guest

回答4

0

自己解決

試行錯誤してなんとか置換できるものとできないものがありますがいくつかは置換できるようになりました
コメント、コードして頂きました皆様本当にありがとうございました

Sub Sample()
Range("A1") = Replace(StrConv(Range("A1"), vbWide), " ", ",")
Range("A1") = Replace(StrConv(Range("A1"), vbWide), "??", ",")

End Sub

投稿2016/11/29 02:44

編集2016/11/30 04:03
ryuujinn

総合スコア72

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

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

0

ttyp03様,ryuujinn様

上記のサンプル文字列では「文字コードの違い」が原因です。
スペースやカンマ等の「特殊記号」の場合、昔はよく発生していました。

今回の場合、下記コードで実行してみました。
(セルA1に例示の文字列を代入済み)

Excel

1Sub ByteCdcheck_Sample() 2 3 Dim myStr As String 4 5 myStr = Range("A1").Value '例の文字列 6 7 '文字列の3文字目のスペース1個のASCIIコードと、 8 'Excel手入力の半角スペースのASCIIコードを出力 9 10 MsgBox "添付例スペースBYTE:" & Asc(Mid(myStr, 3, 1)) & Chr(13) & _ 11 "ExcelスペースBYTE:" & Asc(" ") 12 13End Sub

結果ですが、私の環境下(Windows10,Excel2016(32bit))では
添付例スペースBYTE:63
ExcelスペースBYTE:32

と出力されます。

OSやExcelのバージョンがが32bit,64bitでも異なる事があるので、注意が必要です。
バージョンについては、「ファイル」タブの「アカウント」→「Excelのバージョン」で確認可能です。

但し、これを処理するとなると、意外に厄介です。
(Excel-VBAはbit単位の処理は苦手な言語なので…)

正直コピー元データの形式が分からないとこれ以上は何とも…。
力不足で大変申し訳ございません。

投稿2016/11/29 05:51

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ryuujinn

2016/11/30 04:23

tmkey01さん、ありがとうございます コードを使い調べた結果、置換できないのは 添付例スペースBYTE:-27526 ExcelスペースBYTE:32 の方です 添付例スペースBYTE:63 ExcelスペースBYTE:32 の方は以下のコードで置換できました Sub Sample() Range("A1") = Replace(StrConv(Range("A1"), vbWide), " ", ",") Range("A1") = Replace(StrConv(Range("A1"), vbWide), "??", ",") End Sub
guest

0

提示のコードでうまく動きましたよ。
Excelのバージョンによる違いでしょうか。
別の方法のコードを貼っておきますのでお試しください。

VBA

1Dim myRange As Range 2 3For Each myRange In Range("A1") 4 myRange = Replace(myRange, " ", ",") 5Next 6

投稿2016/11/28 23:36

ttyp03

総合スコア16998

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

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

ryuujinn

2016/11/29 01:28

ttyp03さん、コード記載ありがとうございます コードを試してみたのですが、ダメでした 手入力では上手くいくのですが、上記の文字列をコピーし、excelに張り付けると 処理がされませんでした
ttyp03

2016/11/29 02:47

半角スペースがUTF8の NO-BREAK SPACE というものであることはわかったのですが、それをマクロでうまく扱う方法がわかりませんでした。 下記サイトを参考に、マクロではないですが、Excelの置換機能でカンマに置き換えることはできました。 https://techracho.bpsinc.jp/baba/2010_07_22/2178 お試しください。
ryuujinn

2016/11/29 02:50

ttyp03さん、コメントありがとうございます 親切に色々と調べて頂きまして嬉しいです 助かります、ありがとうございました
guest

0

記載頂いたサンプルをコピーして試したら全然動きませんでした。
置換前の文字列を手入力でスペースを入れてあげると、こちらでは動作しました。
手入力で試されてみてはどうでしょうか?

投稿2016/11/28 14:49

yshima1129

総合スコア179

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

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

ryuujinn

2016/11/29 01:25

yshima1129さん、コメントありがとうございます 手入力で行ったら、できました しかし、やりたいことは手入力では膨大なため厳しいです テキストソフトから作ったデータをexcelに張り付けて、 二つの半角スペースを,に置換したいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問