2

SAS(統計プログラミングソフトウェア)からExcelファイルをリモートで操作できるように、VBAでプログラムを作成しようとしています。プログラムで次のことを達成したい:

  1. 指定したエクセルファイルを開く
  2. ヘッダー行のすべての空白を見つけて何もないものに置き換えます (たとえば、"Test Name" は "TestName" になります)。
  3. 行の最初のセル (つまり、A2) が空白の場合、2 行目を削除します
  4. ファイルをcsvとして保存します

私は VBA を知りませんが、少し手を出したことがあり、他のプログラミング言語をいくつか知っていて、これをつなぎ合わせようとしました。1 と 4 を機能させるためにコードを盗みました。2 と 3 が機能しません。これは私が持っているものです:

vbaプログラムを呼び出すために、SASに次を入れました-

x 'cd C:\Location';/*change to location of VBS file*/
x "vbsprogram.vbs inputfile.xls outputfile.csv";

VBA プログラム -

'1 - Open the specified excel file
if WScript.Arguments.Count < 2 Then
    WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv"
    Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))

'2 - Find and Replace
oBook.Worksheets(1).Range("A1:G1").Select
    Selection.Replace What:="* *", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False

'3 - Delete second row if blank
oBook.Cell("A2").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

'4 - Save as csv
oBook.SaveAs WScript.Arguments.Item(1), 6
oBook.Close False
oExcel.Quit
WScript.Echo "Done"

私を正しい方向に向ける助けがあれば、大歓迎です。

また、行1のすべてのデータを範囲として選択し(パート2)、セルの範囲を指定する必要がない方法はありますか?

4

2 に答える 2

3

試す:

'2:   - Find and Replace
oBook.Worksheets(1).Cells(2,1).EntireRow.Replace " ", ""

'3 - Delete second row if blank
If oExcel.CountA(oBook.Worksheets(1).Cells(2,1).EntireRow) = 0 Then
  oBook.Worksheets(1).Cells(2,1).EntireRow.Delete
End If
于 2013-05-09T19:36:54.210 に答える
0

入力に基づいて、元のコードのステートメント (2) と (3) を修正し、行 1 のすべてのセルの値を連結する必要があります。これは、行に対応する 2 つの Range オブジェクトの各セルをループすることで実現できます。 1 および 2. Excel VBA でのその操作の一般的な構文 (ソース: http://msdn.microsoft.com/en-us/library/office/aa221353%28v=office.11​​%29.aspx ) を次に示します。サンプル コード スニペット:

Sub FormatRow1()
    For Each c In Worksheets("Sheet1").Range("A1:G1").Cells
        if (c.Value) = {condition} then do something.
    Next
End Sub

参考までに、Excel VBA での文字列連結は&演算子で実行されます。また、VBA 演算子を使用してタスクを完了するReplace ( string1, find, replacement, [start, [count, [compare]]] )必要があります。Range(range).EntireRow.Delete

于 2013-05-09T19:19:31.277 に答える