Excel VBA質問箱 IV

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

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


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

【51103】範囲の中に数値を一つだけ表示 チロル 07/8/28(火) 16:31 質問[未読]
【51105】Re:範囲の中に数値を一つだけ表示 けん 07/8/28(火) 17:25 回答[未読]
【51106】Re:範囲の中に数値を一つだけ表示 多摩川 07/8/28(火) 17:30 回答[未読]
【51112】Re:範囲の中に数値を一つだけ表示 多摩川 07/8/28(火) 17:46 発言[未読]
【51108】Re:範囲の中に数値を一つだけ表示 Jaka 07/8/28(火) 17:38 発言[未読]
【51111】Re:範囲の中に数値を一つだけ表示 Jaka 07/8/28(火) 17:44 発言[未読]
【51139】Re:範囲の中に数値を一つだけ表示 チロル 07/8/29(水) 17:57 お礼[未読]
【51282】Re:範囲の中に数値を一つだけ表示 チロル 07/9/10(月) 0:55 質問[未読]
【51283】Re:範囲の中に数値を一つだけ表示 多摩川 07/9/10(月) 8:24 発言[未読]
【51284】Re:範囲の中に数値を一つだけ表示 チロル 07/9/10(月) 9:32 質問[未読]
【51285】Re:範囲の中に数値を一つだけ表示 多摩川 07/9/10(月) 11:51 発言[未読]
【51290】Re:範囲の中に数値を一つだけ表示 チロル 07/9/10(月) 15:31 質問[未読]
【51295】Re:範囲の中に数値を一つだけ表示 多摩川 07/9/10(月) 16:34 回答[未読]

【51103】範囲の中に数値を一つだけ表示
質問  チロル  - 07/8/28(火) 16:31 -

引用なし
パスワード
   こんにちは。

やりたい事は、
A1〜C5の範囲の中で、一つのセルだけを数値を表示できるようにしたいと思います。
例えばA1に「1」と入力して、その後にC3に「1」と入力すると、
先に入力した「1」は消えるようにしたいのです。

背景色に合わせて文字色を変更するようにするのであれば、
条件付書式を使えば可能だとは思いますが、完全にクリアにしたいので、使えません。

また、リアルタイムで表示をしたいのでマクロも使えないと思っています。

こんなこと、可能なのでしょうか?
また、いい案のある方、アドバイスください。

よろしくお願いします。

【51105】Re:範囲の中に数値を一つだけ表示
回答  けん  - 07/8/28(火) 17:25 -

引用なし
パスワード
   こんな感じでしょうか。
作業するシートのオブジェクトモジュールに記述すればOKです。

Private Sub Worksheet_Change(ByVal Target As Range)
  
  Dim InputData   As Integer

  ' イベントを一時的に発生させなくする
  Application.EnableEvents = False

  InputData = Cells(Target.Row, Target.Column)
  Range("A1:C5").ClearContents
  Cells(Target.Row, Target.Column) = InputData
    
  ' イベントが発生する様にする
  Application.EnableEvents = True

End Sub

【51106】Re:範囲の中に数値を一つだけ表示
回答  多摩川  - 07/8/28(火) 17:30 -

引用なし
パスワード
   勉強がてら考えてみました。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim clvl As Variant
  If ActiveCell.Offset(-1, 0) <> "" Then
    clvl = ActiveCell.Offset(-1, 0)
    Cells.ClearContents
    ActiveCell.Offset(-1, 0) = clvl
  End If
End Sub

【51108】Re:範囲の中に数値を一つだけ表示
発言  Jaka  - 07/8/28(火) 17:38 -

引用なし
パスワード
   Private Sub Worksheet_Change(ByVal Target As Range)
Dim RG2, Sav As Variant
Set RG2 = Application.Intersect(Target, Range("a1:e5"))
If RG2 Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If IsEmpty(Target.Value) Then Exit Sub
Sav = Target.Value
Application.EnableEvents = False
Range("a1:e5").ClearContents
Target.Value = Sav
Application.EnableEvents = True
End Sub

【51111】Re:範囲の中に数値を一つだけ表示
発言  Jaka  - 07/8/28(火) 17:44 -

引用なし
パスワード
   >Dim RG2 as range, Sav As Variant
      ↑忘れました

【51112】Re:範囲の中に数値を一つだけ表示
発言  多摩川  - 07/8/28(火) 17:46 -

引用なし
パスワード
   範囲があるならば

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim clvl As Variant
  If Application.Intersect(Target, Range("A1:C5")) Is Nothing Then Exit Sub
  If Target.Offset(-1, 0) <> "" Then
    clvl = Target.Offset(-1, 0)
    Range("A1:C5").ClearContents
    Target.Offset(-1, 0) = clvl
  End If
End Sub

【51139】Re:範囲の中に数値を一つだけ表示
お礼  チロル  - 07/8/29(水) 17:57 -

引用なし
パスワード
   皆様、アドバイスありがとうございました。

今回の案件では多摩川様のコードが一番理想通りの動きをしたので、
そのコードを採用させていただきました。

他の方のコードも正常に動作し、大変勉強になりました。

このコードを足がかりとして、後のコードは自分で考えていきたいと思います。

また相談事の折にはよろしくお願いします。

ありがとうございました。

【51282】Re:範囲の中に数値を一つだけ表示
質問  チロル  - 07/9/10(月) 0:55 -

引用なし
パスワード
   先日はありがとうございました。
一つ目の課題はクリア出来たのですが、次の課題がどうしてもわかりません。

次の課題というのも前回と似たようなものなのですが、

前回は
 A1:C5の中に1を一つだけ表示する、
というコードをお願いしましたが、
今回は、
 A1:C5の中に1を一つだけ表示し、
 且つ、
 A6:C10の中に1を一つだけ表示する、
というものがほしいのです。

前回教えていただいた式を参考にして、
単純にIFを二つ入れればできるんじゃないかと考えたのですが、
コードの中身が理解できていないせいでどうもうまくいきません。


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim clvl As Variant
  
  If Application.Intersect(Target, Range("A1:C5")) Is Nothing Then Exit Sub
  If Target.Offset(-1, 0) <> "" Then
    clvl = Target.Offset(-1, 0)
    Range("A1:C5").ClearContents
    Target.Offset(-1, 0) = clvl
  End If
  
  
  If Application.Intersect(Target, Range("A6:C10")) Is Nothing Then Exit Sub
  If Target.Offset(-1, 0) <> "" Then
    clvl = Target.Offset(-1, 0)
    Range("A6:C10").ClearContents
    Target.Offset(-1, 0) = clvl
  End If
  
End Sub


出来れば今後のためにも自分で覚えていきたいので、
なにかヒントになるようなものを頂ければ幸いです。
よろしくお願いします。

【51283】Re:範囲の中に数値を一つだけ表示
発言  多摩川  - 07/9/10(月) 8:24 -

引用なし
パスワード
   ▼チロル さん:

>出来れば今後のためにも自分で覚えていきたいので、
>なにかヒントになるようなものを頂ければ幸いです。
>よろしくお願いします。
A列〜C列の範囲の中で、セルが1行目〜5行目及び6行目〜10行目の時に
操作を実行、とするといいと思います。

今回の場合、私ならSelect Caseを用いて条件分けをします。

【51284】Re:範囲の中に数値を一つだけ表示
質問  チロル  - 07/9/10(月) 9:32 -

引用なし
パスワード
   Select Caseを調べてみましたが、
元となるコードの意味を理解出来ていないので、
どうにもプログラミングが進みません。

>今回の場合、私ならSelect Caseを用いて条件分けをします。

大変申し訳ありませんが、Select Caseを用いたコードを教えていただけないでしょうか。
今後の勉強にさせて頂きたいと思います。

【51285】Re:範囲の中に数値を一つだけ表示
発言  多摩川  - 07/9/10(月) 11:51 -

引用なし
パスワード
   ▼チロル さん:
エラー判定がなってないですが、一応、動きます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim clvl As Variant
  If Application.Intersect(Target, Range("A:C")) Is Nothing Or _
        IsArray(Target) Or Target.Row = 1 Then Exit Sub
  If Target.Offset(-1, 0) <> "" Then
    clvl = Target.Offset(-1, 0)
    Select Case Target.Row
      Case 2 To 6
        Range("A1:C5").ClearContents
      Case 7 To 11
        Range("A6:C10").ClearContents
    End Select
    Target.Offset(-1, 0) = clvl
  End If
End Sub

【51290】Re:範囲の中に数値を一つだけ表示
質問  チロル  - 07/9/10(月) 15:31 -

引用なし
パスワード
   多摩川様、ありがとうございます。

それで、こちらの資料不足で本当に申し訳ありませんが、
部分的にコードの意味を教えてください。

>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  Dim clvl As Variant
>  If Application.Intersect(Target, Range("A:C")) Is Nothing Or _
>        IsArray(Target) Or Target.Row = 1 Then Exit Sub
>  If Target.Offset(-1, 0) <> "" Then
>    clvl = Target.Offset(-1, 0)
>    Select Case Target.Row
>      Case 2 To 6
>        Range("A1:C5").ClearContents
>      Case 7 To 11
>        Range("A6:C10").ClearContents
>    End Select
>    Target.Offset(-1, 0) = clvl
>  End If
>End Sub


>  If Application.Intersect(Target, Range("A:C")) Is Nothing Or _
>        IsArray(Target) Or Target.Row = 1 Then Exit Sub
この中の[Target] , [IsArray] がよくわかりません。

すみません。
よろしくお願い致します。

【51295】Re:範囲の中に数値を一つだけ表示
回答  多摩川  - 07/9/10(月) 16:34 -

引用なし
パスワード
   ▼チロル さん:
>この中の[Target] , [IsArray] がよくわかりません。
>
>すみません。
>よろしくお願い致します。

Targetは変数名です。
今回の場合、Target = ActiveCell です。

HELPより
IsArray 関数:変数が配列であるかどうかを調べ、結果をブール型 (Boolean) で返します。
複数のセルを選択した場合、前回のコードでは、エラーが発生するはずです。
これを回避するために追加しました。

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