投稿日 | : 2003/03/31(Mon) 12:20 |
投稿者 | : 龍 |
URL | : http://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
と、こうした方が、
一文字ずつ読む必要もなく、
コードも見やすく、
また、処理速度も速いと思われますが。
どうでしょう?
それとも、
一文字ずつ読み込む必要があっての記述であれば、
このカキコは削除されても結構です。