Excel VBA質問箱 IV

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

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


14685 / 76734 ←次へ | 前へ→

【67538】Re:出現の名称をDictionaryで出す
発言  kanabun  - 10/12/11(土) 10:44 -

引用なし
パスワード
   > 配列を用意しておいて、処理は配列に対して行い、
> シートには最後に一回だけ一括貼付けする
ように書き直すと、以下の感じになると思います。

Sub Trial3() '配列利用
  Dim myR As Range
  Dim dic As Object
  Dim i As Long, n As Long, k As Long
  Dim v, sProdt As String, sLocal As String
  With Range("C:C")
    Set myR = Excel.Range(.Item(2), .Item(.Count).End(xlUp))
    v = myR.Offset(, -1).Resize(, 2).Value2
  End With
  ReDim outv(myR.Count, 1 To 3)
  outv(0, 1) = "商品出現回数"
  outv(0, 2) = "商品名"
  outv(0, 3) = "地域名"
  Set dic = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(v)
    If Not IsEmpty(v(i, 2)) Then
      sProdt = v(i, 2)
      If dic.Exists(sProdt) Then
        k = dic(sProdt)  '出力行番号を取得
      Else
        n = n + 1     '新規出力行番号
        dic(sProdt) = n  '格納
        k = n
        outv(k, 2) = sProdt
      End If
      outv(k, 1) = outv(k, 1) + 1 '出現回数
      sLocal = outv(k, 3)
      If Len(sLocal) Then sLocal = sLocal & ","
      outv(k, 3) = sLocal & v(i, 1)
    End If
  Next
  Set dic = Nothing
  With Range("G1").Resize(, 3)
    .Resize(myR.Count).ClearContents
    .Resize(n + 1).Value = outv
  End With
End Sub

ただ 山葵さんのコメントにあるように、

> If InStr(dic(v), region) = 0 Then 'これは不要かも

同じ商品名で 地域名が重複して出てきたばあい
   ↓

   地域名   商品名 
   あ     AA
   あ     AA
   あ     AA
   さ     AA

商品「AA」の出現回数は 4回 で OK ですが、現状コードでは
地域名は「あ、あ、あ、さ」となってしまいます。

同じ商品で地域名はダブることはないのであればこのままでよい
のですが、重複して地域名が出現することがあるのであれば、どう
表示するのか、仕様を決めておかないといけないですね

2 hits

【67534】出現の名称をDictionaryで出す Yoshim 10/12/11(土) 8:53 質問
【67535】Re:出現の名称をDictionaryで出す kanabun 10/12/11(土) 9:50 発言
【67538】Re:出現の名称をDictionaryで出す kanabun 10/12/11(土) 10:44 発言
【67540】Re:出現の名称をDictionaryで出す kanabun 10/12/11(土) 11:21 発言
【67537】Re:出現の名称をDictionaryで出す 山猿 10/12/11(土) 10:20 発言
【67539】Re:出現の名称をDictionaryで出す UO3 10/12/11(土) 11:07 回答
【67542】Re:出現の名称をDictionaryで出す Yoshim 10/12/11(土) 11:52 お礼

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