2016-09-02 14 views
1

私が作業しているプロジェクトでは、CSVファイルを読み込み、解析して目的の列を見つけ、別のワークシートに必要な列を印刷する必要があります。私の問題の一部は、道に沿ってVBAを学んでいるので、私は行方不明の単純なものになるはずです。 私は印刷するためにさまざまな方法を試しましたが、どれも私が望むような列には印刷されません。すでにこの質問に回答しているスレッドがある場合は、申し訳ありませんが見つかりません。 これまでのところ、私はCSVファイルを読み込み、すべての情報を2D配列に格納することができました。ここにコードがあります:VBAの列別Excelセルへの印刷

i = 0 'This is the x value of the 2d array 
'Populate the 2d array with the CSV File Data 
Do Until csvFile.AtEndOfStream 
    sLine = csvFile.ReadLine 
    sArray() = Split(sLine, ";") 
     For j = 0 To UBound(sArray) 
      stArray(i, j) = sArray(j) 
     Next j 
    i = i + 1 
Loop 

今、私は配列に目的の列を印刷したい部分にあります。私はチェックを始める前にこれを行うことができることを確認するためにテストプリントを試みているので、2D配列の代わりにテスト用に単一次元配列を使用しています。 印刷方法を理解したら、目的の列を探すif文を使って2次元配列を実行します。

ここ

は私のテストコードです:。

Dim o As Object 
Set o = CreateObject("excel.application") 
o.Visible = True 
o.Workbooks.Add 

    For r = 0 To UBound(sArray) 
     o.Sheets("test").Range(o.Cells(3, 1).Address, o.Cells(3, r).Value = sArray(r) 
    Next r 

は、代わりに私は今、ループ内の行の実行時エラー「1004」「アプリケーション定義またはオブジェクト定義のエラー」で迎えされてる 私はこの問題を解決する方法を知るには、VBAに関する十分な経験や知識がありません。私の経験はJavaとPythonです。

同時に、セルの列に配列を印刷する方法は?右ですか?

これについての助けがあれば助かります。あなた。

答えて

0

Excelは2次元配列を使用してセルに値を割り当てることができますが、配列を転置(寸法を反転)する必要がありますstArray

stArrayが適切にサイズであると仮定します。

 

    o.ActiveSheet.Range("A1").Resize(UBound(stArray, 2) + 1, _ 
    UBound(stArray, 1) + 1).Value = o.Transpose(stArray) 

コードはリムジンstArrayではありません。余分な行または列がある場合は、iとjの変数をResizeの範囲に使用します。

 

    o.ActiveSheet.Range("A1").Resize(j + 1, i + 1).Value = o.Transpose(stArray) 

あなたは、2次元配列の各要素を反復処理したい場合:

 

    With o.ActiveSheet 
     For rws = 0 To UBound(stArray, 2) 
      For cols = 0 To UBound(stArray, 1) 

       .Cells(rws + 1, cols + 1).Value = stArray(cols, rws) 

      Next 
     Next 
    End With 

+0

はご回答いただきありがとうございます。私はあなたの声明の論理を研究していますので、これは無知な質問のように思えます。 セル(i、j)= array(i、j)を印刷する方法はありませんか? – Soolkiki

+0

答えを更新しました。あなたはそれをすることができますが、はるかに遅いです。 –

+0

素晴らしいです、ありがとうございます! – Soolkiki

0

VBAせずにExcelで/フィルター/集計外部データを照会するには、いくつかの簡単な方法があります。

Excel 2010以上では、Power Queryが最も簡単で強力です。

もう一つの方法は、Dataタブ>From Text>Delimited>とDelimitersOther:;を入力しています。
その後、余分な列を削除し、テーブルにフィルタを追加し、Excelで実行できないものに対してVBAを使用することができます。 https://msdn.microsoft.com/en-us/library/office/ff840319.aspx

はまた、/フィルター/集計外部データを照会するSQLを使用するには、いくつかの方法があります。 http://www.exceluser.com/formulas/msquery-excel-text-files.htm

+0

ありがとうございますが、もっと自動化されたソリューションを探しています。私たちが一般的な請負業者であり、これは私たちのプリンタからデータを印刷するためのものですから、これは一度だけのことではありません。 – Soolkiki

関連する問題