Excel VBA質問箱 IV

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

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


2751 / 13645 ツリー ←次へ | 前へ→

【66193】変数内の同じデータ 亜矢 10/8/7(土) 19:50 質問[未読]
【66194】Re:変数内の同じデータ りん 10/8/7(土) 20:01 発言[未読]
【66195】Re:変数内の同じデータ Hirofumi 10/8/7(土) 20:15 回答[未読]
【66196】Re:変数内の同じデータ kanabun 10/8/7(土) 21:10 発言[未読]
【66197】Re:変数内の同じデータ 亜矢 10/8/8(日) 9:19 お礼[未読]

【66193】変数内の同じデータ
質問  亜矢  - 10/8/7(土) 19:50 -

引用なし
パスワード
   いつも御世話になります。
変数内の同じデータが存在します。
 同じデータを削除する簡単な方法を教えていただきたいと思います。
 今変数MMがあるとすると
  MM(1)=りんご    MM(1)=りんご
  MM(2)=みかん    MM(2)=みかん
  MM(3)=めろん    MM(3)=めろん
  MM(4)=りんご  → MM(4)=かき
  MM(5)=かき     MM(5)=もも
  MM(6)=もも
  MM(7)=りんご
  MM(8)=みかん
 実際の変数は1000から3000位あります。
 よろしくお願いします。

【66194】Re:変数内の同じデータ
発言  りん E-MAIL  - 10/8/7(土) 20:01 -

引用なし
パスワード
   亜矢 さん、こんばんわ。

> 同じデータを削除する簡単な方法を教えていただきたいと思います。
> 今変数MMがあるとすると
>  MM(1)=りんご    MM(1)=りんご
>  MM(2)=みかん    MM(2)=みかん
>  MM(3)=めろん    MM(3)=めろん
>  MM(4)=りんご  → MM(4)=かき
>  MM(5)=かき     MM(5)=もも
>  MM(6)=もも
>  MM(7)=りんご
>  MM(8)=みかん
> 実際の変数は1000から3000位あります。
> よろしくお願いします。
ここの過去レス

【59992】Re:表の集計 発言 マクロマン - 09/1/22(木) 20:44 -

の記事の中にあるリンク先
h t t p ://www .eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html
にScripting.Dictionaryを使って簡単に重複しないリストを作る方法が記載されてています。

【66195】Re:変数内の同じデータ
回答  Hirofumi  - 10/8/7(土) 20:15 -

引用なし
パスワード
   こんなのでは?

Option Explicit

Public Sub Sample()

  Dim i As Long
  Dim MM() As Variant
  Dim strPrompt As String
  
  ReDim MM(1 To 8)
  
  For i = 1 To 8
    MM(i) = Choose(i, "りんご", "みかん", "めろん", "りんご", "かき", "もも", "りんご", "みかん")
  Next i
  
  MM = Unique(MM)
  
  For i = LBound(MM) To UBound(MM)
    strPrompt = strPrompt & MM(i) & vbLf
  Next i
  
  MsgBox strPrompt, vbInformation
  
End Sub

Private Function Unique(vntData As Variant) As Variant

'  列の値の重複取り

  Dim i As Long
  Dim j As Long
  Dim k As Long
  Dim vntList As Variant
  
  ReDim vntList(LBound(vntData, 1) To UBound(vntData, 1))
  
  k = LBound(vntList)
  vntList(k) = vntData(1)
  For i = LBound(vntData) + 1 To UBound(vntData)
    For j = LBound(vntList, 1) To k
      If vntList(j) = vntData(i) Then
        Exit For
      End If
    Next j
    If j > k Then
      k = j
      vntList(k) = vntData(i)
    End If
  Next i

  ReDim Preserve vntList(LBound(vntList) To k)
  
  Unique = vntList
  
End Function

【66196】Re:変数内の同じデータ
発言  kanabun  - 10/8/7(土) 21:10 -

引用なし
パスワード
   ▼亜矢 さん:
こんにちは

りんさんの紹介されているDictionaryですが、これは
便利ですよ♪
ぜひ習得されることをおすすめします。
文章中の単語の出現回数とか、
グループ別の数量カウントなどもできますので。

Sub Try1()
 Dim dic As Object
 Dim MM() As String
 ReDim MM(1 To 8)  ' ------- 少ないデータで実験
  MM(1) = "りんご"
  MM(2) = "みかん"
  MM(3) = "めろん"
  MM(4) = "りんご"
  MM(5) = "かき"
  MM(6) = "もも"
  MM(7) = "りんご"
  MM(8) = "みかん"
 
 Dim i As Long
 
 Set dic = CreateObject("Scripting.Dictionary")
 For i = 1 To UBound(MM)
   dic(MM(i)) = Empty 'どんどん配列要素を登録する(重複していれば上書きされる)
 Next

' 結果を元の配列に入れる
 ReDim MM(1 To dic.Count)
 For i = 0 To dic.Count - 1
   MM(i + 1) = dic.Keys()(i)
 Next
 
 Set dic = Nothing
End Sub

【66197】Re:変数内の同じデータ
お礼  亜矢  - 10/8/8(日) 9:19 -

引用なし
パスワード
   ▼kanabun さん:
>▼亜矢 さん:
>こんにちは
>
>りんさんの紹介されているDictionaryですが、これは
>便利ですよ♪
>ぜひ習得されることをおすすめします。
>文章中の単語の出現回数とか、
>グループ別の数量カウントなどもできますので。
>
>Sub Try1()
> Dim dic As Object
> Dim MM() As String
> ReDim MM(1 To 8)  ' ------- 少ないデータで実験
>  MM(1) = "りんご"
>  MM(2) = "みかん"
>  MM(3) = "めろん"
>  MM(4) = "りんご"
>  MM(5) = "かき"
>  MM(6) = "もも"
>  MM(7) = "りんご"
>  MM(8) = "みかん"
> 
> Dim i As Long
> 
> Set dic = CreateObject("Scripting.Dictionary")
> For i = 1 To UBound(MM)
>   dic(MM(i)) = Empty 'どんどん配列要素を登録する(重複していれば上書きされる)
> Next
>
>' 結果を元の配列に入れる
> ReDim MM(1 To dic.Count)
> For i = 0 To dic.Count - 1
>   MM(i + 1) = dic.Keys()(i)
> Next
> 
> Set dic = Nothing
>End Sub
ありがとうございました。上記の通り行って結果解決しました。

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