2012-08-30 16 views
10

私は、常にSO2PO.csvという名前のCSVファイルを持っています。それには、Open Orderと呼ばれるワークブックのPO Dataと呼ばれるExcelシートにインポートするデータがあります。 SO2PO.csvからOpen Order.xlsmシートのPOデータにすべてのデータをインポートする方法を見つける必要があります。.csvからアクティブなExcelシートにデータをインポートする方法はありますか?

私はそれが可能だと知っていますが、どうですか?誰かが私を正しい方向に向けることができますか?

または、特定のフォルダに配置された.csvファイルをインポートできるようにする方法がありますか?

+2

私はこれをエクセルシートにしようとしていると具体的に言いましたが...タグとExcelとExcelとExcelがアプリケーションIであるという兆候になると考えましたExcel-VBAは可能性がありました...解決策です。もし私が別のアプリを使ってこれをやろうとすれば、おそらく私は言っただろう... –

+0

はい、それはExcelがアプリケーションであることが明らかでした。 C#やVB.Netのようなものに別のスタンドアロンアプリを書くことを含むかもしれないし、おそらくSQL Serverを使用するより大きなアプリケーションの一部として使用することを望むかもしれない* external *メカニズムは明らかではなかった。あなたはあなたのシステムを知っています。私たちはしません。私は本当にここで助けて楽しんでいますが、助けを提供しようとしているときにこのような反応はあまり励みにはなりません。あなたのプロジェクトに幸運。 –

+1

もしC#とVB.Netがあるとすれば、それはタグに入れられます...私は物事を求めているときに私はかなりlitteralです。 –

答えて

20

あなたはクエリテーブルあなたがちょうど右クリックでデータを更新することができますを作成したら、あなたのデータソース

にPOデータシートにクエリテーブルを作成するには、このコードを追加します(またはオープンにリフレッシュ)

Sub CSV_Import() 
Dim ws As Worksheet, strFile As String 

Set ws = ActiveWorkbook.Sheets("PO Data") 'set to current worksheet name 

strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...") 

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1")) 
    .TextFileParseType = xlDelimited 
    .TextFileCommaDelimiter = True 
    .Refresh 
End With 
End Sub 
+0

私はそれを変更してもxlsファイルと一緒に使えますか? –

+0

私が尋ねる唯一の理由は、ファイルをxlxsまたはxlsに変更しようとすると、extrコードが多くスローされてしまうからです。 –

+1

Excelファイルへの接続は同じ方法ではなく、ADO接続を使用して実行できます。コメントではなく、ここで答えるのに別の質問が必要だと思います。 –

2

可能です。

vbaを使用しない場合は、DATA-Tabを使用してテキストソースからインポートします。新しいワークブックとしてCSVを開くことができVBAで

Public Function openSource(fileToOpen As String) As Excel.Workbook 
On Error GoTo err_exit 

    Dim f As Object 
    Dim fs As Object 

    Set fs = CreateObject("Scripting.FileSystemObject") 
    Set openSource = Nothing 

    If fs.fileexists(fileToOpen) Then 
     Set f = fs.GetFile(fileToOpen) 

     Set openSource = ThisWorkbook.Application.Workbooks.Open(_ 
      FileName:=f.path, _ 
      UpdateLinks:=2, _ 
      ReadOnly:=True, _ 
      AddToMRu:=False, _ 
      Notify:=False) 

     Windows(openSource.Name).Visible = False 
    End If 
    Exit Function 
err_exit: 
    'throwErrMsg "Failed to read File!", "openSource" 
    If Not openSource Is Nothing Then 
     openSource.Close SaveChanges:=False, RouteWorkbook:=False 
    End If 
End Function 

Dim CSVWorkbook As New Excel.Workbook 
Set CSVWorkbook = openSource(c:\SO2PO.csv) 

今、あなたは他のどのようにこのワークブックをナビゲートし、行、colsのか、ワークシート全体をコピーすることができますが、)このことができます願っています。

もう1つの方法は、vbaバージョンのテキストからのインポートを使用することですが、すぐに例はありません。

1

Excelにデータを取得する方法はたくさんあります。 QueryTables(The_Barmanのデモンストレーション)、SQL、インポートウィザードなど

通常、このメソッドは、インポートする必要のあるファイルにデータがどのくらい表示され、どのようにレイアウトされているかを正確に把握しています。たとえば、空の行、混合データ型、マージされたセルなどがある場合、それは悪夢になる可能性があります。

以下は、通常はExcelでファイルを開くことによってすべてのデータを取得する、より低速の「ブルートフォース」方式です。それはしばしば、他の方法が失敗したときに行う最後のことです。

Option Explicit 

Public Sub ImportData() 
Dim CSVFilename As String 
Dim writeToFilename As String 
Dim writeToSheet As String 
Dim readXL As Workbook 
Dim readWS As Worksheet 
Dim writeXL As Workbook 
Dim writeWS As Worksheet 
Dim UsedRng As Range 



    CSVFilename = Environ$("USERPROFILE") & "\Desktop" & "\SO2PO.csv" 
    writeToFilename = Environ$("USERPROFILE") & "\Desktop" & "\Open Order.xlsx" 
    writeToSheet = "PO Data" 


    Set writeXL = GetObject(writeToFilename) 
    Set writeWS = writeXL.Sheets(writeToSheet) 
    'writeWS.Parent.Windows(1).Visible = True 


    Set readXL = GetObject(CSVFilename) 

    With readXL 

     Set readWS = readXL.Sheets(1) 
     Set UsedRng = RealUsedRange(readWS) 
     writeWS.Range(UsedRng.Address).Value = UsedRng.Value 

    End With 

    'close CSV without saving 
    readXL.Close SaveChanges:=False 
    Set readWS = Nothing 
    Set readXL = Nothing 

    'close template with save 
    writeXL.Close SaveChanges:=True 
    Set writeWS = Nothing 
    Set writeXL = Nothing 


End Sub 


Public Function RealUsedRange(ByVal WS As Worksheet) As Range 
'Find used range 
    Dim FirstRow  As Long 
    Dim LastRow   As Long 
    Dim FirstColumn  As Integer 
    Dim LastColumn  As Integer 

    On Error Resume Next 

    With WS 

     FirstRow = .Cells.Find(What:="*", After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row 

     FirstColumn = .Cells.Find(What:="*", After:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column 

     LastRow = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

     LastColumn = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlValues, LookAt:= _ 
     xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 

     Set RealUsedRange = .Range(.Cells(FirstRow, FirstColumn), .Cells(LastRow, LastColumn)) 

    End With 

    On Error GoTo 0 

End Function 
0

クエリテーブルを使用する場合は、後でクリーンアップしてください。残っているクエリテーブルは、私にダウンストリームプロセスで頭痛を引き起こします。

' get the file to the data sheet 
Set ws = ActiveWorkbook.Sheets("Data") 
With ws.QueryTables.Add(Connection:="TEXT;" & "mydata.csv", Destination:=ws.Range("A1")) 
    .TextFileParseType = xlDelimited 
    .TextFileCommaDelimiter = True 
    .Refresh 
End With 

' delete the querytable if there is one 
On Error GoTo nothingtodelete 
    Sheets("Data").QueryTables(1).SaveData = False 
    Sheets("Data").QueryTables.Item(1).Delete 
nothingtodelete: 
関連する問題