1

次のような file.txt 構造を取得しました。

"最初"
a1 b1 c1 d1
a2 b2 c2 c2

"2番目"
e1 f1
e2 f2

"三番"
g1h1

Excel ファイルに「1 番目」、「2 番目」、「3 番目」の 3 つのシートがあります。このデータを VBA コードで 3 つのシートに入力する方法は?

4

2 に答える 2

3

私は今でも、テキスト ファイルを 1 行ずつ読み取るのが最善の方法だと考えています。ファイル全体を配列にロードし、後で条件を書き込むことができます。

Sub Read_text_File()

Dim oFSO As New FileSystemObject
Dim oFS
Dim sText as String
Dim vArray
Dim lCnt as Long


Set oFS = oFSO.OpenTextFile("c:\textfile.TXT")


Do Until oFS.AtEndOfStream
    lCnt = lCnt + 1 
    sText = oFS.ReadLine
    vArray(lCnt) = sText
Loop


End Sub

次に、配列を調べて、自分のことをします。

または、3 つのシートを表す 3 つの個別の配列にデータをすぐに読み込むこともできます。
これは完全にあなた次第です。
これが役に立ったかどうか教えてください。

于 2012-09-27T13:01:14.967 に答える
1

マクロの記録を開始し、スペースで区切られた txt ファイルを開きます。ctrl + f を押して、3 段階で First、Second、Third を見つけます。必要な範囲をアクティブなワークブックからそれぞれのシートの必要なワークブックにコピーします。

これにより、自動化されたコードを作成するために再構築できる記録されたマクロが得られます。後でコードを投稿できるかもしれません。コピーする必要がある範囲がわかるように、vba の行を追加して、2 番目と 3 番目を見つけるために使用されるセルの行番号を読み取る必要があります。

1 つの質問、ファイル内の列数は表示どおりですか????

ここにコードがあります。

Sub Macro1()
Dim startRow As Integer
Dim endRow As Integer
Dim wb As Workbook


Workbooks.OpenText Filename:="D:\file.txt", Origin:=437, startRow:=1, _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
    :=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other _
    :=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
    TrailingMinusNumbers:=True

 Set wb = ActiveWorkbook

Cells.Find(What:="FIRST", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
startRow = ActiveCell.Row + 1

Cells.Find(What:="SECOND", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
endRow = ActiveCell.Row - 1

Range("A" & startRow & ":D" & endRow).Copy
ThisWorkbook.Activate
Sheets("Sheet1").Select
Range("A1").Select
ActiveSheet.Paste

startRow = endRow + 2
wb.Activate

Cells.Find(What:="THIRD", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
endRow = ActiveCell.Row - 1

Range("A" & startRow & ":D" & endRow).Copy
ThisWorkbook.Activate
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste

wb.Activate
startRow = endRow + 2
endRow = Range("A" & Rows.Count).End(xlUp).Row

Range("A" & startRow & ":D" & endRow).Copy
ThisWorkbook.Activate
Sheets("Sheet3").Select
Range("A1").Select
ActiveSheet.Paste

wb.Close (False)
End Sub
于 2012-09-27T12:52:04.473 に答える