Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


66730 / 76738 ←次へ | 前へ→

【14570】Re:セルの文字列データの種類分けVBAコード
回答  ichinose  - 04/6/2(水) 7:46 -

引用なし
パスワード
   ▼しん さん:
おはようございます。

>Excelワークシートのあるセルに下記のような任意の文字列データ
>
>A02A02B12B13C22C22C23A02B13D345A02E99
>
>が入っていたとき、この文字列を英文字を先頭にした文字列群に分解し、その個数を文字列名と共に知りたい、すなわち
>
>A02:4, B12:1, B13:2, C22:2, C23:1, D345:1, E99:1
>
>のような解答(文字列データ)を得たいのですが、どのようなVBAコードを書けばいいのでしょうか?
以下の例はアクティブシートのセルE1に上記の

「A02A02B12B13C22C22C23A02B13D345A02E99」等の文字列が入っていた場合、

A列の1行目から「英文字を先頭にした文字列群」B列の1行目から「個数」を
セットします。
'======================================================================
Sub test()
  Dim co As Collection
  Dim ans()
  Call 文字列分解(Range("e1").Value, ans())
  Set co = mk_unique_collection(ans()) '重複なしの集合体の作成
  For idx = 1 To co.Count
   wk = Filter(ans(), co.Item(idx), , vbTextCompare)
   cnt = UBound(wk) - LBound(wk) + 1 '個数の計算
   Cells(idx, 1).Value = co.Item(idx)
   Cells(idx, 2).Value = cnt
   Next
  Set co = Nothing
End Sub
'=====================================================================
Sub 文字列分解(strng, a_array())
  Dim regEx, Match, Matches  ' 変数を作成します。
  Set regEx = CreateObject("VBScript.RegExp")
  ' 正規表現を作成します。
  regEx.Pattern = "[A-Za-z][0-9]*"
  regEx.IgnoreCase = True ' 大文字と小文字を区別しないように設定します。
  regEx.Global = True  ' 文字列全体を検索するように設定します。
  Set Matches = regEx.Execute(strng)  ' 検索を実行します。
  idx = 1
  For Each Match In Matches  ' Matches コレクションに対して繰り返し処理を行います。
   ReDim Preserve a_array(1 To idx)
   a_array(idx) = Match.Value
   idx = idx + 1
  Next
  Set regEx = Nothing
  Set Match = Nothing
  Set Matches = Nothing
End Sub
'======================================================================
Function mk_unique_collection(myarray())
  Dim myclct As New Collection
  On Error Resume Next
  For idx = LBound(myarray()) To UBound(myarray())
   myclct.Add myarray(idx), myarray(idx)
   Next
  Set mk_unique_collection = myclct
  Set myclct = Nothing
  On Error GoTo 0
End Function

これでプロシジャー「test」を実行してみて下さい。
A列B列の1行目から、

A02    4
B12    1
B13    2
C22    2
C23    1
D345    1
E99    1

という結果が得られました。
確認してみて下さい。

0 hits

【14569】セルの文字列データの種類分けVBAコード しん 04/6/2(水) 2:37 質問
【14570】Re:セルの文字列データの種類分けVBAコード ichinose 04/6/2(水) 7:46 回答
【14575】Re:セルの文字列データの種類分けVBAコード しん 04/6/2(水) 10:31 回答
【14609】Re:セルの文字列データの種類分けVBAコード しん 04/6/3(木) 2:15 質問
【14612】Re:セルの文字列データの種類分けVBAコード ichinose 04/6/3(木) 8:12 発言
【14641】Re:セルの文字列データの種類分けVBAコード ichinose 04/6/3(木) 18:41 発言
【14669】Re:セルの文字列データの種類分けVBAコード しん 04/6/4(金) 0:45 お礼
【14689】Re:セルの文字列データの種類分けVBAコード ichinose 04/6/4(金) 18:21 発言
【14695】Re:セルの文字列データの種類分けVBAコード しん 04/6/5(土) 2:52 回答
【14698】Re:セルの文字列データの種類分けVBAコード しん 04/6/5(土) 12:07 回答

66730 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free