Excel VBA質問箱 IV

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

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


19392 / 76732 ←次へ | 前へ→

【62773】Re:連続したセルのパターンの個数を調べるには
発言  SS  - 09/8/31(月) 13:58 -

引用なし
パスワード
   ▼fool さん:

パターンごとの集計をSheetに列記する例を作ってみました。
予想に反し計算時間はそれほど掛かりませんがデータ個数20で
メモリ不足となります。
格納方法の工夫が必要ですね。
尚、数値→2進数、2進数→数値は
http://okwave.jp/qa5200.htmlよりお借りしています。

Sub test3()
  Dim AA As Variant
  Dim BB As Variant
  Dim tmpStr As String
  Dim lastR As Long
  Dim i As Long, j As Long, k As Long, m As Long, C As Long
  
  lastR = Range("B" & Rows.Count).End(xlUp).Row
  AA = Range("B1:B" & lastR).Value
  ReDim BB(lastR, 2 ^ lastR)
  For j = 1 To lastR
    For i = 1 To lastR + 1 - j
      tmpStr = ""
      For k = 0 To j - 1
        tmpStr = tmpStr & AA(i + k, 1)
      Next k
      
      C = Bin2Num(tmpStr)
      BB(j, C) = BB(j, C) + 1
    Next i
  Next j
  For j = 1 To lastR
    For i = 0 To 2 ^ lastR
      If BB(j, i) > 0 Then
        m = m + 1
        Cells(m, 3).Value = "'" & Num2Bin(i, j - 1)
        Cells(m, 4).Value = BB(j, i)
      End If
    Next i
  Next j

End Sub

'数値→2進
Public Function Num2Bin(Value As Variant, n As Long) As Variant
  Dim NVal As Long
  Dim i As Long
  If IsNumeric(Value) = False Then
    Num2Bin = 0
    Exit Function
  End If
  NVal = Val(Value)
  For i = n To 0 Step -1
    Num2Bin = Num2Bin & ((NVal And 2 ^ i) / (2 ^ i))
  Next i
End Function

'2 進→数値
Public Function Bin2Num(Value As Variant) As Variant
  Dim i As Long
  Dim StrVal As String
  Dim Cursor As Long
 
  If IsNumeric(Value) = False Then
    Bin2Num = 0
    Exit Function
  End If
  StrVal = CStr(Value)
 
  Cursor = 0
  For i = Len(StrVal) To 1 Step -1
    Select Case Mid$(StrVal, i, 1)
      Case "0"
        Bin2Num = Bin2Num + 0
      Case "1"
        Bin2Num = Bin2Num + (2 ^ Cursor)
      Case Else
        Bin2Num = 0
        Exit Function
    End Select
    Cursor = Cursor + 1
  Next i
End Function


>皆様、お忙しいところ申し訳ありません。
>
>恐れ入りますが、下記のようなパターンを調べたい場合、
>どのようにマクロを作成すれば良いかお教えいただけますでしょうか。
>
>A B
>1 1
>2 0
>3 1
>4 1
>5 0
>6 0
>7 1
>8 0
>9 1
>・ ・
>・ ・
>
>↑上記のようにB列にランダムに1と0が並んでいる場合を考えます。
>この時、"101"や"01001"など、様々な0と1の組み合わせパターンについて、
>個数を数えるVBAを作成したいと考えております。
>
>COUNTIFだと連続するセルの個数などを調べるには無力ですし、
>VBA初心者の自分には敷居が高すぎて困っております。
>お手数ですが、ご教示のほどをよろしくお願いいたします。

0 hits

【62767】連続したセルのパターンの個数を調べるには fool 09/8/31(月) 8:55 質問
【62769】Re:連続したセルのパターンの個数を調べる... もも 09/8/31(月) 11:16 発言
【62771】Re:連続したセルのパターンの個数を調べる... SS 09/8/31(月) 11:53 発言
【62772】Re:連続したセルのパターンの個数を調べる... もも 09/8/31(月) 13:08 発言
【62770】Re:連続したセルのパターンの個数を調べる... Yuki 09/8/31(月) 11:46 発言
【62773】Re:連続したセルのパターンの個数を調べる... SS 09/8/31(月) 13:58 発言
【62774】Re:連続したセルのパターンの個数を調べる... 超初心者 09/8/31(月) 14:30 発言
【62778】Re:連続したセルのパターンの個数を調べる... fool 09/9/1(火) 1:38 お礼

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