dポイントプレゼントキャンペーン実施中!

解析ファイル(マクロを組むファイル)のあるフォルダ内にデータファイルが複数あります。
そのなかで.csvデータファイルのみを抽出し、そのファイルのデータを解析ファイルのシート1に12行目から並べていきたいです。
.csvデータファイルには各々シート1のB2:B100にデータが入っています。

つまりは 解析ファイルsheet1に
11行目まで 空欄
12行目 .csvデータ1のB2:B100
13行目 .csvデータ2のB2:B100
14行目 .csvデータ3のB2:B100



のように並べていきたいです。

以下のようにマクロをくんだのですが、データが解析ファイルのシート1に表示されません(マクロを実行する前と変わりません)。

Public Sub データを抽出()
Dim i As Long
Dim buf As String

'ワークシート変数の宣言
Dim dstSheet As Worksheet

'現在のブック内のワークシートの1番目を代入
Set dstSheet = ThisWorkbook.Sheets(1)

'フォルダ内すべてのExcelファイル名を取得
buf = Dir(ThisWorkbook.Path & "\*.csv")
i = 11

'ループ処理
Do While buf <> ""
i = i + 1

'ワークブック変数の宣言
Dim srcBook As Workbook
'ワークブックの代入
Set srcBook = Workbooks.Open(ThisWorkbook.Path & "\" & buf)
'ワークシート変数の宣言
Dim srcSheet As Worksheet
'ワークシートの代入
Set srcSheet = srcBook.Sheets(1)

'データの移行
dstSheet.Cells(i, 2).Value = srcSheet.Cells(2, 1).Resize(1, 100)

'ファイルを閉じる
srcBook.Close False

buf = Dir()
Loop

End Sub

説明下手で申し訳ございません。
どこに問題があるか、どなたかご教授いただければ幸いです。

A 回答 (2件)

No1です。



>正しくはB2:CV2です。
少なくともスタートの、.Cells(2, 1) はA2セルなのでおかしいのかと・・・

No1に書き忘れましたが、Copyメソッドなどの場合は、転記先の先頭セルを指定すれば、同サイズのセル範囲にペーストしてくれますが、ご提示の様な
 .Value = .Value
形式の転記の場合は、左辺もきちんとセル範囲を指定しないと、Copyメソッドのようにはいきません。指定したセルのみに転記されます。

要は、
 >dstSheet.Cells(i, 2).Value
で指定している、B列の1セルのみに転記されることになります。

想像するところ、右辺はA列からを指定していて(A列が空欄なので)、転記先のB列には空欄だけが転記されているのではないでしょうか?
その結果、
>データが解析ファイルのシート1に表示されません
となっているのではないかと推測します。
    • good
    • 0
この回答へのお礼

質問を投稿するにあたり、分かりやすくなるようにと本来のものとは別に書き換えたのがかえって悪かったと思っております。混乱させてしまい申し訳ございません。
頂いた内容をもとに一度自分で整理してみます。
お時間を取らせてしまい申し訳ございませんでした。

お礼日時:2020/12/15 17:27

こんにちは



ご質問文の文章の方を見ると
 >12行目 .csvデータ1のB2:B100
となっているけれど、一方で、コードの方は
 >srcSheet.Cells(2, 1).Resize(1, 100)
となっていますよ。

Cells(2, 1).Resize(1, 100)は、セル範囲に直すと「A2:CV2」ですけれど?
(どちらが正しいのかわかりませんが、とりあえず矛盾しているので)

また、文章が正しいとするなら、元データの「列」を転記先の「行」にセットするので、列と行の変換も必要ではないかと思われます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。文章が間違っておりました。正しくはB2:CV2です。
そのため、列と行の変換は必要ないと思われます。

列と行がごちゃまぜになっていました、失礼いたしました。

お礼日時:2020/12/15 17:05

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