アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excelのマクロについて質問します。

<sheet1>の内容をCSVに出力するマクロを使用しているのですが、
問題があって困っています。

<seet1>のA1~K30までは数式が入っていて、<sheet2>のA1~A30に
「OK」と表示されている場合、<sheet1>の対応した行に数値が表示されます。
「OK」以外の場合は、空白になるようにしてあります。


【sheet1】
  A    B    C    D    E …
1 100  200  300  400  500
2 100  200  300  400  500
3 100  200  300  400  500
4 100  200  300  400  500
5
6


【sheet2】
  A
1 OK
2 OK
3 OK
4 OK
5
6

<sheet1>をマクロでCSV出力する際に、「空白だけど数式が入っているセル」を
除外する方法を教えてください。

現在は「空白だけど数式が入っているセル」もCSV出力されてしまい、「,」が
連続で表示されるので、手動で「,」を削除しています。

■今使用しているマクロは以下になるので、これに追記する形で改良できないでしょうか。

Sub CSV出力()
Dim FileN As String
FileN = Application.GetSaveAsFilename( _
InitialFileName:="book1.csv", _
FileFilter:="CSV ファイル (*.csv), *.csv")

Sheets("sheet1").Copy
ActiveWorkbook.SaveAs Filename:=FileN, FileFormat:=xlCSV
ActiveWorkbook.Close Savechanges:=False
End Sub

よろしくお願いします。

A 回答 (2件)

こんばんは。



出力したものは、行の長短が出来て、凸凹になってしまってもよいということですか?

>これに追記する形で改良できないでしょうか。

Sheets("Sheet1").Copy の後で、あくまでも、空白が「文字列」になっている条件ですが、
Range("A1:K30").SpecialCells(xlCellTypeFormulas, xlCellTypeConstants).Delete Shift:=xlToLeft

とすれば出来ます。

しかし、こんなコードも考えられます。以下の場合は、複雑な条件を取りつけることが可能です。
今回は、「""」という表示になっていることが条件です。

'//標準モジュールで、出力は、ActiveSheet
Sub Test1()
 Dim FName As String
 Dim Fno As Integer
 Dim myRange As Range
 Dim i As Long, j As Long
 Dim strLine As String
 Set myRange = Range("A1", "K30") '範囲
 
 FName = Application.GetSaveAsFilename( _
           InitialFileName:="book1.csv", _
           FileFilter:="CSVファイル (*.csv), *.csv")
 If FName = "False" Or FName = "" Then Exit Sub 'キャンセルが利くようにする
 
 Fno = FreeFile()
 Open FName For Output As #Fno
 For i = 1 To myRange.Rows.Count
  For j = 1 To myRange.Columns.Count
   If Trim(Cells(i, j).Value) <> "" Then
    strLine = strLine & "," & Cells(i, j).Value
   End If
  Next j
  Print #Fno, Mid(strLine, 2)
  strLine = ""
 Next i
 Close #Fno
 Set myRange = Nothing
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。

空白は文字列ではなかったので、下の記述を試したところ、
うまくいきました。

色々と応用が利くので、この先も使っていきます。
助かりました。

お礼日時:2014/04/21 10:51

>これに追記する形で改良できないでしょうか。



ご利用のエクセルのバージョンが不明ですが、エクセルにCSVとして保存させる方式では、ご希望の事はできません。

#参考
2003以前のエクセルの場合:
http://support.microsoft.com/kb/400253/ja
の仕様によって、一部の行についてカンマが補填されます

2007以降のエクセルの場合:
上述の「仕様」は変更され、全ての行にカンマが補填されます。




>マクロでCSV出力する際に、「空白だけど数式が入っているセル」を除外する方法

sub macro1()
 dim h as range
 dim buf as string
 dim FileN as string

 FileN = Application.GetSaveAsFilename( _
  InitialFileName:="book1.csv", _
  FileFilter:="CSV ファイル (*.csv), *.csv")
 open filen for output as #1

 with application
 for each h in range("A1:A" & range("A65536").end(xlup).row)
  buf = join(.transpose(.transpose(range(h, cells(h.row, "IV")).value))," ")
  buf = .trim(buf)
  buf = replace(buf, " ", ",")
  print #1, buf
 next
 end with
 close #1
end sub

みたいな。
    • good
    • 1
この回答へのお礼

ありがとうございます。
教えていただいた記述でうまくいきました。

色々なやり方があるのですね…勉強します。

お礼日時:2014/04/21 10:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A