HOME BBS A B C D E F G H
1


「BakuJAN活用例」の解・体・親・書

親愛なる貴方のために・・・え?誰?

6.ユーザーフォーム上から、セル範囲を指定

 ユーザーフォームのコントロールが、セル範囲のアドレスを必要とする場合があります。「数値を合計するセル範囲」、「文字装飾を行うセル範囲」、「印刷するセル範囲」などなど、モーダルのユーザーフォームが表示されている状態で、セル範囲を指定するときは[ RefEditコントロール ]を使います。

 [ RefEditコントロール ]で指定したセル範囲を元に、何かしらの処理を行うときは、範囲を示す値の使い方を工夫する必要があります。それは、[ RefEditコントロール ]でセル範囲を指定すると、一緒にワークシート名も、[ RefEditコントロール ]の[ Textプロパティ ]に含まれるためです。

例:[ RefEdit1.text ] は、 [ Sheet1!$A$6:$F$13 ] を返します。 

 一定のワークシートでしか範囲指定を行わないのならば、シート名の部分を固定して扱えば、さほど問題にはなりませんが、ユーザーが複数のワークシートにあるセル範囲を指定するようならば、[ RefEditコントロール ]が持つ値は、ワークシート名とセル範囲を分けて扱います。

  •  ★  [ RefEditコントロール ]で、セル範囲を指定して使う
  • 文字列(ここではワークシート名も含まれたセル範囲名)をシート名とセル範囲に分けるため、ワークシート関数の[ Find関数 ]を使っています。ワークシート名とセル範囲を示す文字列にある「!(アテンションマーク)」を探し文字列の先頭からの位置を求め、[ Lef関数 ]でワークシート名をあらわす文字までを分割している、かなりキツメの乳酸です。
     
     古いExcelのバージョンでは使えませんが、使っているバージョンが2000以上なら、すんなりと[ Split関数 ]で、1次元配列に分けたほうが良いですね。
  •  ★  区切り文字を指定して、文字列(セルアドレスの参照式)を分割して表示する
  • [ RefEditコントロール ]で指定したセルのアドレスは、シート名も含んだセルのフルアドレスになっていますので、コードの組み方によっては、その値を加工する必要があります。ここでは、ワークシート名とセルアドレスを接続している「!(アテンションマーク)」を使い、[ Split関数 ]で1次元配列に分け、それぞれをメッセージボックス内に表示します。

 

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Microsoft(R) Excel、Microsoft Visual Basicは米国Microsoft Corporationの米国およびその他の国における登録商標または商標で、Microsoft Corporationのガイドラインに従って画面写真を使用しています。