Excel VBA質問箱 IV

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

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


21926 / 76738 ←次へ | 前へ→

【60199】Re:数字キーだけで,セルに数値を入力
発言  kanabun  - 09/2/4(水) 0:40 -

引用なし
パスワード
   ▼いちご さん:
こんばんは。

>  ここまで,できると,さらに欲が出てきました。
> マウスでセルをクリックし,さらに,テクストボックス内でクリック
> すると,数字入力待ちのなります。ですが,繰り返し,いろいろなセル
> をクリックしていくと,テキストボックスの色が交互に白と黄色なります。
> もちろん,このとき,テキストボックスの色にかかわらず,数字入力待ち
> の状態のなっていまるのですが,できれば,数字入力待ちの時は黄色に
> なっていた方がいいのです。

う〜ん。ちょっと考えるのが億劫になってきました。

それに、今使ってるテキストボックス(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
0 hits

【60174】数字キーだけで,セルに数値を入力 いちご 09/2/1(日) 20:57 質問
【60175】Re:数字キーだけで,セルに数値を入力 kanabun 09/2/2(月) 0:13 発言
【60185】Re:数字キーだけで,セルに数値を入力 いちご 09/2/2(月) 20:30 お礼
【60186】Re:数字キーだけで,セルに数値を入力 kanabun 09/2/2(月) 20:42 発言
【60187】Re:数字キーだけで,セルに数値を入力 いちご 09/2/3(火) 4:18 お礼
【60188】Re:数字キーだけで,セルに数値を入力 kanabun 09/2/3(火) 10:02 発言
【60197】Re:数字キーだけで,セルに数値を入力 いちご 09/2/3(火) 20:44 質問
【60199】Re:数字キーだけで,セルに数値を入力 kanabun 09/2/4(水) 0:40 発言
【60217】Re:数字キーだけで,セルに数値を入力 いちご 09/2/4(水) 21:20 お礼
【60218】Re:数字キーだけで,セルに数値を入力 kanabun 09/2/4(水) 21:46 発言
【60246】Re:数字キーだけで,セルに数値を入力 いちご 09/2/5(木) 20:04 お礼

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