- ベストアンサー
Excel VBA 重複値を排除するには?
Excel VBAなのですが、配列に重複値を格納しないようにする方法あるでしょうか? For i = 0 To 100 '' ここに既出myStrを排除するしくみを入れる? s(i) = myStr Next myStrは"01"、"88"、"92"等々ランダムに変化します。 myStrの値が、すでにs(どこか)に格納済みだったら、 代入処理[ s(i)=myStr ] しないようにしたいのですが、 実現方法ないでしょうか? Perlなら$seen{$myStr}++を使って便利なのですが...
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Dim Flg as Booloan Dim Max as Intger myStr ="??" '重複チェックと未格納配列番号の取得 For i = 0 To 100 if s(i) = myStr then Flg=True exit for elseif s(i) = "" then Max=i exit for endif Next if Flg =False then s(Max) = myStr 正攻法で行くしかありません。
その他の回答 (3)
- JaritenCat
- ベストアンサー率37% (122/322)
よくC言語使っているのでNo.1,NO.2の書き方はちょっと違和感あってC風に書いてみました。。。参考まで For i = 0 To 100 For j = 0 to i-1 If s(j) = myStr then Exit For Next j If j=i then s(i) = myStr Next i
お礼
なるほど。シンプルで良さそうですね。ありがとうございました!!
- imogasi
- ベストアンサー率27% (4737/17070)
2桁の数字文字列であると言う前提なら、配列要素を100個の配列A(100)をもって、 例えばB=34が現れたらA(Val(B)+1)を1にする。 再度B=34が来たら、A(35)が1なら既出、0なら初出であるとしてA(34)を1にし、既出なら撥ね付ければよい。 それで、今まで入ったコードの一覧を出すときは、A(0)からA(99)までの値1のものの、配列要素数を列挙すれば良い。
お礼
素晴らしい! Bに+1する理由すら理解できないのですが(^^;; 見事なやり方ですねえ。実は6桁の数字文字列なので配列A(999999)は厳しいかなと... ありがとうございました!
- shinkun0114
- ベストアンサー率44% (1553/3474)
かったるい方法ですが、 For i = 0 To 100 flg = 0 For j = 0 to i If s(j) = myStr then flg=-1 Next j If flg then Next i s(i) = myStr Next
お礼
さすがにちょっとかったるいですね(^^; でも達人もそうしているとわかれば大いに参考になります。素早い回答ありがとうございました。
お礼
なるほど。やっぱりそうなのですね。ハッキリと回答いただき、とても助かります。ありがとうございます!