質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.92%

【Excel】csvファイルから追記の形で転記したい。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,158

score 24

■環境

Excelを使用

■やりたいこと

csvファイルに入力されたセル(行数不明)を別のブックのシートの既に記入されている行の下にそのまま転記したい。

■以下のVBAでやっていること(予想)

1.Cフォルダから目的のcsvファイルを選択する。
2.選択したファイルから、入力されているセルを選択し変数にする。
3.転記先ファイルを変数にする。
4.転記先ファイルに既に入力されたセルの最終行の1つ下のセル座標を取得し、変数にする。
5.4.で取得したセルを起点にして2.のセルの集まりを貼り付ける。

Sub mistumori()
    '転記するcsvシートを選択する。
    Dim myFile As Variant
    ChDir "C:\"
    myFile = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", Title:="CSVファイルの選択", MultiSelect:=True)

    'ファイルパスが選択されない場合は処理終了
    If IsArray("myFile") = False Then
        Exit Sub
    End If

    '転記する情報を取得
    Dim tenki As Range
    Set tenki = myFile.UsedRange

    '転記先シートを変数にセット
    Dim ws1 As Worksheet
    Set ws1 = Worksheets("転記シート")
    '転記先シートの最終行の次のセルを取得
    Dim LastRow As Long
    LastRow = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

    tenki.Value = ws1.Range(LastRow)

End Sub

色々なサイトを参考にして切り貼りしているので、おかしいところがあるかと思います。
現状、エラーは表示されないものの欲しい結果を得られていません。
最後の「tenki.Value = ws1.Range(LastRow)」が原因だと思いますので、どう修正したら転記できるがご教授お願いします。

追記:

自分なりに作成して期待していた結果を得る事が出来ました。

Sub tenki()
    '変数
    Dim csv As Variant '転記元csvシート_拡張子付き
    Dim csvfile As Workbook '転記元csvシート_オブジェクト
    Dim csvname As String '転記元csvの名前
    Dim csvsheet As String '転記元csvのシート名
    Dim tenki1 As String '転記元セル

    '転記するcsvシートを選択する。
    ChDir "C:\"
    csv = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", Title:="CSVファイルの選択")
    If OpenFileName <> "False" Then
        Workbooks.Open csv
        'ファイル名を取得
        csvname = Dir(csv)
        'シート名を取得
        csvsheet = ActiveSheet.Name
    Else
        MsgBox "キャンセルされました"
    End If

    '転記するデータを取得
    Workbooks(csvname).Activate
    ActiveSheet.UsedRange.Select
    tenki = Selection.Address

    '転記する
    Worksheets(csvsheet).Range(tenki).Copy _
        Destination:=ThisWorkbook.Worksheets("<転記先ファイルのシート名>").Range("<転記先シートの起点となるセル座標>")

    'コピーを解除
    Application.CutCopyMode = False

    'csvファイルを閉じる(保存無し)
    ActiveWorkbook.Close SaveChanges:=False
End Sub
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

現状、エラーは表示されないものの欲しい結果を得られていません。

    If IsArray("myFile") = False Then
        Exit Sub
    End If

"myFile"は単なる文字列で配列ではないので、上記の部分で必ず処理か終了しますので、エラーは表示されないですが、なにもしてないのと同じことです。

正解のコードを書くのは簡単ですか、

色々なサイトを参考にして切り貼りしているので、おかしいところがあるかと思います。

色々なサイトを参考にするのはいいのですが、そのコードの意味も調べずにただ切り貼りするだけではうまくいきません。意味を理解して適正な場所に適切にコードを記述するようにしないと。

とりあえずヒントとして処理の流れを書いておきますのでそれを参考にコードを書きなおしてみてください。

  1. GetOpenFilenameでCSVファイルを選択させる。
    (選択するのは一つなのか複数選択を許可するのでコードが異なるのでどちらか決めてください。)

  2. 選択したCSVファイルを Workbooks.Open で開く。

  3. 開いたシートのUsedRangeでデータのある範囲を取得。

  4. 転記先シートの最終行の次のセルを取得。

  5. 3.で取得したデータ範囲を4.のセルにコピーする。
    (Copyメソッドを使うのが簡単、Valueで代入する場合はサイズを合わせる必要がある)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/25 08:48 編集

    コメントありがとうございます。
    厳しいお言葉とヒントをありがとうございます。
    自分でもう一度丁寧に1つ1つ調べてやってみます。

    キャンセル

0

https://www.tipsfound.com/vba/18014

↑こんな方法もあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/12/25 14:14

    コメントありがとうございます。
    参考にさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る