Excel VBA質問箱 IV

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

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


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

【9207】セルに入力された値によって、セルの書式を変えたいのですが… 猛虎襲来 03/11/22(土) 23:35 質問
【9210】Re:セルに入力された値によって、セルの書式... ぴかる 03/11/23(日) 18:25 回答
【9212】Re:セルに入力された値によって、セルの書式... 猛虎襲来 03/11/24(月) 0:27 質問
【9214】Re:セルに入力された値によって、セルの書式... ぴかる 03/11/24(月) 8:47 発言
【9215】Re:セルに入力された値によって、セルの書式... りん 03/11/24(月) 9:15 発言
【9225】Re:セルに入力された値によって、セルの書式... 猛虎襲来 03/11/24(月) 23:02 質問
【9228】Re:セルに入力された値によって、セルの書式... ぴかる 03/11/25(火) 9:02 発言
【9230】Re:セルに入力された値によって、セルの書式... でれすけ 03/11/25(火) 11:05 発言
【9248】できました!ありがとうございます。 猛虎襲来 03/11/25(火) 21:47 お礼

【9207】セルに入力された値によって、セルの書式...
質問  猛虎襲来 E-MAIL  - 03/11/22(土) 23:35 -

引用なし
パスワード
   エクセル97です
ある陸上競技会の集計表を作っています。
一つの行で、列Aには選手名、列Bにその人が参加する種目、E列にその記録が記録するようにしています。
種目によって記録の表し方が異なるので、
列Bに、「高跳び」を表す 高 が入力された時は、その行のE列には、整数を入力・表示する。
列Bに、「ハードル」を表す 障 が入力された時は、その行のE列には、小数点以下2桁まで表示する。
列Bに、「10000m」を表す 万 が入力された時は、その行のE列には、文字列表示する。
という書式設定をしたいのですが、どうしたらよいでしょうか?

【9210】Re:セルに入力された値によって、セルの書...
回答  ぴかる  - 03/11/23(日) 18:25 -

引用なし
パスワード
   猛虎襲来さん、こんにちは。

こんなんでどうですか?。該当シートモジュールにコピペして、お試し下さい。

Private Sub Worksheet_Change(ByVal Target As Range)

  If Target.Column = 2 Then
    If Target.Value = "高" Then
      With Cells(Target.Row, 5)
        .NumberFormatLocal = "0_ "
        .Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="0", Formula2:="250"
      End With
    ElseIf Target.Value = "障" Then
      With Cells(Target.Row, 5)
        .Validation.Delete
        .NumberFormatLocal = "0.00_ "
      End With
    ElseIf Target.Value = "万" Then
      With Cells(Target.Row, 5)
        .Validation.Delete
        .NumberFormatLocal = "@"
      End With
    End If
   End If

End Sub

【9212】Re:セルに入力された値によって、セルの書...
質問  猛虎襲来 E-MAIL  - 03/11/24(月) 0:27 -

引用なし
パスワード
   ぴかる さん、ありがとうございました。
しかし、残念ながらうまくいきませんでした。
ヘルプで Target の使い方を調べようとしましたが、 target というものが無いようなコメントがでました。
もしかしたら、エクセル97にはないのでしょうか?

【9214】Re:セルに入力された値によって、セルの書...
発言  ぴかる  - 03/11/24(月) 8:47 -

引用なし
パスワード
   猛虎襲来さん、こんにちは。

>しかし、残念ながらうまくいきませんでした。
どううまくいかんかったですか?。すんませんが、具体的にお願いします。
シートモジュールにマクロを貼り付けて頂けたでしょうか?。

>ヘルプで Target の使い方を調べようとしましたが、 target というものが無いようなコメントがでました。
ほんまですね。ヘルプにありませんね。
ターゲット=今、選択した部分 こんな雰囲気で自分はこんな感じで納得しています。
シートモジュールの[Target.Value] = 標準モジュールの[ActiveCell.Value]
こんな感じなら、分かりやすいかな。でも、↑は間違いかもしれません。
そんときは、どなた様かご指摘願います。

>もしかしたら、エクセル97にはないのでしょうか?
多分、あるはずです。これがないと、シートモジュールではなんも出来ませんから・・・。

【9215】Re:セルに入力された値によって、セルの書...
発言  りん E-MAIL  - 03/11/24(月) 9:15 -

引用なし
パスワード
   ぴかる さん、猛虎襲来さん、おはようございます。

>こんな感じなら、分かりやすいかな。でも、↑は間違いかもしれません。
>そんときは、どなた様かご指摘願います。
  Changeイベントの場合は、Target:変更されたセル
  SelectionChangeイベントの場合は、現在選択されたセル(Selection)

>>もしかしたら、エクセル97にはないのでしょうか?
>多分、あるはずです。これがないと、シートモジュールではなんも出来ませんから・・・。
TargetはSelectionやActiveCellと違って、ただの引数なので、単体でヘルプには載っていません。

Worksheetのイベント説明より。
引用開始=======
Change イベント
ワークシートのセルが、ユーザーまたは外部リンクで変更されたときに発生します。
構文
Private Sub Worksheet_Change(ByVal Target As Range)
Target 変更された範囲が渡されます。複数のセルを渡すことができます。

SelectionChange イベント
ワークシートで選択範囲を変更したときに発生します。
構文
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target  新しい選択範囲を指定します。
引用終了=======

ぴかるさんもおっしゃっている通り、標準モジュール(Module)にマクロを書いても実行されません。
シートのイベントを設定するときは、マクロを乗せたいシートのタブ(名前のところ)を右クリックして、コードの表示。そこにぴかるさんのコードをコピペするといいです。または、ThisworkbookのSheetChangeでシートごとにイベントを分岐して行う方法もあります。
97の場合は Sub WorkSheet_SelectionChangeというのがまず表示されるので、それを消去してから貼り付けるといいでしょう。

【9225】Re:セルに入力された値によって、セルの書...
質問  猛虎襲来 E-MAIL  - 03/11/24(月) 23:02 -

引用なし
パスワード
   ぴかるさん、りんさん、ありがとうございます。
説明が悪くてすみません。
シートモジュールにマクロを貼り付けて、一度別のシートをactiveにしてそのシートに戻ってきたのですが、小数点以下2桁で表示されるはずのセルに数を入力しても、そのままです。
なぜでしょう?
例えばですね、18と入力した場合、18.00となって欲しいのですが、18で表示されています。
それから、Targetですが、なんとなくですが理解できました。
勉強していきたいです。

【9228】Re:セルに入力された値によって、セルの書...
発言  ぴかる  - 03/11/25(火) 9:02 -

引用なし
パスワード
   猛虎襲来さん、りんさん、おはようございます。

>シートモジュールにマクロを貼り付けて、一度別のシートをactiveにしてそのシートに戻ってきたのですが、小数点以下2桁で表示されるはずのセルに数を入力しても、そのままです。
>なぜでしょう?
>例えばですね、18と入力した場合、18.00となって欲しいのですが、18で表示されています。
ごめんなさい。状況が理解出来ません。こちらでは、うまく行っていると思ってます。

例えば、B1セルに"障"と入力した時、E1セルでは"0.00"表示となります。
"高"、"万"と切り替えて行っても、きちんと書式変更していきます。
何かお気づきの点ございましたら、よろしくお願いします。

りんさん
ご丁寧なフォローありがとうございました。いつもすんません。非常に助かっております。
また、たのんます。なんてね・・・。^^;

【9230】Re:セルに入力された値によって、セルの書...
発言  でれすけ  - 03/11/25(火) 11:05 -

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

>シートモジュールにマクロを貼り付けて、一度別のシートをactiveにしてそのシートに戻ってきたのですが、小数点以下2桁で表示されるはずのセルに数を入力しても、そのままです。
>なぜでしょう?
>例えばですね、18と入力した場合、18.00となって欲しいのですが、18で表示されています。

ぴかるさんのプロシジャは、
B列が変更されたときにE列の書式が変更されるようになってます。
なので、
B列を変更せずにE列の値のみ入力しても書式は以前のもののままです。

ということではないのかな?

マクロを貼り付けたあと、一度B列を編集して確定してから
E列に入力してみてください。

ちなみに、E列変更時にその都度書式を変更するように
したものが以下のものです。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim T1 As Range, T2 As Range, aCell As Range

Set T1 = Intersect(Target, Columns("B"))
If Not T1 Is Nothing Then
 For Each aCell In T1
   aCell.Offset(, 3).NumberFormatLocal = CellFormat(aCell.Value)
 Next
End If

Set T2 = Intersect(Target, Columns("E"))
If Not T2 Is Nothing Then
 For Each aCell In T2
   aCell.NumberFormatLocal = CellFormat(aCell.Offset(, -3).Value)
 Next
End If

End Sub

Private Function CellFormat(Val As Variant) As Variant
 Select Case Val
   Case "高": CellFormat = "0_ "
   Case "障": CellFormat = "0.00_ "
   Case "万": CellFormat = "@"
   Case Else: CellFormat = "G/標準"
 End Select
End Function

【9248】できました!ありがとうございます。
お礼  猛虎襲来 E-MAIL  - 03/11/25(火) 21:47 -

引用なし
パスワード
   でれすけさん、ぴかるさん、りんさん
ありがとうございます。
指示通り、一度B列を入力しなおしたら希望通り表示されました。
今は、でれすけさんに作っていただいたものを利用させて頂いています。
ありがとうございました。

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