
「プロシージャが大きすぎます」と表示されてしまいました。
【やりたいこと】シート1から45まで、各々のスキルマップシートがあります。
各々のスキルマップの各項目ごとの小計評点を集計シートに転記させたいのです。
下記に、作成した標準モジュールを記載致します。
Option Explicit
Sub data_collect()
Worksheets("②集計").Range("C24").Value = Worksheets("1").Range("AJ1").Value
Worksheets("②集計").Range("C25").Value = Worksheets("2").Range("AJ1").Value
Worksheets("②集計").Range("C26").Value = Worksheets("3").Range("AJ1").Value
Worksheets("②集計").Range("C27").Value = Worksheets("4").Range("AJ1").Value
Worksheets("②集計").Range("C28").Value = Worksheets("5").Range("AJ1").Value
Worksheets("②集計").Range("C29").Value = Worksheets("6").Range("AJ1").Value
Worksheets("②集計").Range("C30").Value = Worksheets("7").Range("AJ1").Value
Worksheets("②集計").Range("C31").Value = Worksheets("8").Range("AJ1").Value
Worksheets("②集計").Range("C32").Value = Worksheets("9").Range("AJ1").Value
Worksheets("②集計").Range("C33").Value = Worksheets("10").Range("AJ1").Value
Worksheets("②集計").Range("C34").Value = Worksheets("11").Range("AJ1").Value
Worksheets("②集計").Range("C35").Value = Worksheets("12").Range("AJ1").Value
Worksheets("②集計").Range("C36").Value = Worksheets("13").Range("AJ1").Value
Worksheets("②集計").Range("C37").Value = Worksheets("14").Range("AJ1").Value
Worksheets("②集計").Range("C38").Value = Worksheets("15").Range("AJ1").Value
Worksheets("②集計").Range("C39").Value = Worksheets("16").Range("AJ1").Value
Worksheets("②集計").Range("C40").Value = Worksheets("17").Range("AJ1").Value
Worksheets("②集計").Range("C41").Value = Worksheets("18").Range("AJ1").Value
Worksheets("②集計").Range("C42").Value = Worksheets("19").Range("AJ1").Value
Worksheets("②集計").Range("C43").Value = Worksheets("20").Range("AJ1").Value
Worksheets("②集計").Range("C44").Value = Worksheets("21").Range("AJ1").Value
Worksheets("②集計").Range("C45").Value = Worksheets("22").Range("AJ1").Value
Worksheets("②集計").Range("C46").Value = Worksheets("23").Range("AJ1").Value
Worksheets("②集計").Range("C47").Value = Worksheets("24").Range("AJ1").Value
Worksheets("②集計").Range("C48").Value = Worksheets("25").Range("AJ1").Value
Worksheets("②集計").Range("D24").Value = Worksheets("1").Range("AI24").Value
Worksheets("②集計").Range("D25").Value = Worksheets("2").Range("AI24").Value
Worksheets("②集計").Range("D26").Value = Worksheets("3").Range("AI24").Value
Worksheets("②集計").Range("D27").Value = Worksheets("4").Range("AI24").Value
Worksheets("②集計").Range("D28").Value = Worksheets("5").Range("AI24").Value
Worksheets("②集計").Range("D29").Value = Worksheets("6").Range("AI24").Value
Worksheets("②集計").Range("D30").Value = Worksheets("7").Range("AI24").Value
Worksheets("②集計").Range("D31").Value = Worksheets("8").Range("AI24").Value
Worksheets("②集計").Range("D32").Value = Worksheets("9").Range("AI24").Value
Worksheets("②集計").Range("D33").Value = Worksheets("10").Range("AI24").Value
Worksheets("②集計").Range("D34").Value = Worksheets("11").Range("AI24").Value
.....
※各シートのセルADまで延々とつづくマクロを作成しました。
VBAの勉強不足は重々承知しております。もっと簡潔にできるのでしょうか。
ご教示いただけますと幸いです。

No.2ベストアンサー
- 回答日時:
こんにちは!
シート名が「1」から「45」までのシートは必ず存在する!という前提で・・・
Sub Sample1()
Dim i As Long
Dim sN As String
For i = 1 To 45
sN = i
With Worksheets("②集計").Cells(i + 23, "C")
.Value = Worksheets(sN).Range("AJ1")
.Offset(, 1) = Worksheets(sN).Range("AI24")
End With
Next i
End Sub
こんな感じではどうでしょうか?m(_ _)m
早々に教えて下さりありがとうございます! 頂いたVBAで、実行できました!知識不足で大変申し訳ないのですが、「With Worksheets("②集計").Cells(i + 23, "C")」 ←この部分は、どういう意味になるのでしょうか。。 また、②集計シートの E24セル~E68セル に「1~45」シートの AJ24 の数値を反映させたい場合、下記のように付け足していけば良いのでしょうか。 ※??の部分の意味が分かりません。
Sub Sample1()
Dim i As Long
Dim sN As String
For i = 1 To 45
sN = i
With Worksheets("②集計").Cells(i + 23, "C")
.Value = Worksheets(sN).Range("AJ1")
.Offset(, 1) = Worksheets(sN).Range("AI24")
With Worksheets("②集計").Cells(i + 23, "??")
.Value = Worksheets(sN).Range("AJ1")
.Offset(, 1) = Worksheets(sN).Range("AJ24")
End With
Next i
End Sub
No.5
- 回答日時:
各シートのAI24から左に4つの値を取得したら、次の目的行(AIn)に飛んで4つの値を取得ってのを繰り返すのでしょ?(画像の赤印を見る限り)
その際に目的の行ナンバーが固定であれば書き出した方が楽な気もしますけど?
とは言え2つ目の画像を老眼で見ると7つの値で1組になっているみたいですが、4つの値を列に対して順に入れていく訳でもないのでしょうか?
それとも元々が4つの値ではなく7つの値を取得するはずなのか?
画像の説明を箇条書きにせよ具体的に書かれた方が宜しいと思いました。
けどOfficeをぶっ壊した初級者なので疑問点だけ言って去っていきますけど。
No.4
- 回答日時:
No.2・3です。
投稿偽気づきました。
>※??の部分の意味が分かりません。
の件ですが、そのまま
>With Worksheets("②集計").Cells(i + 23, "C")
とC列のままです。
>.Offset(, 1)=***
としていますので、C列が基準で1列右側となり → D列
>.Offset(, 2) とすれば2列右側になるので、E列になります。
※ 当方のコードでOffsetの「行」の部分を省略していますが、丁寧に記載すれば
>.Offset(0, 1)
のようになります。
「Withステートメント」についてはネットで検索してみてください。m(_ _)m
No.3
- 回答日時:
No.2です。
>「With Worksheets("②集計").Cells(i + 23, "C")」 ←この部分は、どういう意味になるのでしょうか
For ~ Next で 1~45(回)ループさせるコードなので
>Worksheets("②集計").Cells(i + 23, "C")
の「i+23」 → 24 ~ 68 になりますね。
>Cells(行番号, 列番号) という表記になります。("C"はそのままC列 → "C" の代わりに 3 でも構いません)
すなわちC列24行目以降に順次、シート名「1」~「45」までの「AJ1」セルの値を代入!というコトになります。
※ シート名は文字列にしなければならないので、
>sN = i
とし、
> Worksheets(sN)
のようにしています。
尚、 Worksheets(i) としてしまうと
仮に Worksheets(1)の場合はシート見出しの一番左側のシートになってしまいます。
次に
>また、②集計シートの E24セル~E68セル に「1~45」シートの AJ24 の数値を・・・
お礼欄にある空白行に
>.Offset(, 2) = Worksheets(sN).Range("AJ24")
を追加すればいけると思います。
質問文内で一つ不明な点があります。
>※各シートのセルADまで延々とつづくマクロを作成しました。
とは列方向に関してもループが必要なのでしょうか?
質問文では行方向だけのループで済むはずなのですが。m(_ _)m
No.1
- 回答日時:
こんにちは
ほぼ同じ処理の繰り返しと思いますので、ループで処理すれば宜しそうです。
(For ~~ Next など)
例えば、最初のAJ1セルの値をコピーする部分であれば
Dim t As Range, i As Long
Set t = Worksheets("②集計").Range("C24")
For i = 1 To 25
t.Offset(, i - 1).Value = Worksheets(i & "").Range("AJ1").Value
Next i
みたいな感じでもできると思います。
参照先に規則性があるなら、二重ループにすればほとんど上記の記述で終わると思います。
規則性が無い場合でも、参照先のセル位置を配列などに定義しておくことで、同様の処理を行うことも可能です。(すこしだけ複雑になりますが)
あるいは、シート名の一覧を別に作成しておいて、それを利用して値を参照する関数式を作成することもできそうに思われます。
関数式は一度設定しておけば自動的に値が更新されるので、マクロを実行する手間が不要になります。
早々に教えてくださりありがとうございます。まだ、私の知識不足でループやらなにやら理解に至らず申し訳ないです。理解できるように、勉強します!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
先着1,000名様に1,000円分もらえる!
教えて!gooから感謝をこめて電子書籍1,000円分プレゼント
-
Excel VBA Forの使い方について 独学でやっていますので不格好ご了承下さい。 写真を添付し
Visual Basic(VBA)
-
VBA本体の参照の仕方が分かりません( ノД`)
Visual Basic(VBA)
-
VBA基本構文の作り方 謎のエラー
Visual Basic(VBA)
-
4
マクロ超初心者です。
Visual Basic(VBA)
-
5
VBAのコマンド教えてください
Visual Basic(VBA)
-
6
エクセルのユーザーフォーム作成
Visual Basic(VBA)
-
7
ワイルドカードの入力を禁止したい。
Visual Basic(VBA)
-
8
VBA ユーザーフォームでエラーを出したい
Visual Basic(VBA)
-
9
VBA基本構文の作り方 エラー・・・???
Visual Basic(VBA)
-
10
VBA繰り返し ワイルドカード
Visual Basic(VBA)
-
11
VBA基本構文の作り方 FOr回してますが、、
Visual Basic(VBA)
-
12
VBA構文でコンパイルエラーの原因を教えてください。
Visual Basic(VBA)
-
13
Excel VBA でFunctionが呼び出せません
Visual Basic(VBA)
-
14
CSVファイルのデータを2次元配列で読み込む際、どんな手段を取りますか?
Visual Basic(VBA)
-
15
VBAでざっくりとした質問になります。
Visual Basic(VBA)
-
16
マクロ:テキストフィアルをexcelに読み込む
Visual Basic(VBA)
-
17
はじめまして VBA初心者です。
Visual Basic(VBA)
-
18
VBAの簡単のようで出来ないことで困っております。
Visual Basic(VBA)
-
19
マクロが組めないので助けてください。
Excel(エクセル)
-
20
Excel VBA 実行中に一瞬フリーズします。たとえ 一瞬" でも困る事情があります。"
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
エクセルで離れたセルを離れた...
-
5
曜日別の売上平均値をだしたい...
-
6
①as a "cat" ②as "a cat" どっ...
-
7
WORDで先頭ページを追加するには?
-
8
データを任意の場所【台帳】へ...
-
9
60進法で複数セルの足し算、引...
-
10
エクセルで作った書類に、パン...
-
11
エクセル 保護とグループ化に...
-
12
エクセルシートを重ねることは...
-
13
リース初心者です 利子率の計...
-
14
Excel2010の並べ替えで行の高さ...
-
15
Caps Lockキーの解除
-
16
EXCELの[データ]→[外部データの...
-
17
EXCEL関数 上四桁目を3捨4入
-
18
エクセルデータをワードへ反映...
-
19
Excelのオートカルクの結果をコ...
-
20
中学 の学年別、エクセル形式...
おすすめ情報
この「①集計」シートにマクロで「1~45」まである数値を転記したいのです。
文章力が無く、言葉足らずですみません。
行方向だけのループです!
また、丁寧に親切に分かりやすく説明してくださり、とても助かりました! また、理解できました! もっともっとVBAコードを勉強したいと思います☺️