Excel VBA質問箱 IV

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

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


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

【38651】OPENステートで指定行からの読み込み? 羽衣 06/6/7(水) 21:04 質問[未読]
【38652】Re:OPENステートで指定行からの読み込み? Blue 06/6/7(水) 21:23 回答[未読]
【38693】Re:OPENステートで指定行からの読み込み? 羽衣 06/6/8(木) 16:29 お礼[未読]
【38694】Re:OPENステートで指定行からの読み込み? Blue 06/6/8(木) 16:35 発言[未読]
【38712】Re:OPENステートで指定行からの読み込み? 漂流民 06/6/8(木) 21:30 発言[未読]
【38733】Re:OPENステートで指定行からの読み込み? 羽衣 06/6/9(金) 10:32 お礼[未読]
【38719】Re:OPENステートで指定行からの読み込み? Ned 06/6/8(木) 23:09 発言[未読]
【38695】Re:OPENステートで指定行からの読み込み? Kein 06/6/8(木) 16:44 回答[未読]

【38651】OPENステートで指定行からの読み込み?
質問  羽衣  - 06/6/7(水) 21:04 -

引用なし
パスワード
   TEXTファイルの内容は
  A    B    C    D    E      F
1 会社情報
2 平成18年6月5日作成
3 ○○部署作成
4 −−−−−−−−−−−−−−−−−−−−−−−−−
5 コード 部門名  社員名 年齢   入社年月  経験年数 
6 00001  ○○   AAAAAA  xx    200x/0x/xx xx
7 00002  □□   bbbbbb  xx    200x/0x/xx xx
8  以下データ続く

新しいブックを開かずにテキストファイルを読込には
OPENステートを使いますが、5行目から読むにはどうすればいいでしょうか
宜しくお願い申します。

【38652】Re:OPENステートで指定行からの読み込み?
回答  Blue  - 06/6/7(水) 21:23 -

引用なし
パスワード
   先頭4行を空読みしてから処理すればよいのでは。

Dim TextLine As String
Dim fn As Integer
Dim i As Long

fn = FreeFile
Open "ファイルパス" For Input As #fn

' 先頭4行空読み
For i = 1 To 4
  If EOF(fn) Then Exit For
  Line Input #fn, TextLine
Next
' 確認
If i <> 5 Then
  MsgBox "足りないよ。"
End If
' 5行目から処理
Do While Not EOF(fn)
  Line Input #fn, TextLine
  Debug.Print TextLine
Loop
Close #fn

【38693】Re:OPENステートで指定行からの読み込み?
お礼  羽衣  - 06/6/8(木) 16:29 -

引用なし
パスワード
   有り難うございます。
昨日から教えて頂いたコードで試行しています。
なかなかうまくいかず、お礼が遅くなりました。

5行目から読みますが各セルに区切られて格納されません。
まだ初心者なので問題ばかりですが、がんばってみます。

【38694】Re:OPENステートで指定行からの読み込み?
発言  Blue  - 06/6/8(木) 16:35 -

引用なし
パスワード
   > 5行目から読みますが各セルに区切られて格納されません。
Openステートメントを使うと、1行の文字列として認識しますので、
空白や文字数で区切って入れる場合は、その処理を入れないとダメです。

おそらく、空白で分割は不可能でしょうが、、、
(部門名,社員名あたりで普通に使われるでしょう)

文字数で区切るときには、Left,Mid,Rightあたりの関数を使うと良いでしょう。

【38695】Re:OPENステートで指定行からの読み込み?
回答  Kein  - 06/6/8(木) 16:44 -

引用なし
パスワード
   FSOのTextStreamには Skip, SkipLine という読み飛ばしをするメソッドがあります。
それを使うと・・

Sub INS_TextData()
  Dim FSO As Object
  Dim Ary As Variant
  Dim i As Long, j As Long
  Const MyF As String = "C:\temp\test.txt"
  '↑実際のテキストファイルのフルパスに変更

  Set FSO = CreateObject("Scripting.FileSystemObject")
  With FSO.OpenTextFile(MyF, 1)
   For i = 1 To 4
     .SkipLine
   Next i
   Do Until .AtEndOfLine
     Ary = Split(.ReadLine, vbTab): j = j + 1
     '区切り文字は実際のテキストファイルに使われているものに変更
     Cells(j, 1).Resize(, UBound(Ary) + 1).Value = Ary
     Erase Ary
   Loop
   .Close
  End With
  Set FSO = Nothing
End Sub

【38712】Re:OPENステートで指定行からの読み込み?
発言  漂流民  - 06/6/8(木) 21:30 -

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

これを試してみてください。

  Dim rf As Long
  Dim tt As String
  Dim st() As String
  Dim i As Long
  Dim j As Long

  ff = FreeFile
'ActiveWorkbook.Path & "\test.txt"は環境に合わせてください
  Open ActiveWorkbook.Path & "\test.txt" For Input As #ff
  i = 1
  Do Until EOF(ff)
    Line Input #ff, tt
    If i > 4 Then
      st = Split(tt, " ")
      For j = 0 To UBound(st)
        Cells(i - 4, j + 1) = st(j)
      Next j
    End If
    i = i + 1
  Loop

  Close #ff

【38719】Re:OPENステートで指定行からの読み込み?
発言  Ned  - 06/6/8(木) 23:09 -

引用なし
パスワード
   ▼羽衣 さん:
こんにちは。
Blueさんが書いてらっしゃるように、
>おそらく、空白で分割は不可能でしょうが、、、
>(部門名,社員名あたりで普通に使われるでしょう)
という状況のような気がしますが、
そのテキストファイルを「メモ帳」などのテキストエディタで開いたら、どんな形式になっていますか?
スペース区切り?タブ区切り?カンマ区切り?それとも固定長でしょうか?

コード,部門名,社員名,年齢,入社年月,経験年数
00001,○○,AAA AAA,xx,200x/0x/xx,xx

な感じで、サンプルデータを説明されたほうが良いと思いますよ。
それによっては、一般機能の[データ]-[外部データの取り込み]-[テキストファイルのインポート]
という手もあるかもしれません^ ^

【38733】Re:OPENステートで指定行からの読み込み?
お礼  羽衣  - 06/6/9(金) 10:32 -

引用なし
パスワード
   本当にうまく読込ができました。
教えて頂いたSplit関数で区切られて表示できました。
ようやく理解できて、とてもうれしく思います。
本当に感謝いたします。
有り難うございました。
VBAで解らないことばかりですので、これからも宜しくお願いします。

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