什麼是使用VBA將Excel 2010中的數據導出到CSV的特定範圍的單元格的有效方法?數據總是從單元格A3開始。範圍的結尾取決於數據集(始終是列Q,但行結束可能會有所不同)。它應該只從名爲「內容」的工作表2導出數據,而單元格只需包含「真實」數據(如文本或數字),而不是包含公式的空值。將數據導出到單個CSV文件
單元格具有公式的原因是因爲它們引用表單1和3中的單元格。公式使用常規引用和垂直搜索。
使用UsedRange將導出Excel使用的所有單元格。這可以起作用,但它也會導出所有包含公式的空單元格,但不會導致在輸出.csv中導致出現大量(510)精確)不必要的分號的數據。
Sub SavetoCSV()
Dim Fname As String
Sheets("Content").UsedRange.Select
Selection.Copy
Fname = "C:\Test\test.csv"
Workbooks.Add
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=Fname, _
FileFormat:=xlCSV, CreateBackup:=False, local:=True
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
一種解決方案可能是使用偏移或調整大小來更改VB代碼中UsedRange。另一個可能是創建一個RealRange變量,然後selectcopy。
類似樣的問題已被要求不止一次,像here,here和here,並且我也看了SpecialCells,但不知何故,我不能讓它工作,我希望它的方式。
我已經嘗試了下面的代碼,但它最終還是從表3中添加了行。
Sub ExportToCSV()
Dim Fname As String
Dim RealRange As String
Dim Startrow As Integer
Dim Lastrow As Integer
Dim RowNr As Integer
Startrow = 3
RowNr = Worksheets("Content").Cells(1, 1).Value 'this cells has a MAX function returning highest row nr
Lastrow = RowNr + 3
RealRange = "A" & Startrow & ":" & "Q" & Lastrow
Sheets("Content").Range(RealRange).Select
Selection.Copy
Fname = "C:\Test\test.csv"
Workbooks.Add
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=Fname, _
FileFormat:=xlCSV, CreateBackup:=False, local:=True
Application.DisplayAlerts = False
'ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
如果我找錯了方向,請參考其他選項。
謝謝,我得到一個錯誤5 - >無效的過程調用或無效的參數,但它產生的輸出CSV文件。還有一個小小的評論標誌'將被添加到第一個循環中。我真的很喜歡這個結果,它實際上比預期的要好,但我仍然有兩個問題:1)在評論中你更喜歡用usedrange作爲行數。你能說明一下嗎? 2)如果它包含數據,我想保留整行。列A實際上是一個行號,所以如果列A有數據,那麼會導出整行(列A - Q)。如何才能做到這一點? – J3FFK
1.我總是使用類似LastRow = Cells(65536,1).End(xlUp).Row ..這不是我最好的練習,因爲你的範圍可以超越這個範圍,excel能夠處理超過一百萬行只是選擇一個數字,你可以在工作表中使用...你也可以使用Worksheet.UsedRange.Rows.Count(我認爲),但我不使用它,因爲它會拾取通過如果您尚未刪除這些行,則會顯示實際數據的結尾。 2.我將編輯帖子以檢查列a中的值並導出整行 – neuralgroove
嗯,那是LastRow的作品,謝謝! – J3FFK