- ベストアンサー
文字比較
VB習って2週間です。ソート比較というんでしょうか 今 Dim newLedger(100) as string Dim oldLedger(100) as string が、ありそれぞれ文字が入っています。 newLedgerの配列に格納されている文字を oldLedgerの配列に格納されている文字に 一つづつ比較し、同じ文字があればnum変数に1追加 なければ1減少というプログラムを作成しているのですが、作りかた教えていただけないでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>newLedger(0)をoldLedgerの配列の文字列と全て比較して >全て比較し終わったらnewLedger(1)とoldLedgerの配列の文字列と比較したいのです。 つまり2変数のマトリックスの全てを比較するということですね。 それなら、Forループを2重にします。 For i = 0 To 100 For j = 0 To 100 If StrComp(newLedger(i), oldLedger(j)) = 0 Then num = num + 1 Else num = num - 1 End If Next j Next i ちなみに、このようにStrComp関数を使用した場合は、newLedgerとoldLedgerで完全に一致するかどうかになります。 どちらかがどちらかを含むというような場合は、さらに複雑になります。
その他の回答 (4)
- Zeus089
- ベストアンサー率30% (3/10)
For i = lBound(newLedger) To uBound(newLedger) For j = lBound(oldLedger) To uBound(oldLedger) num = num + IIf(StrComp(newLedger(i), oldLedger(j)) = 0, 1, -1) Next j Next i 悩め!悩め!!!
- TAGOSAKU7
- ベストアンサー率65% (276/422)
>ソート比較 どこがソートなのだろうかと疑問を感じたので、とりあえず突っ込んで見ました。 もしかして、配列内容は文字列は存在していなくて、数字のみとか? それ以外にも、 newLedger内部は重複していないデータ(数字と文字の混在)の配列 oldLedger内部は重複していないデータ(数字と文字の混在)の配列 これらの比較をするのであれば、コレクションを使用すると、効率があがると思います。 データの内容によって、最も高速な比較が違います。 マルチに対応するのであれば、maruru01氏の回答のように、全て回すしかないと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
下記が曖昧なように思うので、補足してください。 >文字が入っています。 (A)1文字だけが入っているのではないでしょうね。 例えばDだけとか。 (B)DOGとか文字の語句が入っているのですね。 私なら「文字」と言わないで、「文字列」と表現します。 >同じ文字があれば (A)なら、newの文字や語句の中のDの字がの数を数える ことになります。 (B)の場合DOGだけを数えるのか、DOGHOUSE のように、「含まれている」のも考えるのか。 (C)NEW(1)とOLD(1)だけ、NEW(2)とOLD(2)だけ対応す要素だけ比較するのか。 (D)OLD(1)の語句をNEW(x)(Xが0から 100まで)を同じ語句のものがないか探すのか。 (E)一致しない時なぜ1減らすのか、理解に苦しむ。 その効用は何でしょう。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 配列のインデックス同じどうしでの比較なら、 こんな感じでしょうか。 Dim i As Long For i = 0 To 100 If StrComp(newLedger(i), oldLedger(i)) = 0 Then num = num + 1 Else num = num - 1 End If Next i StrComp関数などはヘルプなどを参照して下さい。 ちなみに、同じ文字でなければ1減少だと、100個の場合、50個が同じで50個が違う場合は、差し引きで増減0になるけどそれでいいんですか。
補足
ありがとうございます。 ただ上記の場合ですと、newLedger(i)とoldLedger(i)が一緒に進んでしまいます。 newLedger(0)をoldLedgerの配列の文字列と全て比較して 全て比較し終わったらnewLedger(1)とoldLedgerの配列の文字列と比較したいのです。