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

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

セル内の文字列に[?]が含む場合につきまして

お世話になります。 セル内の文字列に[?]が含む場合につきまして、ご質問致します。 OS:Windows10 Excel:2019 概要: Webページから金融明細の、お取引日【2-11- 2】をコピーしてセルA1に貼り付けします。 A1(セル)⇒【2-11- 2】 ※【2-11- 2】のスペースを詰めて【2-11-2】にしたいと思っています。 '--------------------------------------------------- ' Dim Data As String Data = Range("A1").Replace(" ", "") 'スペースを詰めることができませんでした。 'Dataは【2-11-?2】スペースでは無く【?】になっていました。 'そこで以下を検索しましたがヒットしませんでした。 If InStr(Data, Chr(63)) > 0 Then Stop '? If InStr(Data, Chr(32)) > 0 Then Stop 'スペース '--------------------------------------------------- ' 質問: スペースを詰めて【2-11- 2】⇒【2-11-2】にしたいのですが 【2-11-?2】で【?】につきまして、ご教示願えますと幸いであります。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答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
  • ベストアンサー率65% (1606/2443)
回答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
  • ベストアンサー率65% (1606/2443)
回答No.7

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

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答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/17068)
回答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
  • ベストアンサー率65% (1606/2443)
回答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
  • ベストアンサー率65% (1606/2443)
回答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
  • ベストアンサー率65% (1606/2443)
回答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

  • ☆文字列を抜き取る★

    テキストファイルに GetPoint = ErrMsg("おはよう",target) の行があるとします。 ダブルクオートでくくられた文字列だけを出力させたい場合 下記コードでどこが間違っているでしょうか?? 今のままだと全てのコードが出力になるんですよ。。。 アドバイスをいただけると幸いです。 Sub Main() Dim iFileNumber As Integer iFileNumber = FileSystem.FreeFile() Open "C:temp\sample.txt" For Input As #iFileNumber Dim stResult As String Dim stSerch As String Dim point As Long Do While (Not FileSystem.EOF(iFileNumber)) Dim stBuffer As String Line Input #iFileNumber, stBuffer stResult = stResult & stBuffer & vbNewLine If Instr(stResult,Chr(34)) > 0 Then If Instr(stResult,Chr(34)) > 0 Then v = stResult End If End If Loop Close #iFileNumber End Sub

  • Excelで同一セル内に入力されているデータを他のセルに分割したい

    http://okwave.jp/qa4369634.html?ans_count_asc=20 で質問をして、何度かやりとりをさせていただいて エクセルで同一セル内に、セル内改行で1~6列ほどのデータが入力されています。 縦にデータが入力されていて、それぞれのセルにセル内改行を含み、データが入力されています。 それぞれのセル内のデータを… 例えば、A1セル内に5行入力されていたら、A2セルから入力されている行数分(ここでいうと5行)挿入し、それぞれにデータを分割して入力させたい。 かつ、B・Cセルは増えたセルにそれぞれのデータをコピーしたいと言ったら、 Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String Dim rng As Range   ActiveSheet.Copy after:=ActiveSheet   For idx = Range("A65536").End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, "A"), Chr(10)) > 0 Then       wkStr = Split(Cells(idx, "A").Value, Chr(10))       Set rng = Cells(idx, "B")       For cnt = UBound(wkStr) To 0 Step -1         Cells(idx, "A").Value = wkStr(cnt)         Cells(idx, "B").Value = rng.Value         Cells(idx, "C").Value = rng.Offset(0, 1).Value         If cnt > 0 Then           Cells(idx, "A").Resize(1, 3).Insert shift:=xlDown         End If       Next cnt     End If   Next idx End Sub といったマクロのご回答をいただきました。 これを元に、 ・データが入っているセルをA列→B列に変更 ・A列のデータはセルが増えた分だけ増やしたい ・A1に対応するデータがC1・D1に入っていた場合、対応するデータは残したまま、B列が増えただけ、列を増やしたい と変更したいのですが…。 すいませんが、宜しくお願い致します。

  • セル指定の文字列を、直接ではなく変数にしたい。

    ExcelのVBEなのですが、以下のようなコードがあります。 If Range("c_Reporter").Value = "" Then   <省略> Range("c_Reporter").Activate EndIf c_Reporterという名前のセルの値を見て、このセルに操作を行うのですが、セルの名前をいちいち書くのが面倒です。 たとえば、以下のようにセル名を格納した変数を使いまわしたいのですが、エラーになってしまいます。何か指定の方法があったように思うのですが、オンラインヘルプで探せませんでした。 Dim sTargetCell As String sTargetCell="c_Reporter" If Range(sTargetCell).Value = "" Then   <省略> Range(sTargetCell).Activate EndIf このような変数の遣い方のやり方を教えてください。 また、もっとスマートなやり方でも結構です。

  • エクセルマクロで、書式が違っても文字列を評価する方法

    文字列書式のセルと、標準書式のセルの数字文字列を比較したいのですが、うまくいきません。 書式が違うと、range.textも違う値になってしまうようです。 結局、現状では一度文字列変数の中に一度いれてから処理していますが、もっと他によい方法はないでしょうか? ------------------------------- If range1 = range2 Then  ・・・・・ End If ------------------------------- Dim temp1 As String Dim temp2 As String If temp1 = temp2 Then ・・・・・・ end If ------------------------------

  • 文字列の括弧について(初心者)2

    文字列の括弧について(初心者) http://oshiete1.goo.ne.jp/kotaeru.php3?q=1110818 の質問の続きなのですが、 文字列の中で( )を1セットで使う方法を教えてもらったので自分の使用するプログラムに少し直したのですが、やはり2つ以上の括弧(カッコ)にも対応しなければならなくなりました。 どのようなプログラムになるのでしょうか? 私はInstrは文字列を左からよんでいって最初にある指定した文字(下記の例だと"("など)の場所を何文字目か示してくれるだけなので1つの括弧にしか対応できないと考えています。 なので文字列の中に指定した文字が何個含まれているか調べて、それぞれ何文字目か示してくれるプログラムが あればできると考えています。 どうか教えてください、おねがいします。 ↓今のプログラム Dim bucketL as Long Dim bucketR as Long Dim a as String Dim b as String a=Text1.text bucketL = InStr(a, "(") bucketR = InStr(a, ")") If bucketL < bucketR And bucketL * bucketR <> 0 Then Text2.text = "OK" End If

  • 文字列の逆検索

    VBAを勉強中の初心者です。 アから始まる文字があったら、逆から連続で検索して その都度、セルをselectしたいのですが どのように書いたらよいでしょうか? Dim a1 As string  Set a1 = Range("B3:B8").Find(What:="ア*", SearchDirection:=xlPrevious) Do  If Not a1 Is Nothing Then Set a1 = Range("B3:B8").FindPrevious(After:=a1) ・・・? お手数ですが、よろしくお願いいたします。

  • エクセルVBA 重複を表示したい

    エクセルVBA 重複を表示したい A列で重複すると警告するコードを以下のように作成しました。 これを修正してA列で重複して、なおかつB列でも重複した場合警告するコードにしたいのです。 添付した図では「同姓同名あり、確認してください、鈴木一郎、山口」と表示したいのです。 ご教授よろしくお願いします。 Sub test() Dim myRange As Range Dim 同一flag As Boolean Dim MsgStr As String For Each myRange In Range("A2:A10") If WorksheetFunction.CountIf(Range("A2:A10"), myRange) > 1 Then If 同一flag = False Then 同一flag = True If InStr(1, MsgStr, myRange) = 0 Then MsgStr = MsgStr & myRange & vbCrLf End If End If Next If 同一flag = True Then MsgBox "同姓同名あり" & Chr(13) & _ "確認してください" & Chr(13) & _ vbCrLf & MsgStr Else End If End Sub

  • VBA 文字列をキレイにしたいです。

    エクセルVBAでツールを作成しようとしています。 他のソフトで作成したデータなども関連するため、セルの中の文字列の先頭にシングルコーテーションが付加されてしまうケースがあるのですが、これが不要なので外したいと思います。 方法を検索した結果、以下の例を見つけました。 ---- 「'」を削除したいセルを選択してマクロを実行すると、 すべてのセルで先頭の「'」を削除します。 Sub Sample() Dim a As Range For Each a In Selection If Not a.HasFormula Then a = a Next a End Sub ---- 上記の方法だとセルを対象にしていると思うのですが、 プログラム上でセルの中身を既にstring型の変数に入れているのでその変数を用いて実現したいと考えていますが、書き換え方が分かりませんのでご教授いただけたらと思います。 宜しくお願い致します。

  • VBA 文字列に関して

    現在 A22のセルに入力された文字列をボタンを押せば ばらばらにしてA22のセルから順番に入れるマクロを作りました (例)A22のセルに ”こんにちわ”の文字列が入っている場合 ボタン押下   ↓ A22のセル⇒こ B22のセル⇒ん C22のセル⇒に D22のセル⇒ち E22のセル⇒わ になる。 不思議なことに数字を16文字以上いれてボタンを押し文字を分離すると入力していない文字、数字が入ってしまいます。 数字だけこういう現象が発生してしまいます。 例えば "1111111111111111"と入力して文字を分離した場合 1.11111111111111E+15と個々のセルに格納されます。 原因がわかる方、教えて頂けないでしょうか? 以下がコードです。宜しくお願い致します。 Private Sub CommandButton1_Click()   Dim one As String   Dim myString As String   myString = Cells(22, 1)   numString = Len(Cells(22, 1))   If Len(myString) <= 50 Then    For i = 1 To Len(Range("A22").Value)      one = String(1, myString)      Cells(22, i) = one      myString = Replace(myString, one, "", 1, 1, vbTextCompare)    Next i   End If End Sub

  • VBA 文字列の抜き出し

    VBAで文字列の抜き出しの方法を教えてください。 同様な質問があり、参考にしてみたのですがうまくいきません。 お分かりの方がいましたらご享受お願いいたします。 30~45字からなる文字列があります。 その中に特定の文字列が2つあり、そのうちの最初の特定文字列に続く文字2つ目の特定文字列前までを抜き出したいのですがうまくいきません。 具体的には abcdefghi GN=12jikl PE=fghj456 という文字列のなかから"GN="と"PE="の中間の文字を取り出したいのですが、 自分で書いたものでは"PE="以上が抜き出され、"GN="より前の文字列を抜き出せませんでした。 GN=......, PE=......の文字数はそれぞれ不規則です。また、GN=...よりも前の文字数も不規則です。 以下が作成したものです。 Dim i As Integer Dim Srch As String Dim Btwn As String Const Chr1 As String = "GN " Const Chr2 As String = "PE" Dim m As String Set sheetobj = ThisWorkbook.Worksheets("A") With sheeobj lastrow = sheetobj.Cells(sheetobj.Rows.Count, 10).End(xlUp).Row For i = 2 To lastrow Srch = sheetobj.Cells(i, 10) Btwn = Mid(Srch, InStr(Srch, Chr1) + 1, InStr(Srch, Chr2) - InStr(Srch, Chr1) - 1) sheetobj.Cells(i, 9) = Btwn Next i End With End Sub なにかいい方法があれば教えて頂けたらと思います。 よろしくお願い致します。

専門家に質問してみよう