プロが教える店舗&オフィスのセキュリティ対策術

教えてください。

エクセルで、別のシートの値をまとめようと思っています。
コンボボックスを使って、各シートから必要な値を取得したいです。

各シート名は、”201801”、”201712”、”201711”、”201710”・・・ と月ごとの実績が入っています。*4枚目のシートから実績シートです。

A列    B列    C列    D列  ・・・
店舗No  店舗名   売上   人数  ・・・
1    ○○
2    ○○
3    ○○
・    ・
・    ・

こんな感じで各月のシートは、店舗ごとの実績がまとまっています。

1つのシート(”実績推移”)で、
A列    B列    C列    D列  ・・・
店舗No  店舗名   201801 201712  ・・・
1    ○○
2    ○○
3    ○○
・    ・
のように、項目(売上げなど、)ごとにコンボボックスを使って管理したいです。

Private Sub ComboBox3_Change()
Dim lRow As Long    '最終行
Dim listN As Long   'コンボボックスのインデックスNo
Dim s1 As Long    'シート数
Dim shN As String   'シート名前

With Worksheets("実績推移")
lRow = Cells(Rows.Count, 2).End(xlUp).Row
listN = ComboBox3.ListIndex
s1 = Worksheets.Count
shN = Worksheets(s1).Name
End With

For s1 = 4 To s1
Worksheets("実績推移").Range(Cells(4, s1 - 1), Cells(lRow, s1 - 1)).Value = _
Worksheets(shN).Range(Cells(2, listN + 3), Cells(lRow - 2, listN + 3)).Value
Next

End sub

最後のところで、エラーとなります。
型も、Cellsの値も間違っては稲井と思うのですが、解決できません。

何卒よろしくお願い致します。

A 回答 (1件)

単に、 Cells(~ とするとその場合はActiveになっているSheetのセルを指します。


それにFor~Nextのループ内で書き込むSheetを変える必要があるのではないでしょうか?

一案ですが検証はしてません。

Private Sub ComboBox3_Change()
Dim lRow As Long '最終行
Dim listN As Long 'コンボボックスのインデックスNo
Dim s1 As Long 'シートのカウンター変数
Dim s As Long 'Sheet用インデックス変数
Dim shN As String 'シート名前

With Worksheets("実績推移")
lRow = Cells(Rows.Count, 2).End(xlUp).Row
listN = ComboBox3.ListIndex
s1 = Worksheets.Count

For s = 4 To s1
shN = Worksheets(s).Name
.Range(.Cells(4, s - 1), .Cells(lRow, s - 1)).Value = _
Worksheets(shN).Range(Worksheets(shN).Cells(2, listN + 3), Worksheets(shN).Cells(lRow - 2, listN + 3)).Value
Next

End With

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
無事に思い通りの動作になりました!!

Csll(~  の場合は、そのシートをactiveにする必要があったのですね。
Rangeの前に、WorkSheets(shN).で十分と思い込んでいました。
その後の Range(~  にも ”Worksheets(shN).” が必要だったとは。

For ~
の後に shN = ・・・  を持ってくるのも、全く気づきませんでした。

いい勉強になりました!!

ありがとうございます。

お礼日時:2018/03/06 01:37

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