[[20180302210430]] 『VBA データを分ける』(みや) ページの最後に飛ぶ

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

 

『VBA データを分ける』(みや)

エクセルVBAを使い、CSVのデータシートを分けて保存したいです。
具体的には行は任意になりますが、列はCP列までデータが入っています。
空白も一部ありますが、CO列を基準としてCO列の文字を判別し、判別した文字の名前でCSV保存したいです。CO列には半角で2文字(数字もしくはアルファベット)の構成になっています。
例)18 1A AN N1という感じです。
1行目は項目で2行目以降にデータが入っており、分けたCSVは1行目+CO列の検索結果としたいです。
CO列に18のデータのみを抽出し18.CSVの形式でデスクトップに保存かつ1Aのデータのみを抽出し1A.CSVの形式でデスクトップに保存。以下COに存在する文字の分だけCSVで保存したいです。

どなたか教えてください。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


>空白も一部ありますが、

どこに空白があるのでしょうか?

(マナ) 2018/03/02(金) 21:44


お試しください
 Option Explicit

 Sub test()
    Dim r As Range
    Dim c As Range
    Dim p As String

    Set r = Range("A1").CurrentRegion
    Set c = r(1).Offset(, r.Columns.Count + 1)

    p = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"

    r.Columns("CO").AdvancedFilter xlFilterCopy, , c, True

    Do While c.Offset(1).Value <> ""
        With Workbooks.Add
            r.AdvancedFilter xlFilterCopy, c.Resize(2), .Sheets(1).Range("A1")
            .SaveAs p & c.Offset(1).Value & ".csv", xlCSV
            .Close False
        End With
        c.Offset(1).Delete xlShiftUp
    Loop

    c.Resize(2).ClearContents

 End Sub

(マナ) 2018/03/02(金) 22:13


マナさん

ありがとうございます。
返信が遅くなり申し訳ごXざいません。
使ってみます。
(みや) 2018/03/05(月) 13:15


マナさん

ちなみに今のコードだと、デスクトップにCSVが沢山出来てしまい整理がつかなくなってしまいました。
元のCSVのW2のセルのフォルダを作成し、その中に分けられたCSVを保存する事って可能でしょうか?

(みや) 2018/03/15(木) 12:41


↓で継続
[[20180315172125]] 『VBA セルの入力を引用しフォルダを作成し、フ』(みや)

(マナ) 2018/03/15(木) 20:16


もこな2さん
マナさん

ギブアップですm(_ _)m

自力で色々試してみましたが、出来ませんでした。
フォルダは出来たが、CSVの保存先がデスクトップになってしまいます。
(みや) 2018/03/16(金) 14:46


マナさんが、継続トピックへのリンクを作って下さっていますし、私がそちらでコメントを返してますが、それは試してみたんでしょうか。。
(もこな2) 2018/03/16(金) 14:59

もこな2さん

試してみてわからなかったのです。。。

(みや) 2018/03/16(金) 15:11


このトピックで話を続けるなら、むこうはこっちへのリンクを張って話を終わらせるべきだし、あっちにかいたことをこっちで釈明されても・・・・

まぁついでなので、こっちで答えちゃいます。

マクロの記録で得られたコードのうち
 Filename:=○○○○○
の部分に注目してみてください。

(もこな2) 2018/03/16(金) 15:28


追加で。
下記コードを実行するとデスクトップに「ブック名.csv」というファイルが保存されるとおもいます。
さて、どこでデスクトップに保存しなさいという命令になってるのか考えてみてください。
※ヒント:名前を付けて保存するという命令はどの部分でしょうか?

Sub Sample()

    Dim p As String
    p = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
  '↑文字列型の変数「p」に何を格納してますか?

    With Workbooks.Add
        .SaveAs _
            Filename:=p &”ブック名” & ".csv", _
            FileFormat:=xlCSV
    End With

End Sub
(もこな2) 2018/03/16(金) 15:56


もこな2さん

Sub Sample()

    Dim p As String
    p = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
  '↑文字列型の変数「p」に何を格納してますか?

    With Workbooks.Add
        .SaveAs _
            Filename:="C:Users\Desktop\ & p & "ブック名" & ".csv"", _
            FileFormat:=xlCSV
    End With

End Sub

マクロの記録を使ってPCに保存されている情報と頂いたヒントからすると上記かと思ったのですが。
コンパイルエラー:構文エラーが発生します。
"の入れ方がおかしいのか&の使い方がおかしいのかなとは思うのですが、ここで打開が出来ませんでした。

(みや) 2018/03/16(金) 16:28


投稿ミスにより削除

(もこな2) 2018/03/16(金) 17:17


2018/03/16(金) 15:56 に私が投稿したコードとよく見比べてください。
違う部分がありますよね

コンパイルエラーは、それが原因です。具体的には2カ所
(1)pの前、余計なものが付いちゃってるし、ダブルクォーテーションが抜けてる
(2)csvの後ろ、ダブルクォーテーションが2つになってる

そして、考えていただきたいのは
「どこでデスクトップに保存しなさいという命令になってるのか」
です。

「コードの検証をしてみてください」でも「改造してみてください」でもないです。

とりあえず、私が 2018/03/16(金) 15:56 に投稿したコードを使って ステップ実行してみて 変数「p」に何が格納されているのか、確認してみてください。
(もこな2) 2018/03/16(金) 17:33


もこな2さん

ありがとうございます。
PCが使える環境が無くて返信が遅くなりました。
確認してみます。
(みや) 2018/03/22(木) 12:10


コメント返信:

[ 一覧(最新更新順) ]


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