2016-09-04 1 views
0

は私が細胞に複数のテキストファイルをインポートしようとしていますA1、A2は、A3など これはテキストファイル1をテキストファイル3がA3複数のテキストファイルを1つのセルにインポートし、VBAを使用してExcelで新しい行をインポートしますか?

オンに行くべきテキストファイル2は、A2 に行くべきA1 に行くだろう意味私は新しい列の作成を除いて何をしようとしているかのように見えるcodeが見つかりました。

問題は、ファイル内のテキスト文字列が区切られ、新しい列に置かれることです。これはコードの目的(回答に示されている代替方法を使用しているため)です。

ファイルA1のすべてのテキストをセルA1に入れるために、このコードを変更するかどうかわかりません。 可能であれば、私は他のソリューションについて考えていただければ幸いです。それを行う必要があります

答えて

0

Sub Import_All_Text_Files() 

    Application.ScreenUpdating = False 

    Dim thisRow As Long 
    Dim fileNum As Integer 
    Dim strInput As String 

    Const strPath As String = "C:\Temp\Temp\" 'Change as required 
    Dim strFilename As String 

    strFilename = Dir(strPath & "*.txt") 

    With ActiveSheet 
     thisRow = .Range("A" & .Rows.Count).End(xlUp).Row 

     Do While strFilename <> "" 

      fileNum = FreeFile() 
      Open strPath & strFilename For Binary As #fileNum 
      strInput = Space$(LOF(fileNum)) 
      Get #fileNum, , strInput 
      Close #fileNum 

      thisRow = thisRow + 1 
      .Cells(thisRow, 1).Value = strInput 

      strFilename = Dir 
     Loop 
    End With 

    Application.ScreenUpdating = True 

End Sub 

私はグアーません:あなたは、次のコードの適応を単一のセルに置かれ、各ファイルの内容全体を希望される場合は、おそらくうまくいくと呼びますExcelがファイルのサイズが大きすぎるとうまくいくと思っています。Excelは、1つのセルに挿入できる文字数に制限があります(正しく覚えていれば32,767)。

+0

あなたのコードは実際にYowE3Kという仕事をしています!あなたがそれをどれだけ速く解決したのか非常に驚いています。また、最大の文字についてのあなたの発言も役に立ちました。私は、コードが ".Cells(thisRow、1).Value = strInput"という行を実行する際にエラーが発生したことに気付きました。その理由は、1つのセルの文字の制限に達しているように見えます。あなたの大きな助けに感謝します! –

+0

@bbgreen - ファイルサイズが32KBを超える場合、 '.Cells(thisRow、1).Value = Left(strInput、32767) 'と言って、セルの値を最初の32Kbに制限することができます。ファイルの残りを「失う」か否かを判断する。 – YowE3K

+0

32KbアダプテーションYowE3Kを追加していただきありがとうございます。あなたの提案は、32 Kbの限界を超えて引き起こされるエラーメッセージを避けるのに役立ちます。 Excelの将来のバージョンでこの制限が解除されることを願っています。コードはエラーメッセージなしで動作します。 –

0

curColが1(すなわちカラムA)に設定されているので、次のコード行をコメントアウト:

curCol = curCol + 1 

私はまた、あなたが非常に非効率的であるためにリンクされたコードを指摘したいと思い、各反復の前に最下位行を測定する必要がないためです。それは本当に、単にのようなものに、代わりに行番号をインクリメントし、変数に書き換えする必要があります。

nxt_row = nxt_row +1 
ActiveSheet.Cells(nxt_row, curCol) = DataLine 

そして、次のコード行は、サブルーチンの先頭に移動する必要があります。

if Range("A1").Value = "" then 
    nxt_row = 1 
else 
    if Range("A2").Value = "" then 
    nxt_row = 2 
    else 
    nxt_row = Range("A1").End(xlDown).Offset(1).Row 
    end if 
end if 
+0

ご協力ありがとうございますMiqi180!私はコードを試したが、ファイルのすべてのテキストを個々のセルにコピーするのではなく、テキストの最初の行だけをコピーするので、部分的に機能する。それにもかかわらず、あなたのコードはそれが可能であることを示しています(私はいくつか疑問がありました)。 –

関連する問題