プロが教える店舗&オフィスのセキュリティ対策術

お世話になっております。Excel VBA 初心者です。
出力されたCSVファイルを取り込み、別のExcelファイルにコピペする作業をVBAにて行いたいと考えておりますが、上手くできず困っています。
以下のような処理をするにはどのようにすればよいのでしょうか。ご教授いただけるとありがたいです。

①貼り付け先のExcelからマクロ実行

②CSV読み込み

③CSVの「B7:AZ100」のセルをコピー

④貼り付け先のExcelのアクティブになっているシートの「BF10」に
 先ほどコピーしたものを値貼り付け

⑤CSVは保存せずに閉じる

以上です。
よろしくお願いします。

A 回答 (3件)

こんばんは。



下記検索した記事を元に組み立ててみました。動作確認していませんので、
エラーになる可能性もありますが、下記でどうでしょうか?

大元は、CSVをExcelブックとして開くVBAを参考にしています。
https://excel-ubara.com/excelvba5/EXCEL111.html

Sub CSV入力3()
Dim varFileName As Variant, myNewBook As Workbook

varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub
End If

Set myNewBook = Workbooks.Open(Filename:=varFileName)
ActiveSheet.Range("B7:AZ100").Copy
ThisWorkbook.Activate
Range("BF10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

myNewBook.Close SaveChanges:=False
End Sub
    • good
    • 0
この回答へのお礼

お世話になっております。
情報が少なかったにも関わらず、
コードを書いていただきありがとうございました。

こちらで動作確認を行いましたが、問題なく動作しました。
ありがとうございます。

お礼日時:2021/12/31 13:00

こんにちは


初心者向けの回答で出は無いと思いますが許してください
無視して頂いても良いです。

>出力されたCSVファイルを
何処からCSVファイルが出力(作成)されたのか、この部分は重要です

既に解決されているようなので良かったのですが
Excelから作成されたCSVなのだと思います
また、加工の必要がないデータなのでしょう。

CSVファイルは区切り文字で分けられたテキストです
従って区切り文字はカンマ、タブなど何なのか
更に出力されたアプリケーションによっては
文字コードが何なのか、
Excelに抽出しても問題が発生しないデータなのか
0・・・ や -10 など演算子などが先頭文字などにあるデータ

この機会にCSVファイルについては少しお調べになる事を勧めます
Workbooks.Openでcsvファイルを開くのは、早めに卒業した方が良いと思います

私も昔はCSVファイルをExcelに紐づけて開いたりしていましたが
今はVBAや手作業でもExcelブックとして開く事はしていません。
リボンの 外部データの取り込み機能(メソッド)やそれで記録される
マクロなどを使っています。

今回は何もデータ加工を必要としないようなので
テキストで開く例のサンプルです。

Sub sample()
Dim csvFile As String, delimiter As String
Dim ary
Dim start_row As Long, end_row As Long
Dim start_clm As Long, end_clm As Long

csvFile = Application.GetOpenFilename _
(FileFilter:="CSVファイル(*.csv),*.csv", Title:="ファイル選択")
If csvFile = "False" Then Exit Sub

delimiter = ","
start_row = 7: end_row = 100 '取得範囲行
start_clm = 2: end_clm = 52 '取得範囲カラム 'B~AZ

ary = aryCsv(csvFile, delimiter, start_row, end_row, start_clm, end_clm)
'出力セル
Worksheets("?").Range("BF10").Resize(UBound(ary, 1) + 1, UBound(ary, 2) + 1) = ary
End Sub

Public Function aryCsv(file As String, delimiter As String, _
start_row As Long, end_row As Long, start_clm As Long, end_clm As Long) As Variant
Dim i As Long, j As Long, n As Long
Dim buf As String
'取得データ範囲
ReDim ary(end_row - start_row, end_clm - start_clm)
n = FreeFile
Open file For Input As #n
Do Until EOF(1) '最後まで
Line Input #n, buf
i = i + 1
If i >= start_row And i <= end_row Then
On Error Resume Next 'Split1004回避
For j = 0 To UBound(ary, 2)
ary(i - start_row, j) = Split(buf, delimiter)(j + (start_clm - 1)) '区切り文字カンマ
Next
End If
If i = end_row Then Exit Do '必要行以上ループしない
Loop
Close #n
aryCsv = ary
End Function

説明が無いと解らないかも知れませんが、
すでに解決されているようなので割愛します。
    • good
    • 3
この回答へのお礼

お世話になっております。
貴重なご意見ありがとうございます。
また、サンプルまで載せて頂きありがとうございます。

今後、マクロを使う機会が増えそうなので、これを機に勉強してみようと思います。

お礼日時:2022/01/01 15:47

>上手くできず困っています。


いまどんなの書いてるのか
そこを示してからでしょ。

まずCSVを指定するとこが抜けてます。
そのCSVを貼り付け先のアクティブシートに読み込んだほうが良いと思います。
CSVを開く必要はないので閉じる必要もないと思います。
    • good
    • 6
この回答へのお礼

お世話になっております。
ご指摘ありがとうございます。

>いまどんなの書いてるのか
>そこを示してからでしょ。

すみません。記載していませんでした。
現状を下記に記載します。
Sub Read_Click()
'画面更新停止
Application.ScreenUpdating = False

Dim FileName As String 'ファイル名

'ファイル選択画面を開いてファイルを選択する
FileName = Application.GetOpenFilename("ファイル,*.csv")

'ファイル選択画面でキャンセルボタンを押下した場合、処理を終了する
If FileName = "False" Then
Exit Sub
End If

 ActiveSheet.Range("B7:AZ100").Copy
 ThisWorkbook.Activate
 Range("BF10").Select
 ActiveWindow.Close
End Sub

ActiveSheet.Range("B7:AZ100").Copy以降の処理がうまく動かず、
困っていました。


>まずCSVを指定するとこが抜けてます。
 すみません。ご指摘ありがとうございます。

お礼日時:2021/12/31 12:52

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