| 
    
     |  | いろいろやってみましたが、一応こんな感じのプログラムでナンとか形に なりました。ちなみにこちらのテスト環境は Win98 + Excel2000 です。
 
 Sub MyTxtView_GetData()
 Dim MyF As String, SFn As String, MySt As String
 Dim FSO As Object
 Dim Lin As Variant, NAry As Variant, C As Variant
 Dim x As Long, y As Long, Ofp As Long, i As Long
 Dim NAry2() As Long
 Dim Ck As Boolean, Ck2 As Boolean
 Const FSt As String = _
 "テキストファイル(*.txt;*.csv),*.txt;*.txt"
 Const ComSt As String = "COMMAND.COM /K EDIT /R "
 
 ChDir "C:\My Documents"
 MyF = Application.GetOpenFilename(FSt)
 If VarType(MyF) = 11 Then Exit Sub
 Set FSO = CreateObject("Scripting.FileSystemObject")
 SFn = FSO.GetFile(MyF).ShortPath
 CreateObject("WScript.Shell").Run ComSt & SFn, 1, True
 Do
 Ck = False: Ck2 = False
 Lin = Application.InputBox("シートに入力する行番号を" & _
 vbLf & "カンマ又はスペース区切りで入力", Type:=3)
 x = InStr(1, Lin, ","): y = InStr(1, Lin, ChR(32))
 If x > 0 Then
 NAry = Split(Lin, ",")
 For Each C In NAry
 If Not IsNumeric(C) Then
 Ck = True: Exit For
 End If
 Next
 ElseIf y > 0 Then
 NAry = Split(Lin, ChR(32))
 If UBound(NAry) <> 1 Then
 Ck = True
 End If
 If Not IsNumeric(NAry(0)) Or _
 Not IsNumeric(NAry(1)) Then
 Ck = True
 End If
 Ck2 = True
 Else
 Ck = True
 End If
 Loop While Ck = True
 If Ck2 = True Then
 For i = NAry(0) To NAry(1)
 ReDim Preserve NAry2(i): NAry2(i) = i
 Next i
 Else
 For i = LBound(NAry) To UBound(NAry)
 ReDim Preserve NAry2(i): NAry2(i) = NAry(i)
 Next i
 End If
 Erase NAry
 With FSO.OpenTextFile(MyF)
 Do Until .AtEndOfStream
 If IsError(Application.Match(.Line, NAry2, 0)) Then
 .SkipLine
 Else
 MySt = .ReadLine
 ActiveCell.Offset(Ofp).Value = MySt
 Ofp = Ofp + 1
 End If
 Loop
 .Close
 End With
 Set FSO = Nothing: Erase NAry2
 Range(ActiveCell, ActiveCell.End(xlDown)) _
 .TextToColumns DataType:=xlDelimited, Tab:=True, Comma:=True, _
 Space:=True, ConsecutiveDelimiter:=True
 ChDir Application.DefaultFilePath
 End Sub
 
 *準備
 1
 >ChDir "C:\My Documents"
 を、そちらでテキストファイルを保存しているパスに変更する。
 2
 >Const ComSt As String = "COMMAND.COM /K EDIT /R "
 を、Win2000,WinXP を使っている場合
 
 Const ComSt As String = "CMD.EXE /K EDIT /R "
 
 に変更する。
 3
 空白シートを開き、データの入力を開始するセルを1つ選択する。
 (このセルから入力したデータを、カンマ・スペース・タブのいずれの場合も
 区切り文字として、右隣りの各列へ分割・展開します。従って右隣りに充分な
 空白列を確保しておいて下さい。)
 
 *使い方
 準備が済んでマクロを実行すると、初めに目的のテキストを指定するダイアログ
 が出ます。これでファイルを選択して OK を押すと、DOS窓が開いてテキストの
 内容が表示されます。[↑],[↓]の方向キーを押していくと、DOS画面の右下に
 カーソル位置の行番号が表示されます。([←],[→]のキーは列の表示になりますが、
 これは関係ないので触らないで下さい)
 取りこみたい行番号をメモしておきます。このとき飛び飛びの行ならカンマ区切り、
 連続した行番号だけならスペース区切りにすることを、念頭において下さい。
 DOS画面右上端の×ボタンで、窓を閉じます。ここで警告メッセージが出ますが
 構わず OK して閉じて下さい。次に、行番号を入力する InputBox が出ます。
 ここで先にメモした番号を、飛び飛びなら "3,7,10,11,14 ・・"というように
 カンマ区切りで、連続した行番号は "3 14" とスペース区切りで始めと終わりの
 数値を入力します。OK を押すと正しく入力されている場合のみ、アクティブセル
 以下にデータが入力されていき、最後にテキストの区切り文字に従って各セルに
 分割されます。InputBox の入力値が正しく取得されるまで、繰り返しボックスが
 出てきます。
 
 ま、そんなところですが、VBAだけを駆使してプログラミングするなら、こんな
 程度が限界かも知れません・・。
 
 
 
 |  |