『VBA ワークシートが選択できません( ノД`)』(まるてて)
あるブックで「一覧」「2507」「2508」「2509」というシートがあり、「一覧」シートのB2セルに2508と入力してからマクロ実行し下記のような処理をしたいのですが、「2508」シートを選択してくれません。
色々調べて試しましたがうまくいきませんでした・・・
どこがいけないか教えてもらえませんでしょうかm(_ _)m
Dim KS, As Worksheet
Worksheets("一覧").Select Set KS = Cells(2, 2) KS.Select Range("B3").Copy Worksheets("一覧").Select Range("S4").PasteSpecial Paste:=xlPasteValues
keikakutate:
Set ks = ActiveSheet ks.Select ・ ・ ・ ・ ・
< 使用 Excel:Excel2019、使用 OS:Windows10 >
> Dim KS, As Worksheet > > Worksheets("一覧").Select > Set KS = Cells(2, 2) > KS.Select
そこらは、こうすべきかも ↓ Dim KS As Worksheet
Worksheets("一覧").Select Set KS = Worksheets(CStr(Cells(2, 2))) KS.Select
(半平太) 2025/08/23(土) 13:02:34
解決後にしゃしゃり出て恐縮です。
> Worksheets(CStr」なんて全く見ませんでした。 意味をしっかり押さえておくことが大切です。
B2セルの値が文字列であれば問題発生しませんが、 もし数値であれば、CStr関数を使って文字列にしたあとで、 その文字列のシートを変数にセットする必要があるのです。 安全を見た配慮ということです。
なぜ文字列にする必要があるかというと、仮にセルに数値の10が入っていたとすると、 Worksheets(10) は、左から10番目のシートという意味になってしまう。 Worksheets("10")とすることで、10という名前のシートということになるわけです。
============================= 以下は混乱を招くかもしれませんが、解決後に「追記せずにおれない」テーマです。 できるだけSelectは使わない書き方にするとよいですよ。
例えば。 Sub test() Dim ws As Worksheet Dim ws2 As Worksheet
Set ws = Worksheets("一覧") Set ws2 = Worksheets(CStr(ws.Range("B2").Value))
ws2.Range("B3").Copy ws.Range("S4").PasteSpecial Paste:=xlPasteValues End Sub
(xyz) 2025/08/23(土) 14:33:23
頂いた例で、Set 〜、が感覚的に理解でき始めた気がします
またよろしくお願いします〜m(_ _)m
(まるてて) 2025/08/23(土) 16:09:47
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.