• ベストアンサー

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}++を使って便利なのですが...

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

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 正攻法で行くしかありません。

xespr
質問者

お礼

なるほど。やっぱりそうなのですね。ハッキリと回答いただき、とても助かります。ありがとうございます!

その他の回答 (3)

回答No.4

よく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

xespr
質問者

お礼

なるほど。シンプルで良さそうですね。ありがとうございました!!

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

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のものの、配列要素数を列挙すれば良い。

xespr
質問者

お礼

素晴らしい! Bに+1する理由すら理解できないのですが(^^;; 見事なやり方ですねえ。実は6桁の数字文字列なので配列A(999999)は厳しいかなと... ありがとうございました!

回答No.1

かったるい方法ですが、 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

xespr
質問者

お礼

さすがにちょっとかったるいですね(^^; でも達人もそうしているとわかれば大いに参考になります。素早い回答ありがとうございました。

関連するQ&A