[[20200513001710]] 『CSVデータを実行したxlmsの隣のシートにコピー』(けさ子0点) ページの最後に飛ぶ

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

 

『CSVデータを実行したxlmsの隣のシートにコピー』(けさ子0点)

すみません教えて頂きたいです。
マクロを勉強して仕事で活かしたいレベルまで達していない初心者です。

マクロを実行したときに

ダイアログが表示されて任意のCSVデータを選択できるようになる

CSVデータを選択するとマクロを起動したxlsmデータの右隣シートに保存される

CSVデータは閉じる(削除はされない)

xlms内のコピーされたシートが表示された状態にする

というのは可能でしょうか。すみませんがよろしくお願いします。

< 使用 Excel:Office365、使用 OS:unknown >


 参考に 

 Sub Test()
    Dim myFile As Variant, A As Variant, V As Variant
    Dim i As Long, buf As String

    myFile = Application.GetOpenFilename("CSVファイル(*.csv),*.csv")
    If VarType(myFile) = vbBoolean Then Exit Sub
    Worksheets.Add After:=ActiveSheet
    Open myFile For Input As #1
    Do Until EOF(1)
        i = i + 1
        Line Input #1, buf
        V = Split(buf, ",")
        ActiveSheet.Cells(i, 1).Resize(, UBound(V) + 1) = V
    Loop
    Close #1
    MsgBox "終わり!!", vbInformation
 End Sub

(ピンク) 2020/05/13(水) 01:57


解決済かもしれませんが。

■1
>ダイアログが表示されて〜
とのことなので、↓が参考になるとおもいます。
http://officetanaka.net/excel/vba/tips/tips154.htm

■2
おっしゃってるCSVがブックとして開いてよいようなものであれば

 (1)ブックとして開く
 (2)開いたブックの1シート目をコピーして、目標ブックの最後のシートの次に挿入する
 (3)開いたブックを閉じる

CSVをブックとして開くのが適切でない場合

 (1)目標ブックの最後のシートの次に新規ブックを追加
 (2)追加したシートにCSVデータを「QueryTables.Add」で取り込む

のどちらかでも可能だと思います。
なお、■2の作業をすれば、いずれの方法でも追加シートがアクティブになるとおもいます。

(もこな2 ) 2020/05/13(水) 09:53


すみません。誤字りました。

 誤 新規ブックを追加
 正 新規シートを追加

(もこな2 ) 2020/05/13(水) 09:54


(ピンク)さん 、完璧すぎました。素晴らしすぎて感謝しきれません。

(もこな2 )さん、有難いアドバイスとURL本当にありがとうございます。
勉強させていただきます!!

後付けになるのですが

CSVを取り込んだ後のシート名がCSVの名前になって欲しい場合
反映させるのは教えて頂いたコードを大幅にいじらないと無理でしょうか。
試行錯誤して自分で挑戦していますが当然デバックエラーばかり出ています。。
(けさ子-5点) 2020/05/13(水) 22:26


 >      V = Split(buf, ",")
 >      ActiveSheet.Cells(i, 1).Resize(, UBound(V) + 1) = V
 >  Loop
 >  Close #1

    Dim n As Long
    n = InStrRev(myFile, "\")
    ActiveSheet.Name = Split(Mid(myFile, n + 1), ".")(0)
    MsgBox "終わり!!", vbInformation
 End Sub

(ピンク) 2020/05/13(水) 22:39


Dim (ピンク)様 as GoD

感謝しきれません。本当にありがとうございました。

(けさ子15点) 2020/05/14(木) 00:45


ピンク様、または他の上級者様

昨日家では完璧に出来たのに職場で使ってみたらエラーでした。職場のエクセルは2010です。
詳細もメモってこれずに帰宅してしまった時点でダメなのですが

コード内の ActiveSheet.Cells(i, 1).Resize(, UBound(V) + 1) = V の部分がデバックに該当していました。

会社の方がのバージョンが2010なせいなのか
CSVの形式が違ったりするのか、それが中身のデータのせいなのか;;

エスパーになってしまうと思うのですが考えられる原因はないでしょうか。
エラーコード覚えてこれば良かったです;;
(けさこ15点) 2020/05/15(金) 00:11


上級者ではありませんが、それなりにヒントは書いたとおもいますが・・・
    Sub テキトー()
        Dim ファイルパス As String
        Dim wb As Workbook

        Stop '←ブレークポイントの代わり

        '▼ダイアログでcsvファイルを選択してもらう
        ファイルパス = Application.GetOpenFilename("しーえすぶい,*.csv")
        If ファイルパス = "False" Then Exit Sub

        '▼CSVをブックとして開いて、オブジェクト型変数にセットする
        Set wb = Workbooks.Open(ファイルパス)

        '▼自ブックの最後に開いたブックの1番目のシートをコピー挿入する
        With ThisWorkbook
            wb.Worksheets(1).Copy after:=.Worksheets(.Worksheets.Count)
        End With

        '▼開いたブックを保存せずに閉じる
        wb.Close False

    End Sub

(もこな2 ) 2020/05/15(金) 01:47


 >コード内の ActiveSheet.Cells(i, 1).Resize(, UBound(V) + 1) = V の部分がデバックに該当していました。
 恐らく空行があるのでしょう。

        ActiveSheet.Cells(i, 1).Resize(, UBound(V) + 1) = V
 を

        If UBound(V) > -1 Then ActiveSheet.Cells(i, 1).Resize(, UBound(V) + 1) = V
 に変更してみてください。
(seiya) 2020/05/15(金) 17:27

コメント返信:

[ 一覧(最新更新順) ]


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