[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内にある顧客IDをセルに振り分けたい』(タバサ)
セル(A1)に下のように顧客IDが多いときで50個くらい入っています。
これを2個目以降「-」で分けられた3桁と8桁にして10顧客分づつB列からK列まで表示 させるには?
A1に15顧客分ならB1:E4に表示されることになります。
顧客IDとの境目には「、」や空白だったり囲み数字の番号が振ってあったり途中で改行があったりします。
手入力で3桁8桁をそれぞれコピー貼り付けてましたが、
多くなるとどこまでコピー貼り付けたのか...分からなくなってしまうのです。
A B C
?@111-31111111、?A222-22922222、?B333-3252 222 22922222
4158 (?は囲み数字です。) 333 32524158
444-45254444、555-87888888、777-87777777 555 87888888 777 87777777
999-85888888 222-85888888 333-36 333333 777-78777777 222 85888888 333 36333333 777 78777777 とにかく今より正確に早くできれば嬉しいです。
XL2003
まず「データ」-「区切り位置」「区切り文字」、「スペース」で各顧客毎に分けてみては?
VBA
Sub test()
Dim r As Range, m As Object, temp, i As Long, n As Long
With CreateObject("VBScript.RegExp")
.Global = True
For Each r In Range("a1", Range("a" & Rows.Count).End(xlUp))
temp = Application.Trim(r.Value)
.Pattern = "\n+"
temp = .Replace(temp, "")
.Pattern = "\D?(\d{3})\-(\d+ *\d+)(?=(\b|、))"
If .test(temp) Then
If .Execute(temp).Count > 1 Then
For i = 1 To .Execute(temp).Count - 1
n = n + 1
Cells(n, 2).Resize(, 2).Value = _
Array(.Execute(temp)(i).submatches(0), _
Replace(.Execute(temp)(i).submatches(1), " ", ""))
Next
End If
End If
Next
End With
End Sub
(seiya)
試しに20こ入力してみたら!すごい! 今まで30分くらいかけてやってたのに!
ところで10こ10こ...ってのは無理でしょうか? でなければD列に連番を振ろうかなと考えています。 タバサ
> ところで10こ10こ...ってのは無理でしょうか? どういうこと? (seiya)
ごめんなさい、説明不足ですね。
たとえばA1に444-45254444こんなのが21顧客分あったとします。 それをB1:C10に10顧客分、D1:E10までに10顧客分が表示させられたら嬉しいです。
"?@111-31111111、?A222-22922222、?B333-3252 4158 444-45254444、555-87888888、777-7777666 444-45254444、555-87888888、 777-87777777 999-85888888 222-85888888 333-36333333 777-78777777 999-85888888 222-85888888 333-36333333 777-78777777 555-0202354 ?@111-31111111、?A222-22922222、?B333-32524158" これがこうなればいいな...です。 222 22922222 333 36333333 333 32524158 777 78777777 444 45254444 999 85888888 555 87888888 222 85888888 777 7777666 333 36333333 444 45254444 777 78777777 555 87888888 555 202354 777 87777777 111 31111111 999 85888888 222 22922222 222 85888888 333 32524158
わかりにくいかと思います。 でも思いがけず本当に早く出来るのでもっと贅沢になってきました! タバサ
これで...
Sub test()
Dim r As Range, m As Object, temp, i As Long, n As Long, t As Long
With CreateObject("VBScript.RegExp")
.Global = True
t = 2
For Each r In Range("a1", Range("a" & Rows.Count).End(xlUp))
temp = Application.Trim(r.Value)
.Pattern = "\n+"
temp = .Replace(temp, "")
.Pattern = "\D?(\d{3})\-(\d+ *\d+)(?=(\b|、))"
If .test(temp) Then
If .Execute(temp).Count > 1 Then
Set m = .Execute(temp)
For i = 1 To m.Count - 1
n = n + 1
If n > 10 Then n = 1: t = t + 2
Cells(n, t).Resize(, 2).Value = _
Array(m(i).submatches(0), _
Replace(m(i).submatches(1), " ", ""))
Next
End If
End If
Next
End With
End Sub
(seiya)
seiya様 ありがとうございました。 ひとつひとつ入力するってもう今では考えられません。ありえません! タバサ
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.