Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2013)
セル範囲の文字列を配列に格納し、重複の削除
投稿日時: 21/05/08 02:20:02
投稿者: OkabeS

セル範囲の文字列を配列に格納し、シート自体は変化させず、配列の中で重複の削除、
その後アウトルックメールに、結果を横書きさせたいです。
RemoveDuplicatesと配列をかけ合わせるような以下コードを考えましたが、出鱈目なようで
全く分かりません。そもそもそういったことは可能なのでしょうか?
MyArray = Range("A2:A4").RemoveDuplicates (Columns:1, Header:=xlNo)
 
■やりたいこと
・元データのシート(シート自体は加工させない)
  A
 1りんご
 2りんご
 3ばなな
 4なし
 
→メールに、「りんぎ、ばなな、なし」と記載させたい。
 (ここは WorksheetFunction.Transposeを使う等、検討がついています)
 
 

回答
投稿日時: 21/05/08 06:04:14
投稿者: simple

> RemoveDuplicatesと配列をかけ合わせるような以下コードを考えましたが、
> 出鱈目なようで全く分かりません。そもそもそういったことは可能なのでしょうか?
> MyArray = Range("A2:A4").RemoveDuplicates (Columns:1, Header:=xlNo)

そうですね、かなりブッ飛んでますね。
RemoveDuplicatesはメソッドですから、何も返しません。
だから修正してどうなるという感じもありません。
 
ダミーシートにいったんコピーし、
RemoveDuplicatesを使って、それに重複排除の処理を行って、
それを使えばよいと思います。
 
Dictionaryを使う以下のような手もありますが、さほど差はないでしょう。
上記の方法をお薦めします。

Sub test()
    Dim r As Range
    Dim dic As Object
    
    Set dic = CreateObject("Scripting.Dictionary")
    For Each r In Range("A1", Cells(Rows.Count, "A").End(xlUp))
        dic(r.Value) = Empty
    Next
    Debug.Print Join(dic.keys, ",")
End Sub

投稿日時: 21/05/08 11:09:35
投稿者: OkabeS

simple様
 
早速のご回答ありがとうございます。
とても勉強になります。
Dictionaryでも配列のようなことが出来るのですね。
ありがとうございました。