Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3123 / 13644 ツリー ←次へ | 前へ→

【64100】入力規則 リストの変数 たうりん 10/1/19(火) 1:16 質問[未読]
【64101】Re:入力規則 リストの変数 ichinose 10/1/19(火) 6:55 発言[未読]
【64103】Re:入力規則 リストの変数 たうりん 10/1/19(火) 12:22 質問[未読]
【64106】Re:入力規則 リストの変数 Jaka 10/1/19(火) 15:58 発言[未読]
【64109】Re:入力規則 リストの変数 たうりん 10/1/19(火) 19:24 お礼[未読]

【64100】入力規則 リストの変数
質問  たうりん  - 10/1/19(火) 1:16 -

引用なし
パスワード
   入力規則のリストを変数で入れる方法が分かりません。
どなたか教えて下さい。

Sub Macro2()
 Dim a As String
  a = Sheets("データ").Range("T65536").End(xlUp).Row  
  
  Range("B8").Select
  Selection.ClearContents
  With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:="=a"
  End With
  Range("B8").Select
End Sub

【64101】Re:入力規則 リストの変数
発言  ichinose  - 10/1/19(火) 6:55 -

引用なし
パスワード
   ▼たうりん さん:
おはようございます。


Sub Macro2()
  Dim a As String
  With Sheets("データ")
   a = .Range("t1", .Cells(.Rows.Count, "T").End(xlUp)).Address(, , , True)
   a = "=indirect(""" & a & """)"
  End With
  Range("B8").Select
  Selection.ClearContents
  With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:=a
  End With
  Range("B8").Select
End Sub


試してみてください

【64103】Re:入力規則 リストの変数
質問  たうりん  - 10/1/19(火) 12:22 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。
朝早くからありがとうございます。
上手く行きました。

しかし、理解できないところが (涙)
変数の範囲指定式がわかりません。
>a = .Range("t1", .Cells(.Rows.Count, "T").End(xlUp)).Address(, , , True)
.Cells(.Rows.Count, "T")→T列をカウントしているんですか?
.Address(, , , True)→この部分の意味は

ダブルコーテーションがなぜたくさん必要なのか?
>a = "=indirect(""" & a & """)"
ご面倒かけますがご教授お願いします。

【64106】Re:入力規則 リストの変数
発言  Jaka  - 10/1/19(火) 15:58 -

引用なし
パスワード
   ▼たうりん さん:
>朝早くからありがとうございます。
はは、ここの回答者の中には、なぜか早起き名人がいるんですよね。
私にはまねできそうにない事を普通にやっていらっしゃるので、
尊敬に値します。うる、うる。

>.Cells(.Rows.Count, "T")→T列をカウントしているんですか?
これだけ見てもあまり意味ないですから、その後に書かれてある
.End(xlUp)
に注目。

Rows.count については、Msgbox Rows.count とやってみれば答えが返ってきます。

これと同じ意味。
Range("T" & Rows.count)

>.Address(, , , True)→この部分の意味は
ヘルプでAddressを調べれば、Trueの意味がわかると思います。
何も書いていないところは省略しているだけです。
省略するとある特定のパターンと同じになる(これもヘルプに書いてあると思います。)

>ダブルコーテーションがなぜたくさん必要なのか?
>>a = "=indirect(""" & a & """)"
なんて説明したら良いのか...。

Wクォーテーションは、特別な意味があるので、

例えば、セルに「"あ"」と書き込みたい場合。

Cells(1,1).value = "あ" と、書くと「あ」の文字しか入りません。

Wクォーテーションも文字列であらわすと、

Msgbox """"

と4つつなげて、1個のクォーテーションとして扱われます。

だから、素直に書くと

Cells(1,2).value = """" & "あ" & """"

になります。
これだと、なんかかっこ悪い?と思うのでしょうか、続けて書きたくなります。

続けて書くと、

Cells(1,3).Value = """あ"""
となります。

>a = "=indirect(""" & a & """)"
を素直に書くと、

>a = "=indirect(" & """" & a & """" & ")"
となります。
こっちの方がわかりやすいし、書きやすいのに、
なぜか、私も含めカッコウつけたいのか、1度で書きたがります。
(でも、数式が長いときは、短い文字列を何個も作って、つなげて書きますけど。)
カッコウ付けか効率的なのか、実際わからないけど、私の場合はカッコウですね。
慣れてくれば、それなりにわかってはきますけど、やはり面倒ですね。

面倒なもので、

Dim WQo as string
WQo = """"
Cells(1).Value = WQo & "あ" & WQo

なんても書いたりもします。

【64109】Re:入力規則 リストの変数
お礼  たうりん  - 10/1/19(火) 19:24 -

引用なし
パスワード
   ▼Jaka さん:
ありがとうございます☆☆☆
大変勉強になりました。
一つの式にもいろんな書き方があるわけですね。
また機会があれば宜しくお願いします。

3123 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free