Excel VBA質問箱 IV

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

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


66656 / 76734 ←次へ | 前へ→

【14641】Re:セルの文字列データの種類分けVBAコード
発言  ichinose  - 04/6/3(木) 18:41 -

引用なし
パスワード
   ▼しん さん:
こんにちは。
いくつか訂正もかねて全部掲載します。

まず、

>A02A02B12B13C22C22C23C2A02B13D345A02E99C2
↑こっちの文字列の方です。
'============================================================
Sub test()
  Dim co As Collection
  Dim ans() As String
 
  Call 文字列分解(Range("e1").Value, ans())
  Set co = mk_unique_collection(ans()) '重複なしの集合体の作成
  For idx = 1 To co.Count
   cnt = get_abs_count(ans(), co.Item(idx)) '個数の計算ではなく、数える
   Cells(idx, 1).Value = co.Item(idx)
   Cells(idx, 2).Value = cnt
   Next
  Set co = Nothing
End Sub
'====================================================================
Sub 文字列分解(strng, a_array() As String)
  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() As String)
  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
'===============================================================
Function get_abs_count(myarray() As String, pat As String)
  get_abs_count = 0
  For idx = LBound(myarray) To UBound(myarray)
   If myarray(idx) = pat Then get_abs_count = get_abs_count + 1
   Next idx
End Function

ほとんど変更はありませんが、変数の型宣言をちゃんと記述しました。
実は、そうしないと次のカンマ区切りの文字列を解析しようすると
プロシジャーの共有ができない・・・、何のために分割してるか
わからなくなってしまうので・・・・。

次に
>CCQM-K13,CCQM-K13,CCQM-K2,CCQM-K28,CCQM-K31,CCQM-K25,CCQM-K25,CCQM-K8,CCQM-K8,CCQM-K8,CCQM-K8,CCQM-K29,CCQM-K29,CCQM-K17,CCQM−K9
のようなカンマ区切りの文字列のコードです。

'====================================================================
Sub test2()
  Dim co As Collection
  Dim ans() As String
  ans() = Split(Range("e1").Value, ",") 'これはVBAの関数
  Set co = mk_unique_collection(ans()) '重複なしの集合体の作成
  For idx = 1 To co.Count
   cnt = get_abs_count(ans(), co.Item(idx)) '個数の計算ではなく、数える
   Cells(idx, 1).Value = co.Item(idx)
   Cells(idx, 2).Value = cnt
   Next
  Set co = Nothing
End Sub

testと同様にセルE1に解析文字列を入れて実行してみて下さい。

又、問題があったら教えて下さいね!!

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 回答

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