アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。ワークシートが5つあり各シートにデータを転記するマクロを作成したいのですがワークシート名を変数にしてループ処理することはできるのでしょうか?

下記はワークシート名"H"にだけ転記するマクロを作成してみましたがこの後がわからず悩んでいます。よろしくお願いします。

Dim データ行 As Integer
Dim cnt As Integer
Dim データ数 As Integer
cnt = 4
データ行 = Cells(Rows.Count, 8).End(xlUp).Row
For データ数 = 11 To データ行

  If Worksheets("入力").Cells(データ数,1).Value= "2"Then

Worksheets("H").Cells(cnt, 6).Value = Worksheets("入力").Cells(データ数, 8).Value
Worksheets("H").Cells(cnt, 7).Value = Worksheets("入力").Cells(データ数, 9).Value
Worksheets("H").Cells(cnt, 8).Value = Worksheets("入力").Cells(データ数, 27).Value
Worksheets("H").Cells(cnt, 9).Value = Worksheets("入力").Cells(データ数, 19).Value
Worksheets("H").Cells(cnt, 10).Value = Worksheets("入力").Cells(データ数, 20).Value
Worksheets("H").Cells(cnt, 11).Value = Worksheets("入力").Cells(データ数, 21).Value
Worksheets("H").Cells(cnt, 12).Value = Worksheets("入力").Cells(データ数, 10).Value
Worksheets("H").Cells(cnt, 13).Value = Worksheets("入力").Cells(データ数, 11).Value
Worksheets("H").Cells(cnt, 14).Value = Worksheets("入力").Cells(データ数, 22).Value
Worksheets("H").Cells(cnt, 15).Value = Worksheets("入力").Cells(データ数, 23).Value
cnt = cnt + 1


End If

Next データ数

A 回答 (2件)

For Each の中で Worksheet 型のオブジェクト変数を使ってループ。


これだと対照ワークブックに含まれるすべてのシートが処理対象になる。

Dim targetSheet As Worksheet
For Each targetSheet In ThisWorkbook.Worksheets
 targetSheet.Cells(cnt, 6).Value = Worksheets("入力").Cells(データ数, 8).Value
 targetSheet.Cells(cnt, 7).Value = Worksheets("入力").Cells(データ数, 9).Value
 targetSheet.Cells(cnt, 8).Value = Worksheets("入力").Cells(データ数, 27).Value
 targetSheet.Cells(cnt, 9).Value = Worksheets("入力").Cells(データ数, 19).Value
 targetSheet.Cells(cnt, 10).Value = Worksheets("入力").Cells(データ数, 20).Value
 targetSheet.Cells(cnt, 11).Value = Worksheets("入力").Cells(データ数, 21).Value
 targetSheet.Cells(cnt, 12).Value = Worksheets("入力").Cells(データ数, 10).Value
 targetSheet.Cells(cnt, 13).Value = Worksheets("入力").Cells(データ数, 11).Value
 targetSheet.Cells(cnt, 14).Value = Worksheets("入力").Cells(データ数, 22).Value
 targetSheet.Cells(cnt, 15).Value = Worksheets("入力").Cells(データ数, 23).Value
Next

この回答への補足

説明不足でした。ワークシートが8個ありその内の5つを変数に格納したいのですがtargetSheetで対照とする方法もわかりません。お手数ですがよろしくお願いします。

補足日時:2009/02/11 14:26
    • good
    • 0

> 説明不足でした。

ワークシートが8個ありその内の5つを変数に格納したいのですがtargetSheetで対照とする方法もわかりません。お手数ですがよろしくお願いします。

であるならば、その状態や条件も提示していただかないと的確に回答できませんよ。

8個のシート中、5個の対象シートがどこにあるか決まっていない。or 決まっている。
5個の対象シートの名前には決まった位置に共通する文字があり、残り 3個のシートには無い。
とか、、、

対象 5シートの位置が一番左から 5つである場合は
For i = 1 to ThisWorkbook.Worksheets.Count
 Set targetSheet = ThisWorkbook.Worksheets(i)
 ' 処理いろいろ
Next

4番目から 5つであれば
For i = 4 To 8
 Set targetSheet = ThisWorkbook.Worksheets(i)
Next

対象シートのシート名の先頭が必ず "H-" で始まっており、対象外シートは別の文字から始まっているのであれば
For Each targetSheet In ThisWorkbook.Worksheets
 If Left(targetSheet.Name, 2) = "H-" Then
  ' 処理いろいろ
 End If
Next
とか

規則性がぜんぜん無いけれど 5シートの各名前が決まっているのなら、あらかじめ文字列型の配列に対象シートのシート名を入れておき、
For i = 0 To 4
 Set targetSheet = ThisWorkbook.Worksheets(targetNames(i))
Next
とか。
または 対象 5シートの名前を 9つめのシートのセル A1~A5 に書いておけるならば、そのセルの値を読み込んで targetSheet で参照させるとか。

ともかく情報が必要です。
    • good
    • 0
この回答へのお礼

対象シート名、数、文字位置も決まっておりますので最初に教授いただいた方法でやってみます。
お手数お掛けしました。ありがとうございました。

お礼日時:2009/02/13 09:15

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