[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ハイフンを消し』(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.