アプリ版:「スタンプのみでお礼する」機能のリリースについて

E列に以下の数字があります。
1900R2H200W3L1
この文字を以下のようにしたいのですが
1900 R2 H200 W3 L1
・最初の文字は必ず数字で始まります
・最初の数字以降はローマ字の前には半角スペースを

出来ましたらVBAでお願いしたいのですが
宜しくお願い致します。

質問者からの補足コメント

  • すみません。外出先からでパソコンで確認が出来ませんが

    ご質問ですが
    文字数は1桁から20桁です。

    言い忘れました。
    数字のみのデータもあります。

      補足日時:2019/09/10 20:48

A 回答 (5件)

こんばんは!



アルファベットは2文字以上連続していない!という前提です。

一例です。

Sub Sample1()
 Dim i As Long, k As Long
 Dim myStr As String
  For i = 1 To Cells(Rows.Count, "E").End(xlUp).Row
   For k = Len(Cells(i, "E")) To 2 Step -1
    myStr = Mid(Cells(i, "E"), k, 1)
     If myStr Like "[A-Za-z]" Then
      Cells(i, "E").Replace Mid(Cells(i, "E"), k, 1), " " & myStr
     End If
   Next k
  Next i
End Sub

こんな感じではどうでしょうか?

※ 連続してアルファベットがある場合はアルファベット間も半角スペースが入ります。m(_ _)m
    • good
    • 0

》 E列に以下の数字があります


数字と文字(何れも半角のみ?)で最長何桁ですか?
    • good
    • 0

正規表現で書いてみました。


半角であることが条件ですが、アルファベットが2文字以上続いても、おなしようにスペースが入ります。

'//標準モジュール
Sub ArangeSpaces()
 Dim Matches
 Dim Match
 Dim Rng As Range
 Dim c As Variant, buf As String
 Dim rep As String
 With CreateObject("VBScript.RegExp")
  .Pattern = "(\d+)([A-Za-z]+)(\d+)" '正規表現
  .Global = True
  .IgnoreCase = False
  Set Rng = Range("E1", Cells(Rows.Count, "E").End(xlUp)) 'E列の範囲
  For Each c In Rng
    buf = c.Value
    Set Matches = .Execute(buf)
   If IsObject(Matches) Then
    For Each Match In Matches
     rep = .Replace(Match.Value, "$2")
     buf = Replace(buf, rep, Space(1) & rep, , 1)
    Next
    c.Value = buf
   End If
  Next c
 End With
End Sub
    • good
    • 0

文字数などは問いません。

A-Za-zの前に半角スペースだ入ります。
文字間の4つの条件を設定しただけのものになります。

Sub IN_hwspace()
Dim strRec As String, char As String, char1 As String
Dim i As Long, j As Long, MaxRow As Long, ansStr As String
  MaxRow = ActiveSheet.Cells(Rows.Count, 5).End(xlUp).Row
  For i = 1 To MaxRow
  strRec = Cells(i, "E").Value
  For j = 1 To Len(strRec)
  char = Mid(strRec, j, 1)
  char1 = Mid(strRec, j + 1, 1)
  If char Like "[A-Za-z]" Then
  If char1 Like "[A-Za-z]" Then
  ansStr = ansStr & char
  GoTo skp
  End If
  End If
  If char Like "[A-Za-z]" Then
  If char1 <> "" Then
  ansStr = ansStr & char
  GoTo skp
  End If
  End If
  If char1 Like "[A-Za-z]" Then
  If char <> "" Then
  ansStr = ansStr & char & " "
  GoTo skp
  End If
  End If
  ansStr = ansStr & char
skp:
  Next
  Cells(i, "E").Value = ansStr
  ansStr = ""
  Next
End Sub
    • good
    • 0

》 出来ましたらVBAでお願いしたい


重々承知しております。でも…
関数だけに頼らざるを得ないマクロ音痴の私自身の備忘録として、この場を穢らわせてください。

Sheet1!A1: 1900R2H200W3L1 を入力
Sheet2!A1: =MID(Sheet1!$A1,COLUMN(A1),1)
 ̄ ̄ ̄ ̄ ̄ 此れを右にT列までオートフィル
Sheet3!A1: =IFERROR((CODE(Sheet2!A1)>64)*(CODE(Sheet2!A1)<91),"")
 ̄ ̄ ̄ ̄ ̄ 此れを右にT列までオートフィル
Sheet4!A1: =IFERROR(SMALL(IF(Sheet3!$A1:$T1=1,COLUMN($A:$T),""),COLUMN(A1)),"")
 ̄ ̄ ̄ ̄ ̄ 【お断り】セル Sheet4!A1 の式は必ず配列数式として入力のこと
 ̄ ̄ ̄ ̄ ̄ 此れを右にT列までオートフィル
Sheet5!A1: =Sheet1!A1
Sheet5!B1: =IF(ISERR(A1*1),REPLACE(A1,Sheet4!A1+COLUMN(A1)-1,," "),A1)
Sheet5!C1: =IFERROR(REPLACE(B1,Sheet4!B1+COLUMN(B1)-1,," "),0)
 ̄ ̄ ̄ ̄ ̄ 此れを右にU列までオートフィル
Sheet1!B1: =TRIM(LOOKUP("黑",Sheet5!B1:U1))

ちなみに、16桁以上の数字のみのデータは、“数値”としてではなく、“文字どおり”数字で入力する必要があります。理由は言わずもがなかと。
「ローマの手前に半角スペースを」の回答画像5
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!