電子書籍の厳選無料作品が豊富!

Excel VBAなのですが、配列に重複値を格納しないようにする方法あるでしょうか?

For i = 0 To 100
'' ここに既出myStrを排除するしくみを入れる?
s(i) = myStr
Next

myStrは"01"、"88"、"92"等々ランダムに変化します。
myStrの値が、すでにs(どこか)に格納済みだったら、
代入処理[ s(i)=myStr ] しないようにしたいのですが、
実現方法ないでしょうか?

Perlなら$seen{$myStr}++を使って便利なのですが...

A 回答 (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

正攻法で行くしかありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/29 22:12

よく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
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/30 10:11

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のものの、配列要素数を列挙すれば良い。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/30 10:09

かったるい方法ですが、



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/29 22:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!