[[20250823123742]] 『VBA ワークシートが選択できません( ノД`)』(まるてて) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『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


また半平太さん!できました!
ありがとうございましたm(_ _)m
検索キーワードが悪かったのか、「Worksheets(CStr」なんて全く
見ませんでした。
VBA少し慣れてきましたが、まだまだです〜m(_ _)m
(まるてて) 2025/08/23(土) 14:00:12

 解決後にしゃしゃり出て恐縮です。

 > 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


xyzさんもまた返信もらってありがとうございます(;_;)
文字列と数値、基本的なところでしたね(;^_^A

頂いた例で、Set 〜、が感覚的に理解でき始めた気がします

またよろしくお願いします〜m(_ _)m
(まるてて) 2025/08/23(土) 16:09:47


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.