[[20080515164537]] 『ハイフンを消し』(1010) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ハイフンを消し』(1010)
 初心者です。よろしくお願いします。
 ある列に数字&英字混じりの文字入力があります。
 たとえばでA列で
 SAITA-042-100としたら
 SAITA042-100としたいのですが(英字の後のハイフンのみ削除)
 数式ではなくてマクロを教えていただけないでしょうか。(1010)

 こんな感じでしょうか?

 Sub test()
 Dim myString As String
 myString = "SAITA-042-100"
 MsgBox Join(Split(myString,"-",2),"")
 MsgBox Application.Substitute(myString, "-","",1)
 End Sub
 (seiya)

 例を一つにしたのが・・・
 英字はいろんな種類がありまして
 数万とデーターがあります。
 英字の後のハイフンのみ削除を・・・(1010)

 SAITA-042-CHITTA-005-100
 なんてのもありますか?
 (seiya)

 あります。上記の場合だと
 SAITA042-CHITTA005-100としたいのですが・・
 何度も申し訳ございません。(1010)


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

 Sub test()
 With Range("a1", Range("a" & Rows.Count).End(xlUp)).Offset(,1)
     .Formula = "=myString(a1)"
     .Value = .Value
 End With
 End Sub

 Function myString(txt As String) As String
 Dim m As Object
 myString = txt
 With CreateObject("VBScript.RegExp")
     .Pattern = "\D\-\d"
     Do While .test(myString)
         Set m = .execute(myString)(0)
         myString = Application.Replace(myString, m.FirstIndex + 1, m.Length, Replace(m.Value,"-",""))
     Loop
 End With
 End Function
 (seiya)

 面白そうなので、参加させてください 
  (テストなので、A列を 整形して、B列に出しています)
   (kanabun)

 Sub Try1()
   Dim v, i As Long, n As Long

   v = Range("A1", Range("A65536").End(xlUp)).Value
   n = UBound(v)
   With CreateObject("VBScript.RegExp")
      .Pattern = "([A-Za-z]+)(-)"
      .Global = True
      For i = 1 To n
        v(i, 1) = .Replace(v(i, 1), "$1")
      Next
   End With
   Range("B1").Resize(n).Value = v
 End Sub

  (seiya)さん (kanabun)さんありがとうございます。
 (seiya)さん の方で質問なのですが(私が悪いのですが)
 A列に入力するとB列に表示がでるのですが・・
 実際にはB列のデーターを行いたいと思っています。(例でA列としてしまいました)
 また、B列の”英字の後のハイフンのみ削除”でB列で表示はできないでしょうか?

 (kanabun)さんのはマクロを実行しようとすると実行ボタンが押せなく??
 何度も申し訳ございません(1010)


 B列のデータを計算してC列に表示します。
 .Offset(,1) を .Offset(, -1) にすればA列に表示します。
 Sub test()
 With Range("b1", Range("b" & Rows.Count).End(xlUp)).Offset(,1)
     .Formula = "=myString(b1)"
     .Value = .Value
 End With
 End Sub

 Function myString(txt As String) As String
 Dim m As Object
 myString = txt
 With CreateObject("VBScript.RegExp")
     .Pattern = "\D\-"
     Do While .test(myString)
         Set m = .execute(myString)(0)
         myString = Application.Replace(myString, m.FirstIndex + 1, m.Length, Left(m.Value,1))
     Loop
 End With
 End Function

 ありがとうございました。
 説明がわるいのでしょうか?
 B列のデーターをB列で修正できないのでしょうか?
 B列以外もデーターが入っているためなので
 何度も申し訳ございません。(1010)


 以下に変更してください。

 Sub test()
 Dim a, i As Long
 With Range("b1", Range("b" & Rows.Count).End(xlUp))
     a = .Value
     For i = 1 To UBound(a,1)
         a(i,1) = myString(a(i,1))
     Next
     .Value = a
 End With
 End Sub
 (seiya)

 範囲を選択して実行するマクロです。
       (弥太郎)
 '--------------------
  Sub Special_test()
    Dim c As Range
    With CreateObject("vbscript.regexp")
        .Pattern = "(\D+)(-)"
        .Global = True
        For Each c In Selection
            If .test(c) Then
                c = .Replace(c, "$1")
            End If
        Next c
    End With
 End Sub

 (弥太郎)さん(seiya)さん、ありがとうございます。
 (seiya)さん方を入れましたが
 コンパイルエラー・・SubまたはFunctionの定義なしと??

 (弥太郎)さんにお願いがあるのですが・範囲を選択しないで
 行いたいのですが? 本当に申し訳ございません。(1010)


 Function myString はそのままにしてありますか?
 (seiya)

 してあります。もう一度入れなおしたら
 By Ref引数の型が一致しませんと・・・(1010)

 かういう事でっか?
     (弥太郎)
 '----------------------
 Sub Special_test2()
    Dim i As Long, tbl
    tbl = Range("b1", Range("b" & Rows.Count).End(xlUp))
    With CreateObject("vbscript.regexp")
        .Pattern = "(\D+)(-)"
        .Global = True
        For i = 1 To UBound(tbl, 1)
            If .test(tbl(i, 1)) Then
                tbl(i, 1) = .Replace(tbl(i, 1), "$1")
            End If
        Next i
    End With
    Range("b1").Resize(UBound(tbl, 1)) = tbl
 End Sub


 Function myString(ByVal txt As String) As String
                   ^^^^^
 a(i,1) = myString(CStr(a(i,1)))
                  ^^^^^      ^^

 に変更してみてください。
 それでだめなら、他の方の方法で試してください。
 (seiya)

 (弥太郎)さん(seiya)さんありがとうございました。
 今回は(弥太郎)さんの方を使用させていただきます。
 (seiya)さんの方も行いましたが・・・・
 本当に助かりました。。(1010)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.