配列変数を別の配列にコピーするには?

解決


ソン  2004-02-15 01:48:03  No: 111817  IP: [192.*.*.*]

前回大変お世話になりました。ソンともうします。
日をおかない上に少し似た質問で恐縮なのですが、
配列変数aがあったとして、配列変数bにコピーしようとするとき、
決められた文字数よりも多かった場合は、
その文を分割して配列変数bにコピーしたいのですが、
(つまり、予想では配列変数bの上限の方が多くなります)
どうもうまくできません。
どなたか、解決方法をお知りの方がいらっしゃいましたら
ご教示お願いいたします。
以下はそのうまくいかないプログラムです。

Dim Count1, Count2, CMax As Integer
Dim intSuuji As Integer
Dim Amari1 As Double
Dim Amari2 As Integer
Dim Bun1, Bun2(100), a As String
Dim dblSuuji, dblSuuji2 As Double
Dim Lp As Integer

’bun1をbun2にコピーするプログラム

a = "あいうえお、かきくけこさし、すせそたち"
Bun1 = Split(a, "、")
CMax = UBound(Bun1)

Lp = 1
Count1 = 0

Do While Lp

If Len(Bun1(Count1)) <= 5 Then
    Bun2(Count1) = Bun1(Count1)
    
Else                                  '5文字以上だったら。

    dblSuuji = Len(Bun1(Count1)) / 5  '5文字の所で割る
    dblSuuji2 = dblSuuji
    intSuuji = Int(dblSuuji2)         '整数に変える
    Amari1 = dblSuuji - intSuuji      '余りがあったら。
    If Amari1 > 0 Then
        Amari1 = Amari1 + 1           '余りを1にして足す。
        Amari2 = Int(Amari1) - 1
    End If
    
    For Count2 = 0 To Amari2          '5文字ごとに区切って格納
        Bun2(Count1 + Count2) = Mid(Bun1(Count1), 1 + (Count2 * 5), 5)       
    Next Count2
End If

Count1 = Count1 + 1

If Count1 = CMax Then
  Lp = 0
End If

DoEvents

Loop

長い書き込みで申し訳ありません。

編集    削除
魔界の仮面弁士  2004-02-15 02:40:38  No: 111818  IP: [192.*.*.*]

この構文は、VB6の物ですよね。
とすると、
> Dim Count1, Count2, CMax As Integer
ではなく、
Dim Count1 As Integer, Count2 As Integer, CMax As Integer
のように宣言する必要がありますよ。

型宣言を省略した場合、既定のデータ型(通常はVariant型)になってしまいますから。

> Dim Bun1, Bun2(100), a As String
こちらは、
  Dim Bun1() As String, Bun2(100) As String, a As String
ですね。Bun1が動的配列として宣言されている事に注意してください。
(Bun2も動的配列にした方が良いかも)

動的配列として宣言された変数に関しては、「ReDimステートメント」を
使うことで、配列の要素数を変更することができます。


> Dim dblSuuji, dblSuuji2 As Double
dblSuujiの修正方法は…もうわかりますよね。(^^)


> 配列変数aがあったとして、配列変数bにコピーしようとするとき、
サンプルでいえば、「a」はBun1で、「b」はBun2…でしょうか。
# 違うかな? 逆?(^^;)

> その文を分割して配列変数bにコピーしたいのですが、
「a側のインデックスを管理する変数」と
「b側のインデックスを管理する変数」を、
別々に管理してみてください。

例えば、
  IndexA = 0
  IndexB = 0
  For IndexA = LBound(A) To UBound(A)
    For Pos = 1 To Len(A(IndexA)) Step 5
       B(IndexB) = Mid(A(IndexA), Pos, 5)
       IndexB = IndexB + 1
    Next
  Next
のような感じでしょうか。

# ブラウザ上に直接書いた(デバッグしていない)ので、間違ってるかも。

編集    削除
ソン  2004-02-17 04:24:57  No: 111819  IP: [192.*.*.*]

素早いご回答にもかかわらず、お返事遅くなりました!
まず、variant型になってしまうことを初めて知りました。
今まで正直型についてあまり気にとめてなかったので、
正しい表現を教えていただいて教えて頂いてありがとうございました。

サンプルはaがbun1、bがbun2です^^
別々に管理するというやり方はもしかして、、、
と思っていましたが、
実際の組み方が分かりませんでした。
魔界の仮面弁士さんが提示してくださった方法を、
うまくいかなかった中に当てはめて見ましたら、
うまくいきました!!
調べても分からなかったので感激でした。
ちゃんと理解して、次回から自分の力で出来るように
なりたいと思います。本当にありがとうございました^^

編集    削除