• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セル内の文字列に[?]が含む場合につきまして)

セルA1の金融明細データのスペースを削除する方法とは?

このQ&Aのポイント
  • セルA1に貼り付けられた金融明細データの中にスペースが含まれている場合、それを削除する方法を教えてください。
  • また、スペースが削除された場合、一部のデータが「?」に置き換わってしまうことがあるようです。その問題も解決したいです。
  • 必要なデータの整理に役立つヒントや、関連する検索キーワードも教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.9

a = Range("A1").Replace(ChrW(160), "") これで試してみてください。

SA20200904
質問者

お礼

kkkkkm さん 度重ね、返答をして頂きまして、ありがとうございました。 お陰様で解決する事ができました。 >a = Range("A1").Replace(ChrW(160), "") >これで試してみてください。 2-11- 2(2-11-?2) a = Range("A1").Replace(ChrW(160), "") 2002/2/11 b = Range("A1").Replace("2002", "2020") 2020/2/11 Range(Cells(1, 1), Cells(1, 1)).NumberFormatLocal = "yyyy-mm-dd" 2020-02-11   半角スペース(?)が除く事ができましたので 2020-02-11 ⇒  2020-11-02に変更します。 >%20と32ですからどちらもSpaceですね。 はい、ありがとうございます。 a = Range("A1").Replace(ChrW(160), "")の詳細につきましては明日、調べてみます。 幾度にも渡り、ご回答をして頂きまして心より深く感謝申し上げます。 本当にありがとうございました。

その他の回答 (8)

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.8

> URLエンコード(UTF-8)(rawurlencode()) > 2-11- 2  ⇒ 2-11-%202%20 > ASCIIコード変換機 > 10進数 > 2-11- 2  ⇒ 50 45 49 49 45 32 50 32 %20と32ですからどちらもSpaceですね。 としたら > i = Asc(Mid(Range("A1"), 6, 1)) > '[i]は[63]になりました。 これが不思議な感じです。 セルに関数で =SUBSTITUTE(A1," ","") にして見てみるとか 貼り付け時に「貼り付け先の書式に合わせる」 で試してみるとか メモ帳に貼り付けてからそれをコピーしてエクセルに貼り付けるとか だとどうなんでしょうね。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.7

No6の訂正。 Rを付けて以下のどちらかで試してみてください。 ↓ 頭にRを付けるコードにした以下のどちらかで試してみてください。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.6

> i = Asc(Mid(Range("A1"), 6, 1)) > '[i]は[63]になりました。 文字コード63は「?」ですよね。 A1に2-11-?2となっていて?を外したいということでしょうか 単純に?を外して2-11-2にしてしまうと2002/11/2と認識されるので Rを付けて以下のどちらかで試してみてください。 Range("A1").Value = "R" & Replace(Range("A1").Value, "?", "") もしくは Dim Flg As Boolean Range("A1").Value = "R" & Range("A1").Value '↓「?」の前に「~」があります。 Flg = Range("A1").Replace("~?", "")

SA20200904
質問者

お礼

kkkkkm さん 返答をして頂きまして、ありがとうございました。 >文字コード63は「?」ですよね。 はい、63 です。 >A1に2-11-?2となっていて?を外したいということでしょうか はい、外したいということです。 >単純に?を外して2-11-2にしてしまうと2002/11/2と認識されるので 単純に?を外す事を考えています。 2002/11/2で認識されましたら日付書式変更をします。 単純に?を外すことができませんでした。  検索できませんでした。    ↓ If InStr(Data, Chr(63)) > 0 Then Stop '?      ↑ Dataをマウスで触れると 2-11-?2 でした。  検索できますと↓で変更できると思いました?。 A = Range("A1").Replace(Chr(63), "") >Rを付けて以下のどちらかで試してみてください。 >Range("A1").Value = "R" & Replace(Range("A1").Value, "?", "") >Dim Flg As Boolean >Range("A1").Value = "R" & Range("A1").Value >'↓「?」の前に「~」があります。 >Flg = Range("A1").Replace("~?", "") はい、間違っていましたら申し訳ございません。  検索、置き換えは、できませんでした。 If InStr(Data, Chr(63)) > 0 Then Stop '? A = Range("A1").Replace(Chr(63), "") 参考になります。 Webページから金融明細の、お取引日【2-11- 2】をコピーして直接以下のUnicode文字ツール、ASCIIコード変換機に貼り付けしました。 Unicode文字ツール https://www.marbacka.net/msearch/tool.php URLエンコード(UTF-8)(rawurlencode()) 2-11- 2  ⇒ 2-11-%202%20 ASCIIコード変換機 10進数 http://web-apps.nbookmark.com/ascii-converter/ 2-11- 2  ⇒ 50 45 49 49 45 32 50 32 Webページから金融明細を提示すれば一番良いのですが銀行の金融明細なので提示はできませんでした本当に申し訳ありませんでした。 一度ご回答を整理してみたいと思います。度重ねの、ご回答をして下さいまして深く感謝申し上げます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

すでに回答もあり、回答に加わる気はないが、下記のように文字列のままでなく、16進表示でもして、どういうデータになっているか 考えないと、議論できないのでは。 標準モジュールに Private Function StrToHex(ByVal strData As String) As String '文字列→16進法 Dim strChar As String ReDim strHex(1 To Len(strData)) As String ReDim lngNu(1 To Len(strData)) For i = 1 To Len(strData) strChar = Mid$(strData, i, 1) strHex(i) = Hex$(Asc(strChar)) lngNu(i) = Len(strHex(i)) '16進法の値の桁数を格納 Next StrToHex = Join$(strHex, vbNullString) End Function Sub test01() Itemname = "右2-11-D2谷" Dim HexData HexData = StrToHex(Itemname) MsgBox Itemname & " " & HexData End Sub を貼り付け、 私のやった勝手な文字列 右2-11-D2谷 のところに、 問題の文字列をコピペ(入力するのでなくコピペして上書きする こと。) を実行してみて、 http://charset.7jp.net/sjis.html の 「シフトJISの2バイトコード(全角文字)のエリアマップ」 で度の文字に当たるか割り出して理解してください。 上記は (1)文字列に限り (2)シフトJISのコードとして (3)16進コードで 返すプログラムです。 8ビットのうち、前半4ビット分と後半4ビット分を ビット列で、16進のどれに当たるか表したもの。 半角数字は2文字、全角文字は4文字で表される。 ーー ふつう何か市販エディタなどを用いて、やることなのだが、 MicroSoftには、これの16進表示の重視姿勢が見られない(個人意見、Excelは開発者用ではないしね) 昔(IBM)はメモリダンプなどで、16進表示で出てきた(ユティリティ ソフト)があって、メモリの状態の解析によく使わされた。 === こういう16進で考える質問はあまりないので、見当はずれ・間違いなら、ごめんなさい。

SA20200904
質問者

お礼

imogasi さん 返答をして頂きまして、ありがとうございました。 >標準モジュールに >・・・ >文字コード表 シフトJIS(Shift_JIS) >「シフトJISの2バイトコード(全角文字)のエリアマップ」 >で度の文字に当たるか割り出して理解してください。 はい、分かりました。 >(1)文字列に限り >(2)シフトJISのコードとして >(3)16進コードで >返すプログラムです。 >8ビットのうち、前半4ビット分と後半4ビット分を >ビット列で、16進のどれに当たるか表したもの。 >半角数字は2文字、全角文字は4文字で表される。 >ふつう何か市販エディタなどを用いて、やることなのだが、 はい、市販エディタですか。 >MicroSoftには、これの16進表示の重視姿勢が見られない(個人意見、Excelは開発者用ではないしね) >昔(IBM)はメモリダンプなどで、16進表示で出てきた(ユティリティ ソフト)があって、メモリの状態の解析によく使わされた。 >こういう16進で考える質問はあまりないので、見当はずれ・間違いなら、ごめんなさい。 いいえ、大変参考になりました。深く感謝申し上げます。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.4

> はい、[50]になりました。 50は2ですね。 ASCIIコード表 http://www12.plala.or.jp/mz80k2/electronics/ascii/ascii.html 【2-11- 2】の実際のデータが 2-11- 2 でしたら確認したいコードは左から6番目ですので Dim i As Integer i = Asc(Mid(Range("A1"), 6, 1)) Debug.Print (i) > Dataが【2-11-?2】は認識できない文字列が含むまれている > >Debug.Print Data > Trueになりました。 Dataに入っているのはTrueで【2-11-?2】ではありませんよ。 > >Dim Data As Boolean > 実行時エラー '13':型が一致しません。 Dataを質問のコード以外のところで利用していませんか。 ちなみに Range("A1").Replace(" ", "") この時点でA1のデータは置換されていると思いますが。 その後Dataを変化させてA1に代入していたりしてないでしょうか。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.3

No2の補足です。 コードが知りたいのでしたら例示された?の部分は7番目ですから 適当なセルに =CODE(MID(A1,7,1)) や VBAで Dim i As Integer i = Asc(Mid(Range("A1"), 7, 1)) Debug.Print (i) で試してみてください。

SA20200904
質問者

補足

kkkkkm さん 済みません。補足としました。  1234567 【2-11- 2】 i = Asc(Mid(Range("A1"), 7, 1)) '[i]は[50] 数字[2]になりました。 i = Asc(Mid(Range("A1"), 5, 1)) '[i]は[45] [-]になりました。 'そこで i = Asc(Mid(Range("A1"), 6, 1)) '[i]は[63]になりました。 Dim Data As String Data = Range("A1") 'そこで[63]を検索してみましたが一致しませんでした。 If InStr(Data, Chr(63)) > 0 Then Stop '? 進展ができました。ガンバってみます。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.2

Dataには置換後の値が入るわけではないと思いますが 実際Dataは【2-11-?2】だったのでしょうか? Dim Data As String ↓ Dim Data As Boolean にして(多分しなくても) Data = Range("A1").Replace(" ", "") Debug.Print Data で、DataはTrueになっていると思います。 参考サイト Replace メソッド https://www.tipsfound.com/vba/07033

SA20200904
質問者

お礼

kkkkkm さん 返答をして頂きまして、ありがとうございました。 >Dataには置換後の値が入るわけではないと思いますが Webページ金融明細をコピーして直接エクセルに貼り付けをしています。 >実際Dataは【2-11-?2】だったのでしょうか? 直接エクセルに貼り付けますとWebページ金融明細と同じ【2-11- 2】です。 試しに半角スペースの所を【2-11- 2】手入力で半角スペースにすると詰めることはできます【2-11- 2】⇒【2-11-2】。 推測になりますがA1に貼り付けますと【2-11- 2】半角スペースになりますが Dataが【2-11-?2】は認識できない文字列が含むまれているの場合も半角スペースになりませんでしょうか。 >Dim Data As Boolean 実行時エラー '13':型が一致しません。 になりましたので以下で確めました。 Dim Data As String >Data = Range("A1").Replace(" ", "") >Debug.Print Data Trueになりました。 >No2の補足です。 >VBAで >Dim i As Integer >i = Asc(Mid(Range("A1"), 7, 1)) >Debug.Print (i) >で試してみてください。 はい、[50]になりました。 感謝申し上げます。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.1

Replace(Cells(1,1)," " ,"") 'A1の半角スペースを""に置換 これで・・・いけないですか?

SA20200904
質問者

お礼

Nobu-W さん 返答をして頂きまして、ありがとうございました。 >Replace(Cells(1,1)," " ,"") 'A1の半角スペースを""に置換 以下の様にしましたがスペースを詰めることができませんでした。 Data = Replace(Cells(1, 1), " ", "") A1の【2-11- 2】半角スペースの所を手入力で半角スペースにすると詰めることはできます。 推測になりますがData【2-11-?2】の場合、A1に貼り付けますと【2-11- 2】半角スペースになりますが Dataは【2-11-?2】になるので認識できない文字列が含むまれているのかとも思っています?。 感謝申し上げます。

関連するQ&A

専門家に質問してみよう