(A列) (B列) (C列) ・・・・
(1行目) 参照Excel名 コード ・・・・・・・
(2行目) ①.xlsx 213423 ・・・・・・・
(3行目) 432153 ・・・・・・・
(4行目) 352582
(5行目) ②.xlsx 342213
(6行目) 482397
(7行目) ③.xlsx 584054
(8行目) ④.xlsx 482093
(9行目) 582857
(10行目) 582752
(11行目) 853875
~~~~~~~~~~~~~~~~~~~~~~~~
エクセルが上記の様な横長の表になっていて、
A列の”参照Excel名”が、A1セルに入力されています。
A2の”①.xlsx”をコピーして、その下のA3から次の値があるA5の一つ前(→A4)まで貼り付ける。
次の値のA5をコピーして、その下のA6から次の値があるA7の一つ前(→A6)まで貼り付ける。
次の値のA7をコピーして、その下に次の値があるのでコピーしない。
次の値のA8をコピーして、その下のA9から次の値の一つ前まで貼り付ける、但し、B列の最終行まで次の値がない場合は、B列の最終行と同じ行数まで貼り付ける。
というような流れでマクロを組みたいと思ったのですが、うまくいきません。
(空白の数は変動します。)
ちなみに、他の処理もありますが、以下のマクロを組んでいます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub 原料の在庫表をコピー()
Dim frWB As Workbook 'コピーするブック用
Dim toWB As Workbook '貼り付け先のブック用
Dim r As Long '貼り付け先セルの行番号を取得用
Dim cnt As Long 'コピーするブックのデータ件数を取得用
Dim Filename As String '棚卸データの名前用
Dim myData As String '棚卸データのエクセル取得用
Set toWB = ThisWorkbook 'このブックを代入
'Dirでブックを検索してmyFileへ代入
myData = Dir(toWB.Path & "\原料棚卸在庫表\*.xls?")
'myDataが無くなるまで処理を繰り返す
Do While myData <> ""
'処理内容
'検索したエクセルを開く
Set frWB = Workbooks.Open(toWB.Path & "\原料棚卸在庫表\" & myData)
'ActiceWorkbookオブジェクトのName情報を取得し、変数「FileName」に格納する
Filename = ActiveWorkbook.Name
'このブックの先頭シートのB列の一番上のセルの1つ下のセルから一番下のセルの行数をrに代入
r = toWB.Worksheets(1).Range("B" & Rows.Count).End(xlUp).Offset(1).Row
'コピーするブックの必要データ部分の選択、コピー
With frWB.Worksheets(3).Cells(9, 2).CurrentRegion
cnt = .Rows.Count - 1
.Offset(1).Resize(cnt).Copy
'値で貼り付け
toWB.Worksheets(1).Cells(r, "B").PasteSpecial xlPasteValues
'棚卸データ名を貼り付け
toWB.Worksheets(1).Cells(r, "A") = Filename
'コピーモードの終了
Application.CutCopyMode = False
End With
frWB.Close
myData = Dir()
Loop
'合計の行を削除
Dim rng As Range, i As Long
Set rng = Range("A1").CurrentRegion '表全体を変数rngに代入
'表の一番下から1行ずつ確認して表の2行目でストップする
For i = rng.Rows.Count To 2 Step -1
'表のi行2列目に合計とある行があった場合
If rng.Cells(i, 2).Value = "合計" Then
'そのi行を削除し、下のセルを上にシフトする
rng.Rows(i).Delete Shift:=xlShiftUp
End If
Next
End Sub
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
できれば、中盤↓の棚卸データ名を貼り付けのところで、コピペできればいいのですが・・・
'棚卸データ名を貼り付け
toWB.Worksheets(1).Cells(r, "A") = Filename
説明が上手くできずに申し訳ありませんが、
どなたかご一考いただけると幸いです。
よろしくお願いいたします。
No.3
- 回答日時:
>実行時エラーに
誤解を与えてしまったかも知れませんので 追記すると
With frWB.Worksheets(3).Cells(9, 2).CurrentRegion
cnt = .Rows.Count - 1
.Offset(1).Resize(cnt).Copy
必ず見出し行などで(複数行)あるのであれば、
frWB.Worksheets(3).Cells(9, 2).CurrentRegion.Rows.Countは2以上になり、cnt = .Rows.Count - 1 の時のcntの値は1以上ですね。
これなら問題はありませんが、
もし、Cells(9, 2).CurrentRegionが1行しかなかったらcntは0となり
Resize(0)は 1004エラーになると言う事です。
.Offset(1)から推測するに
そのような表組にはなっていないようですので忘れてください。
Qchan1962様
ありがとうございます!!!
'棚卸データ名を貼り付け
toWB.Worksheets(1).Cells(r, "A").Resize(cnt).Value = Filename
このコードで、上手くいきました(>_<))
会社で「マクロを勉強して、こういうのを作って」と、無茶ぶりされて、
本を一冊買って作ってみたのですが、ここだけできなくて・・・
誰もマクロ分かる人がいなくて、困っていたのですが、
一日で解決できるなんて、とても助かりました( ;∀;)
ありがとうございました!!
No.1
- 回答日時:
こんにちは
ご質問自体が良く分からずなのですが、
示されているコードで なさりたい事が出来ていない部分
>次の値のA7をコピーして、その下に次の値があるのでコピーしない。
をどうすれば良いかと言う事でしょうか
この場合は、A7の行が要らないと言う事と思いますので
コピペせずに次のファイルに行けばよい事になりますね
コードを読むと・・実行時エラーにならないかな?あ、見出しがあるのですね
With frWB.Worksheets(3).Cells(9, 2).CurrentRegion
cnt = .Rows.Count - 1
.Offset(1).Resize(cnt).Copy
ここで③.xlsxの場合、cntは1ですね 1行の場合はいらない・・で良いのなら、
With frWB.Worksheets(3).Cells(9, 2).CurrentRegion
cnt = .Rows.Count - 1
If cnt > 1 Then
.Offset(1).Resize(cnt).Copy
'値で貼り付け
toWB.Worksheets(1).Cells(r, "B").PasteSpecial xlPasteValues
'棚卸データ名を貼り付け
toWB.Worksheets(1).Cells(r, "A") = Filename
'コピーモードの終了
Application.CutCopyMode = False
End If
End With
とすれば ③.xlsx は出力(コピペ)されないと思います。
、、、必ず、合計行もあるのかな?削除していると言う事は・・
必ずあるなら、If cnt > 2 Then かな、、
もっとも合計行が必ずあるなら、
cnt = .Rows.Count - 2
If cnt > 1 Then
でも良いのか・・
全然的外れでコードに関係なく新たに示されている表のコピー方法を知りたいのかな・・ペースト先無いから違うと思いますが、、、
良く分からずで未検証なのであくまで参考程度でね
早速のご回答ありがとうございます!!
このサイトを使うのが初めてで、勝手がわかっていませんが、
補足を入れさせていただきました。
お時間ございましたら、ご確認ください。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
VBA 数式を最終行までコピー
Excel(エクセル)
-
-
4
マクロで最終行を取得してコピーしたい
Visual Basic(VBA)
-
5
B列の最終行までA列をオートフィル
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
8
マクロ 最終列をコピーして最終列の次の列に挿入する
Visual Basic(VBA)
-
9
VBA コピーを有効行までループをする方法
Excel(エクセル)
-
10
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
11
マクロで値がある列までコピー
Excel(エクセル)
-
12
エクセル マクロ オートフィルの終点の指定について
Excel(エクセル)
-
13
エクセルVBAで、値が入っている最終行の、右隣の値をコピーして、別のセルに貼り付けるコード
Excel(エクセル)
-
14
EXCELマクロで、シート間でのコピーペーストを繰り返す方法
Excel(エクセル)
-
15
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
16
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
17
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
18
Excel2000/VBA:値と書式のみ貼り付けたい。
Excel(エクセル)
-
19
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
20
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セル色なしの行一括削除
-
i=cells(Rows.Count, 1)とi=cel...
-
ExcelVBAを使って、値...
-
【Excel VBA】指定行以降をクリ...
-
連続する複数のセル値がすべて0...
-
Excelで指定した日付から過去の...
-
Excel VBA頭文字検索方法につい...
-
EXCELで変数をペーストしたい
-
エクセルVBAでコピーして順...
-
特定のセルが空白だったら、そ...
-
”戻り値”が変化したときに、マ...
-
範囲内で最大値を見つけ、その...
-
特定の文字を条件に行挿入とそ...
-
Excelのプルダウンで2列分の情...
-
クリックされたセルの位置を取...
-
マクロ 空白セルへの文字入力
-
DataGridViewで列、行、セルの選択
-
Excel ユーザーフォームをモー...
-
VBAの間違い教えて下さい
-
結合セルに名前をつけてマクロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定のセルが空白だったら、そ...
-
Excelで指定した日付から過去の...
-
【Excel VBA】指定行以降をクリ...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
【Excel】指定したセルの名前で...
-
Excelシートのあるセルから値を...
-
特定の文字を条件に行挿入とそ...
-
セル色なしの行一括削除
-
連続する複数のセル値がすべて0...
-
指定した条件で行セルを非表示...
-
vba 隣のセルに値がある行だけ...
-
Application.Matchで特定行の検索
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
EXCELのVBA-フィルタ抽出後の...
-
【VBA】指定したセルと同じ値で...
-
”戻り値”が変化したときに、マ...
おすすめ情報
投稿したら、一番上の表がズレてしまっていたので、サンプル画像を送ります。
分かりにくくて申し訳ありません。
一番上に入力した表は、無視してください。
マクロの流れは、
”原料棚卸在庫表”というフォルダの中に、いくつかExcelがあって、
そのExcelのシート3のデータ部分のみをコピーして、画像にあるExcelに貼り付け、
最終行が合計欄になっているので、一行削除し、
コピー元のExcelの名前をA列に表示する。
という工程を繰り返す。というような感じです。
このコードで不具合は起きていなくて、追加をしたいのです。
画像の方で、A2にエクセル名を入れるところまではできたのですが、
これを、A3~A14までA2と同じ名前が入るようにしたいのです。
(A3~A14)はデータ量によって、増えたり減ったりします。
Excelを一つずつコピペしているので、その段階で、A2に入力された
エクセル名を最終行までコピペするコードを入れられたら、
と思っています。お願いします