
集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付けたい。
途中まで書いたコードで恐縮ですが修正点を教えていただけませんでしょうか?
①A列コードと一致するシート名を検索して貼り付けできない
②データ部分3行目から10行目の指定ができない
・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub TEST1()
'2つ目のシートから最終シートまでループ
For i = 2 To Sheets.Count
'データ部分のみを、集計シートにコピー
With Sheets(i).Range("A3").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Copy Sheets("集計").Cells
(Rows.Count, "A").End(xlUp).Offset(1, 0)
End With
Next
End Sub
よろしくお願い致します。

No.4ベストアンサー
- 回答日時:
#3です
同じ扱いにするようなコードもありますが
この場合は、シート名を比較しますので For i = 2 To Sheets.Count が必要になります
サンプルを実行しながら確認してみてください
Sub sample()
Dim keyCell As Range
Dim i As Integer
Set keyCell = Worksheets("集計").Range("A3")
Do While keyCell.Text <> ""
For i = 2 To Sheets.Count
With Worksheets(i)
If LCase(StrConv(.Name, vbNarrow)) = LCase(StrConv(keyCell.Text, vbNarrow)) Then
.Range("A3").Resize(8, .Range("A3").CurrentRegion.Columns.Count).Copy keyCell
Exit For
End If
End With
Next
Set keyCell = keyCell.End(xlDown)
Loop
End Sub
サンプルの場合、半角全角を半角として、更に大文字小文字を小文字として比較していますので
例えばAの値が Sheet2 で シート名が ShEet2 でも一致して コピペされます。
No.3
- 回答日時:
>実行したところ反応がありませんでした?
数値ですね。。。keyCell.Value をkeyCell.Text に変更してみてください
(2か所)
また、
>一致するシート名 を前提にしていますが
シート名と集計シートA列コードの値はあっていますか?
半角だったり全角だったりしませんか?
半角全角は同じではありません。また、半角スペースなどの混入も確かめてください
同じ扱いにするようなコードもありますが、取り敢えず同じではないので
書き加えていません
コードの説明
コード内ではシートが無い場合、On Error Resume Next でエラーを飛ばして継続するようにしています(他のエラーでも)
なので何も無かったような結果になったと思います。
デバッグする場合、
一時的にOn Error Resume Next をコメントとして実行するとエラーが
表示され止まります。
デバッグを選び、keyCell.Valueのにカーソルを重ねると値が確認できると思います。
エラーが出た場合、エラー№と止まったコードをお知らせください
No.2
- 回答日時:
こんばんは
>修正点を教えていただけませんでしょうか?
A列コードの取得して比較する部分が必要かと
また範囲については、行数が決まっているのなら、定数で良いかと
カラム方向は不明なので・・・Columns.Countとかで取得する事が出来るかも
貼り付ける位置もシート名が書かれているA列該当セルで良さそうです
A列コードと一致するシート名がある場合で図のような場合、
ブック内のシートを調べる必要は乱暴に考えると無いと思います
やり方は色々考えられますが、こんな感じでどうでしょう
コードを書き替える時は少し苦労しそうかな・・
Sub test()
Dim keyCell As Range
Set keyCell = Worksheets("集計").Range("A3")
Do While keyCell.Value <> ""
On Error Resume Next
With Worksheets(keyCell.Value).Range("A3")
.Resize(8, .CurrentRegion.Columns.Count).Copy keyCell
End With
Set keyCell = keyCell.End(xlDown)
Loop
End Sub
少し乱暴かも知れませんが、あくまで参考図とご質問に沿った場合なので
参考程度で
No.1
- 回答日時:
こんにちは
ご質問の文章の内容と、ご提示のコードに関連性が見られないので、何をなさりたいのかよくわかりませんけれど・・
(図もあまりよく見えないので、正確には理解できませんけれど・・)
文章の方を正とするなら・・
1)集計シートのA列を8行おき(←固定で良いのか不明)に読んで
2)その値と同じシートがあるかチェック
3)シートがあれば3~10行を(集計シートの)同じ行から8行にコピペ
(シートが無い場合については、記載が無いのでどうするのか不明)
という手順にする必要があります。
一方でご提示のコードは
・シートをループしている
・最終行までを取得している
・CurrentRegionとしているが、B:Dというのは列固定ではないのか?
・貼り付け先も「集計シート」最下行となっている
(多分、2シート目からオーバーフローしてエラーになりそう)
などなど、ご質問文とはまったく異なる内容になっているように思われます。
考え方は全く変わりますけれど・・
もしも、「集計シート」が文字通りの集計用で、各個別シートの内容を反映すれば良いだけのものであるのなら、集計シートに関数で参照式を設定しておけば済むことのようにも思われます。
そうすることで、マクロを実行せずとも、各シートに入力した内容は「集計シート」に即時に反映されるようになると思いますけれど・・
ただし、「集計シート」のフォーマットが必ずA列の8行おきにシート名が記載されているなどの条件が固定である必要はあります。
また、シート名をセルから参照する形式になるので、INDIRECT関数の利用になってしまうという欠点はありますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー1004「Select メソ...
-
XL:BeforeDoubleClickが動かない
-
Excel VBA マクロ シートコピー
-
vbaでworksheetfunctionでの複...
-
Excel チェックボックスにチェ...
-
Excelマクロのエラーを解決した...
-
ExcelVBA シート名を複数セルか...
-
【Excel VBA】全シートのデータ...
-
ExcelVBA:複数の特定のグラフ...
-
ワークシートを追加したときの...
-
VBAで同じシート名のコピー時は...
-
Excel VBA シートを追加後に余...
-
エクセルVBA 別シートからのコ...
-
【Excel VBA】書き込み先のシー...
-
SheetsクラスのSelectメソッド...
-
エクセルVBAでダブルクリックを...
-
VBA 指定した回数分、別シート...
-
Excel VBAシートの色を一気に変...
-
Excel VBAでの全ワークシート...
-
【VBA】色のついたシート名を取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報