|
▼いちご さん:
こんばんは。
> ここまで,できると,さらに欲が出てきました。
> マウスでセルをクリックし,さらに,テクストボックス内でクリック
> すると,数字入力待ちのなります。ですが,繰り返し,いろいろなセル
> をクリックしていくと,テキストボックスの色が交互に白と黄色なります。
> もちろん,このとき,テキストボックスの色にかかわらず,数字入力待ち
> の状態のなっていまるのですが,できれば,数字入力待ちの時は黄色に
> なっていた方がいいのです。
う〜ん。ちょっと考えるのが億劫になってきました。
それに、今使ってるテキストボックス(ActiveXコントロール)って
ちょっと動作がかったるい(遅い)と思いませんか?
なんだかこのままActiveX方式でやるのは実用的ではないような気が
してきました。
提案しておいて何なんですけど
スミマセン。。
> アンケートの項目は,32項目あり,サンプル数は,240人分ぐらい
> なのですが,一人目の最後の項目の回答を入力し終わったら,続けて,
> 二人目の最初の項目を入力したいのですが,次のような表を例にして,
> 教えてください。
>
> A B C D E
> 1 ○○さん △△さん □□さん ☆☆さん
> 2 質問1 2 5 2
> 3 質問2 1 2 2
> 4 質問3 4 2 3
> 5 質問4 みかん りんご いちご
> 6 質問5 ねこ いぬ ねこ
>
> よろしくお願いします。
ふう。。
ActiveXを使わない方法を一緒に考えてみませんか?
たとえば以下のような方法はどうでしょう。
新規シートを挿入して、そこに元シートのデータだけをコピーして
ください。(シートモジュールのイベントコードはコピーしないため)
A B C D E
1 ○○さん △△さん □□さん ☆☆さん
2 質問1
3 質問2
4 質問3
5 質問4
6 質問5
:
32 質問31
33 質問32
このシートのイベントコードは以下のようなものとします。
------------------------------------------------------------
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ss As String
Dim i As Long, L As Long
Dim r As Range
If Target.Count > 1 Then Exit Sub
ss = CStr(Target.Value)
If IsNumeric(ss) Then
L = Len(ss)
ReDim v(1 To L, 0)
For i = 1 To L
v(i, 0) = Mid$(ss, i, 1)
Next
Application.EnableEvents = False
Target.Resize(L).Value = v
Set r = Target.Offset(L)
If r.Row > Me.UsedRange.Rows.Count Then
Me.Cells(2, r.Column + 1).Select
Else
r.Select
End If
Set r = Nothing
Application.EnableEvents = True
If Me.ScrollArea = "" Then
Set r = Me.UsedRange
Me.ScrollArea = Application. _
Intersect(r, r.Offset(1, 1)).Address
End If
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick( _
ByVal Target As Range, Cancel As Boolean)
'Cancel = True
Me.ScrollArea = ""
End Sub
------------------------------------------------------------
コピーしたら、シートに戻って、
[B2]セル(質問1の行)を選択して、このセルに
「214」
とタイプしてください。Enter を押すと、
A B C D E
1 ○○さん △△さん □□さん ☆☆さん
2 質問1 2
3 質問2 1
4 質問3 4
5 質問4
6 質問5
となるはずです。(数字1文字が1つのセルに分割転記されます)
アクティブセルが その列の 質問4 の行に移動しますから、
「みかん」Enter 「ねこ」Enter と入力してください。
A B C D E
1 ○○さん △△さん □□さん ☆☆さん
2 質問1 2
3 質問2 1
4 質問3 4
5 質問4 みかん
6 質問5 ねこ
最後の質問32 を入力し終わると、プログラムは自動的に
右隣の列の 2行目に 移動します。
ただし、入力間違いで、質問28から「52242」と打ち込むところを
間違って「522426」とタイプしたときも警告なしに 34行目に
「6」が入力されてしまいます。
ところが ScrollArea で 34行目には移動できないようになってい
るので、このままでは修正することができません。
そういうときは ScrollAreaをいったん解除します。
↑のサンプルコードでは、いずれかのセルをダブルクリックする
ことにより、すべてのセルが選択可能になるようになっています。
提示のサンプルデータですと、
数字1文字を入力する範囲が質問1〜質問3までの3セルしかない
ので、この方法は却って効率悪いかもしれないけれど、
実際は1文字の数字を連続入力する範囲がもっと多いということを
想定して組んでみたものです。
まるで発想を変えちゃいましたけど、どうもTextBox案は先行き
ゆき詰まりそうな気がしたものですから、あしからず。m(__)m
|
|