
(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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBA シート比較し〇×判定 1 2021/11/19 11:49
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
- Visual Basic(VBA) 転記先VBA 一致しているセルがコピーされない 5 2021/11/15 17:23
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) クリップボードに貼付している文字列が、マクロで別ブックへ転記すると、消えてしまう 1 2023/10/15 13:36
- Excel(エクセル) マクロを修正できないものか、統合シートについて 3 2021/12/07 09:26
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
繰り返し1行~28行までを順順にコピーする方法
Visual Basic(VBA)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
6
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
7
特定の文字が入ってる行まで繰り返す
Excel(エクセル)
-
8
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
9
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
10
vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002
Visual Basic(VBA)
-
11
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
12
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
13
VBAで文字列を数値に変換したい
Excel(エクセル)
-
14
VBA コピーを有効行までループをする方法
Excel(エクセル)
-
15
VBAで、離れた複数の列に対して処理を施すには?
Visual Basic(VBA)
-
16
EXCELのVBA-フィルタ抽出後のセル選択方法
Visual Basic(VBA)
-
17
エクセル 重複 隣の列 一番上だけの数値を残す VBA
Excel(エクセル)
-
18
エクセルの関数 ENTERを押さないと反映されない。
Excel(エクセル)
-
19
マクロの「1列おきに貼り付け処理を行う方法」を知りたいです。
Excel(エクセル)
-
20
【Excel VBA】 B列に特定の文字列があった場合にA列の値を変更する
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで指定した日付から過去の...
-
ExcelVBAを使って、値...
-
DataGridViewの各セル幅を自由...
-
VBAでセル同士を比較して色付け
-
Excel VBA、 別ブックの最終行...
-
特定のセルが空白だったら、そ...
-
エクセルvbaで、別シートの最下...
-
VBAでセルをクリックする回...
-
【Excel VBA】指定行以降をクリ...
-
【VBA】シート上の複数のチェッ...
-
Excel vbaについて知恵もしくは...
-
DataGridViewで列、行、セルの選択
-
Excel VBAで、 ヘッダーへのセ...
-
【VBA】指定したセルと同じ値で...
-
VBA ユーザーフォーム ボタンク...
-
スプレッドシートの数値列に対...
-
i=cells(Rows.Count, 1)とi=cel...
-
結合セルを含む列の非表示方法
-
Excel VBA 計算式を代入するには?
-
ExcelのVBAで数字と文字列をマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
エクセルvbaで、別シートの最下...
-
特定のセルが空白だったら、そ...
-
VBA実行後に元のセルに戻りたい
-
【Excel VBA】指定行以降をクリ...
-
任意フォルダから画像をすべて...
-
【Excel】指定したセルの名前で...
-
VBAでセルをクリックする回...
-
【VBA】シート上の複数のチェッ...
-
EXCELのVBA-フィルタ抽出後の...
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
”戻り値”が変化したときに、マ...
-
ExcelのVBAで数字と文字列をマ...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBA マクロ ある列の最終...
-
Excel VBA、 別ブックの最終行...
おすすめ情報
投稿したら、一番上の表がズレてしまっていたので、サンプル画像を送ります。
分かりにくくて申し訳ありません。
一番上に入力した表は、無視してください。
マクロの流れは、
”原料棚卸在庫表”というフォルダの中に、いくつかExcelがあって、
そのExcelのシート3のデータ部分のみをコピーして、画像にあるExcelに貼り付け、
最終行が合計欄になっているので、一行削除し、
コピー元のExcelの名前をA列に表示する。
という工程を繰り返す。というような感じです。
このコードで不具合は起きていなくて、追加をしたいのです。
画像の方で、A2にエクセル名を入れるところまではできたのですが、
これを、A3~A14までA2と同じ名前が入るようにしたいのです。
(A3~A14)はデータ量によって、増えたり減ったりします。
Excelを一つずつコピペしているので、その段階で、A2に入力された
エクセル名を最終行までコピペするコードを入れられたら、
と思っています。お願いします