[[20110603193604]] 『エクセルデータをcsvに保存するマクロ』(みや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルデータをcsvに保存するマクロ』(みや)

エクセルデータの1シートをcsvデータにして保存したい。

データの範囲はA〜J列(10列)まで。
(A〜J列は空白でもデータ抽出する)

行は2行目からデータ入力のある行すべて。

色々調べてトライしましたがうまくいきません。

OS,Excelのバージョンは

OS)WindowsXP(Version2002) Excel2002

よろしくお願いします。


 >色々調べてトライしましたがうまくいきません。

 これを手作業で?それともマクロで?
 いずれにしても、手作業でやると以下。で、これをマクロ記録すると、基本のコードが生成されるけど、それはやったのかな?

 1.CSVに落とし込みたいシートのK列から最終列までを選択してクリア
 2.1行目を選択してクリア
 3.シートタブを右クリック
 4.移動またはコピー
 5.移動先ブック名のコンボボックスから新規ブックを選択
 6.コピーを作成するにティックをつけてOK。
 7.このシートだけのブックが新規ブックとしてできあがるので
 8.それを名前をつけて保存。ファイルの種類をCSVにする。

 これで作業完了。

 ぶらっと立ち寄り


有難うございます。

教えていただいた内容で「マクロの記録」をしたのですが、やはり1列目にデータ入力がないと作成されたCSVに1列目が削除されてしまいます。

1列目もデータ入力が無くても空白列として残したいです。


 >1列目もデータ入力が無くても空白列として残したいです。
 その前に、上の作業手順、3〜7は不要だった。シートが何枚あろうと、保存時のシートのみがCSV変換される。
 で、そうですか。1行目を空白行として。
 じゃ、1行目をクリアしたあと、以下のおまじないをいれてみて。
 Range("A1").Value = vbTab 'おまじない

 ぶらっと立ち寄り


 >1列目もデータ入力が無くても空白列として残したいです。
 データ範囲を罫線で囲ってみたら・・・・。
 BJ

 列と行をゴチャゴチャにして読んでいた。
 要はA〜Jのみ、かつ空白列でも何でもコピー。
 行は?2行目からということだけど、1行目も空白行としてコピー?
 それとも2行目を1行目として?
 後者だとして、1行目をクリアした後、↑のおまじないにかえて

    Dim c As Range
    For Each c In Range("A2:J2")
        c.Value = vbTab & c.Value
    Next



たびたびスミマセン!!
以下がマクロの詳細です。
どこにおまじないを入れればよいのでしょうか?
また、マクロを実行すると1.csvがデスクトップに保存されるのですが、エクセルを閉じる際に保存確認が入ってしまいます。この保存確認を無くしたいのですが可能でしょうか?

Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2011/6/6 ユーザー名 :
'

'

    Columns("K:IV").Select
    Selection.Delete Shift:=xlToLeft
    ActiveWindow.LargeScroll ToRight:=-1
    ActiveWindow.SmallScroll Down:=-15
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Sheets("買入アップロード").Select
    Sheets("買入アップロード").Copy
    ChDir "C:\Documents and Settings\mew\デスクトップ"
    ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\mew\デスクトップ\1.csv" _
        , FileFormat:=xlCSV, CreateBackup:=False
    Windows("買入アップロード.xls").Activate
End Sub

 さっきのおまじない、ちょっと手抜きがあったのでその修正も加味して。
 マクロ記録したコードを、ちょっとお化粧直し。

  Sub Sample()
    Dim myPath As String
    Dim c As Range

    Sheets("買入アップロード").Copy    '目的にシートのみで新規ブック

    '以下は、アクティブブックとなった新規ブックに対して処理

    Columns("K:IV").ClearContents  'クリア
    Rows("1:1").Delete Shift:=xlUp
    myPath = "C:\Documents and Settings\mew\デスクトップ"

    'おまじない

    For Each c In Range("A1:J1")
        If c.Value = Empty Then c.Value = vbTab & c.Value
    Next

    Application.DisplayAlerts = False 'うっとおしいメッセージをださない

    ActiveWorkbook.SaveAs Filename:=myPath & "\1.csv" _
        , FileFormat:=xlCSV, CreateBackup:=False

    'ActiveWorkbook.Close savechanges:=False  'もし作成後閉じたければ
    Application.DisplayAlerts = True  '以降メッセージはだしていいよとVBAに教える

 End Sub

 ぶらっと立ち寄り


有難うございます。

最後に1つ質問ですが、現状のマクロだと空白の行もCSVに抽出した際に認識されている様です。

空白の列はCSV出力から除外したいのですが、可能でしょうか?


 >空白の列はCSV出力から除外したいのですが、可能でしょうか? 

 空白の「行」かな?

 で、列は空白列でもA〜JまでCSVに持っていくけど、元の2行目からの行の中で空白行は削除したいということ?

 そうであれば、保存の前に、間の空白行を削除するということになるけど。
 コードアップして、そうじゃないよといわれると疲れるので返事を待ってから。

 ぶらっと立ち寄り

間の空白行は存在しません。

最終入力行の下からの空白行を出力しないようにしたいです。

データが10行まで入力されている場合11行目以降の空白のセルを出力しないという事です。

行数はその時々で変わります。


 >データが10行まで入力されている場合11行目以降の空白のセルを出力しないという事です。

 ???????
 ただでさえ理解力が乏しいのに昼一番でぼぉっとして、どうも言っていることの意味が?

 データ最終行より先の行はCSVファイルには、書き込まれていないはず。
 というか、書き込まれていると判断したのはなぜ?

 メモ帳で、作られたCSVファイルを開いてみて。
 書かれているかな?

 もしかしたら、エクセルで開いたら、11行目以降(きっとXL2003なら65536行目まで)そこに
 表示されているからってこと?

 ぶらっと立ち寄り

わかりにくくてスミマセン。
csvでサンプルデータを取り出し、会社のシステムにアップロードしたときに存在しない行でエラーメッセージが発生したので、空白のセルとして行が存在しているのではないかと思いました。
10行したエクセルのシートをcsvに取り出しし、会社のシステムにアップロードしたときに、「198、199、200行目でエラーメッセージが発生!」というようなメッセージです。
会社の管理部門にシステムと併せて聞かないと無理ですかね?

 そうだね。システムの人に調べてもらって。
 コード見たらわかると思うけど、行については1行目を削除しているだけで、あとは何もしていない。
 あるはずのない198行目、199行目、200行目。なんとなく、ここが空白ではなく、見えない
 なにか(それこそ、タブとか改行とかヌルとかとか)があるのかもね。

 以下は、せめて、システムに相談する前に。
 1.メモ帳で、開いて、198行目、199行目、200行目にあたるところに何か表示されてないか確認。
 2.元ねたのシートを表示しておいて以下のマクロを実行。
      表示されるアドレスが、データが存在すると認識している領域と同じかどうか確認。

 もし、目に見えないゴミがシート上にあるとすれば、その種類にもよるけど、それらをCLEAN関数でクリアするというのも
 一考の価値あるかなぁ・・・。

 Sub Test()
    MsgBox ActiveSheet.UsedRange.Address
 End Sub

 ぶらっと立ち寄り


ご助言有難うございます。

一度システムの部署に聞いてみます。


 システム側のスクリプトかなんかのエラー行数ではないでしょうか?
 (momo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.