Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8530 / 13646 ツリー ←次へ | 前へ→

【32772】Redimの代用 裕紀 05/12/21(水) 22:06 質問[未読]
【32773】Re:Redimの代用 やっちん 05/12/21(水) 22:48 発言[未読]
【32775】Re:Redimの代用 裕紀 05/12/21(水) 23:10 お礼[未読]
【32778】Re:Redimの代用 やっちん 05/12/21(水) 23:38 発言[未読]
【32774】Re:Redimの代用 やっちん 05/12/21(水) 22:51 発言[未読]
【32777】Re:Redimの代用 裕紀 05/12/21(水) 23:35 質問[未読]
【32779】Re:Redimの代用 やっちん 05/12/21(水) 23:42 発言[未読]
【32780】Re:Redimの代用 裕紀 05/12/21(水) 23:54 お礼[未読]

【32772】Redimの代用
質問  裕紀 E-MAIL  - 05/12/21(水) 22:06 -

引用なし
パスワード
   こんばんは、VBAを勉強中の者です。
CSVファイルを開いて読み込み、指定された場所に
値を入れるアプリを作っています。
ですが、以下のReDimを使った部分がよくわかりません。
多少長くなったり、遠回りしてもReDimを使わず書いてみたいです。
ヒントでも結構です。ご助言お願い致します。
----------------------------
For page = 1 To pgCnt
    For l = 1 To 14
    Line Input #fno, strCsv

      strCsv = strCsv & ","
       ReDim MyVar(0)
       MyCount = 1
    
      ' len strCsvの文字列数
      For s = 1 To Len(strCsv)
      ' Mid(文字列式,抽出開始位置,抽出文字数)
        If Mid(strCsv, s, 1) = "," Then
          MyVar(UBound(MyVar())) = Mid(strCsv, MyCount, s - MyCount)
          MyCount = s + 1
          If s <> Len(strCsv) Then ReDim Preserve MyVar(UBound(MyVar()) + 1)
        End If
      Next s
        
      For j = 0 To 24
        ActiveSheet.Cells(j + k + 3, i + 1) = MyVar(j)
      Next j

      i = i + 1
      
      
    Next l
    m = m + i - 1
    k = k + 28
    i = i - 14
  Next page

【32773】Re:Redimの代用
発言  やっちん  - 05/12/21(水) 22:48 -

引用なし
パスワード
   ▼裕紀 さん:
MyVarの宣言をループの外に出して
宣言は 「Dim MyVar」で「(0)」は無しで。
Splitを使用すれば下の処理は1行でできますよ。

      strCsv = strCsv & ","
       ReDim MyVar(0)
       MyCount = 1
    
      ' len strCsvの文字列数
      For s = 1 To Len(strCsv)
      ' Mid(文字列式,抽出開始位置,抽出文字数)
        If Mid(strCsv, s, 1) = "," Then
          MyVar(UBound(MyVar())) = Mid(strCsv, MyCount, s - MyCount)
          MyCount = s + 1
          If s <> Len(strCsv) Then ReDim Preserve MyVar(UBound(MyVar()) + 1)
        End If
      Next s

【32774】Re:Redimの代用
発言  やっちん  - 05/12/21(水) 22:51 -

引用なし
パスワード
   ▼裕紀 さん:
Redimはここでは必要ないかもしれませんが、
覚えておいた方がいいですよ。
HELPは見ましたか?

【32775】Re:Redimの代用
お礼  裕紀 E-MAIL  - 05/12/21(水) 23:10 -

引用なし
パスワード
   お返事ありがとうございます。
なんとか今日中に動くようにしないといけないので、splitを勉強します。ありがとうございます。

あと、追加で質問して申し訳ないのですが、
MyVar(UBound(MyVar()))
の部分はどのような処理をしているのでしょうか?
spritの次は、ReDimを勉強してみます。

【32777】Re:Redimの代用
質問  裕紀 E-MAIL  - 05/12/21(水) 23:35 -

引用なし
パスワード
   >Redimはここでは必要ないかもしれませんが、
>覚えておいた方がいいですよ。
ありがとうございます。次の課題にします。

>HELPは見ましたか?
 買ったテキストの情報以外はよくわかっていません。HELPは
 インストールしてありません」と出てしまいましたので、インストール
 してみます。

Dim MyVar
strtest = Split(MyString, ",")

ちなみに上記であってますでしょうか?他の?バグがあってここが
原因かまだわかっていません。

【32778】Re:Redimの代用
発言  やっちん  - 05/12/21(水) 23:38 -

引用なし
パスワード
   ▼裕紀 さん:
>MyVar(UBound(MyVar()))
>の部分はどのような処理をしているのでしょうか?
HELPで「UBound」の説明を見てみてください。
なあんだ〜っていうぐらいの内容ですよ。
Redimとセットで覚えてください。
「Preserve」大事ですね。

地道に一つずつ調べていくと全体が見えてきますよ。

【32779】Re:Redimの代用
発言  やっちん  - 05/12/21(水) 23:42 -

引用なし
パスワード
   ▼裕紀 さん: 
>Dim MyVar
>strtest = Split(MyString, ",")

最初のコードに合わせるのなら
Dim MyVar
MyVar = Split(strCsv, ",")

【32780】Re:Redimの代用
お礼  裕紀 E-MAIL  - 05/12/21(水) 23:54 -

引用なし
パスワード
   やっちんさんへ

動かすことが出来ました。大分処理の記述がが短くなって
私には理解しやすいです。ですがsplitはも用途がいっぱいありそうなので
場合場合で使えるように勉強しておきます。
ありがとうございました。

8530 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free