VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/03/31(Mon) 12:20
投稿者
URLhttp://moonless.infoseek.livedoor.com/
タイトル気になったコードについて

おはつにお目にかかります。
龍と申します。
よろしくお願いします。

さて、私はこのページに初めて訪れ、
なにやらVBプログラムについての説明があるようなので、
ちょっと色々と見ていたんですが、
少し気になったことがあったのでここに記述いたします。

■リンク
Excel & Word関係 ⇒ エクセルの表をクリップボード経由でVBに貼り付け活用

■プログラム
テキストファイルをオープンし、
配列変数にデータを割り当て、
(配列変数を使用せず)データをテキストボックスに貼り付けている箇所。

  '使用可能なファイル番号を取得
  lngFileNo = FreeFile
  'テキストファイルをオープン
  Open "C:\sample.txt" For Input As #lngFileNo
  ' ファイルの終端までループを繰り返します。
  Dim myText(6, 6) As String
  Dim k As Integer
  j = 0
  Do While Not EOF(lngFileNo)
    '1 行づつ変数に読み込みます。
    Line Input #lngFileNo, strMyTxt
    j = j + 1: k = 1
    For i = 1 To Len(strMyTxt)
      '貼り付けた表の項目はタブで区切られているので
      If Mid$(strMyTxt, i, 1) <> vbTab Then
        'タブが見つかるまで文字をつなぎ変数に格納
        myText(j, k) = myText(j, k) + Mid$(strMyTxt, i, 1)
      Else
        k = k + 1
      End If
    Next i

  ' 読み込んだファイルを1行づつテキストボックスに表示します。
    Text2.Text = Text2.Text & strMyTxt & vbCrLf
  Loop

  'ファイルを閉じる
  Close #lngFileNo

■気になった点
配列変数を使用していないということもですが、
まず、配列に格納する方法として、
なぜSplit関数を用いてないのか、という点です。

やるなら、

'配列取得用変数の宣言
Dim varArray as Variant

'myText(6, 6)と宣言すると、
'0 〜 6までの7個の配列がメモリバッファに割り振られてしまうため、
'1 〜 6までしか使用しないのであれば、(1 to 6, 1 to 6) とすべき。
Dim myText(1 to 6, 1 to 6) As String

  lngFileNo = FreeFile
  j = 0
  Open "C:\sample.txt" For Input As #lngFileNo
    Do Until EOF(lngFileNo)
      j = j + 1
      Line Input #lngFileNo, strMyTxt
      'タブを区切り文字として、配列文字列の取得
      varArray = Split(strMyTxt, vbTab)
      '配列を割当てる
      For i = 0 to UBound(varArray) Step 1
        myText(j, i + 1) = varArray(i)
      Next i
      '配列の削除
      Erase varArray
    Loop
  Close #lngFileNo

と、こうした方が、
一文字ずつ読む必要もなく、
コードも見やすく、
また、処理速度も速いと思われますが。

どうでしょう?

それとも、
一文字ずつ読み込む必要があっての記述であれば、
このカキコは削除されても結構です。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -