Excel VBA質問箱 IV

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

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


7530 / 13645 ツリー ←次へ | 前へ→

【38519】配列を使用し変数をセルに代入 roxy 06/6/5(月) 17:36 質問[未読]
【38522】Re:配列を使用し変数をセルに代入 Kein 06/6/5(月) 18:02 回答[未読]
【38523】Re:配列を使用し変数をセルに代入 roxy 06/6/5(月) 18:06 発言[未読]
【38525】Re:配列を使用し変数をセルに代入 Kein 06/6/5(月) 18:24 発言[未読]
【38536】Re:配列を使用し変数をセルに代入 roxy 06/6/6(火) 9:50 発言[未読]
【38539】Re:配列を使用し変数をセルに代入 Jaka 06/6/6(火) 10:40 発言[未読]

【38519】配列を使用し変数をセルに代入
質問  roxy  - 06/6/5(月) 17:36 -

引用なし
パスワード
   あるテキストデータを1行ごとに分割し、a〜gまでの7種類の変数に格納しています。
今は配列の利用方法がわからずに、下記のように一度ずつセルに書き込み処理を行っています。
読込み→書き込み、この1連の操作をループしています。

Cells(i, 1).Value = a
Cells(i, 2).Value = b
Cells(i, 3).Value = c
Cells(i, 4).Value = d
Cells(i, 5).Value = e
Cells(i, 6).Value = f
Cells(i, 7).Value = g

これをループさせて処理を行うとかなり時間がかかります。
読み込んだ変数を一気にセルに書き込む処理の方法を教えてください。
配列を使用するというのはわかっているのですが、どのように実現すればいいかわかりません。

どうかよろしくお願いします。

【38522】Re:配列を使用し変数をセルに代入
回答  Kein  - 06/6/5(月) 18:02 -

引用なし
パスワード
   >a〜gまでの7種類の変数に格納
それは配列変数ではありませんね。
>あるテキストデータを1行ごとに分割
例えば

Dim FSO As Object
Dim Ary As Variant
Dim AllSt As String
Const MyF As String = "C:\temp\Test.txt"

Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile(MyF, 1)
  AllSt = .ReadAll
  .Close
End With
Ary = Split(AllSt, vbCrLf)
If Ubound(Ary) < 257 Then
  Cells(1, 1).Resize(, UBound(Ary) + 1).Value = Ary
Else
  MsgBox "シートの列数に収まりません", 48
End If
Set FSO = Nothing: Erase Ary

などとすれば、1行分の文字列を一つのセルに入力する作業を、
全文一括して行えますが。

【38523】Re:配列を使用し変数をセルに代入
発言  roxy  - 06/6/5(月) 18:06 -

引用なし
パスワード
   ▼Kein さん:

質問の仕方がまずかったようです。すいません。。。
a〜gまでの7種類の変数を、A列にはaを、B列にはbをというように1列ごとに代入します。
1行に7列、これがテキストデータの最終行まで続くといった感じです。
わかりにくいでしょうか?
すでにデータを変数に格納するところまで行っているのですが書き込み処理の高速化ができません。

よろしくお願いします。

【38525】Re:配列を使用し変数をセルに代入
発言  Kein  - 06/6/5(月) 18:24 -

引用なし
パスワード
   >A列にはaを、B列にはbをというように1列ごとに代入
私が提示したサンプルは、そのようになってます。
ここで問題なのは「テキストの内容を行ごとに区切る」
ということなのか「テキストの1行をカンマ区切り(その他も含む)にして
区切られた文字列を各列に入力、それをテキストの末尾まで行う」
ということなのか、ということです。あなたの質問文だと、誰が見ても
前者のようにしか解釈できません。しかしコードには行方向にも
変数 (i) が書かれてループしているように見えるので、実際は後者
なのかと推測しているわけです。その点をはっきりさせるために、現在
そちらで使っているコードを「全文」提示していただきたい。
>書き込み処理の高速化
は、配列が分からないと出来ません。配列を使ってセルへのアクセス
回数を減らせば、今よりは高速化できます。

【38536】Re:配列を使用し変数をセルに代入
発言  roxy  - 06/6/6(火) 9:50 -

引用なし
パスワード
   ▼Kein さん:

説明が悪くてすいません。
コードを全部書くと結構長々としてしまうので、一部訂正し省略もして、シンプルなコードに変えて書き込んでみました。
読込み&内容の処理の部分は変えたくなかったので、あえてコードは載せませんでした。


intFF = FreeFile                
Open strInFile For Input As #intFF
Do Until EOF(1)
Line Input #intFF, strBUFF
a = Mid(strBUFF, i + 6, 2)
b = Mid(strBUFF, i + 10, 2)
c = Mid(strBUFF, i + 13, 10)
d = Mid(strBUFF, i + 25, 5)
e = Mid(strBUFF, i + 30, 10)
f = Mid(strBUFF, i + 42, 5)
g = Mid(strBUFF, i + 50, 5)
Cells(nCNT, 2).Value = a
Cells(nCNT, 3).Value = b
Cells(nCNT, 4).Value = c
Cells(nCNT, 5).Value = d
Cells(nCNT, 6).Value = e
Cells(nCNT, 7).Value = f
Cells(nCNT, 8).Value = g
nCNT = nCNT + 1
Loop
Close #intFF


実際はstrBUFFからMid関数で必要な情報を処理している箇所はもっと複雑です。
セルにa〜gを書き込んでいる部分だけを修正したいのです。
a〜gに代入後配列に渡し、処理だけを先にしてから書き込みだけ配列から値をもらいまた別のループにするということは可能でしょうか?

よろしくお願いします。

【38539】Re:配列を使用し変数をセルに代入
発言  Jaka  - 06/6/6(火) 10:40 -

引用なし
パスワード
   HN変えているけど、
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=38243;id=excel
と、同じみたいですね。

Dim tbst() As Variant
strBUFF = "適当データabcdefg12345678901234567890123456789012345678901234567890"
Rt = 7
ReDim tbst(1 To Rt)
tbst(1) = Mid(strBUFF, i + 6, 2)
tbst(2) = Mid(strBUFF, i + 10, 2)
tbst(3) = Mid(strBUFF, i + 13, 10)
tbst(4) = Mid(strBUFF, i + 25, 5)
tbst(5) = Mid(strBUFF, i + 30, 10)
tbst(6) = Mid(strBUFF, i + 42, 5)
tbst(7) = Mid(strBUFF, i + 50, 5)
nCNT = 1
Cells(nCNT, 2).Resize(, Rt).Value = tbst

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