- ベストアンサー
前回の詳細です
前回の質問(excelで手入力と関数による値は混在できるのか)の詳細です。 「21/41」の表示したいとは、前回に質問した通りです。 /の前側は手入力で、後側は状態によってIF関数なりなんなりで表示させたいのです。 例えばA1入力したものの状態が「A」なら「20」を、状態「B」なら「41」といった具合です。 また、手入力した数が/の後側の数字と同じであれば、「MAX」を表示したいと思っています。 さらに、数字以外の文字列を入力した場合は、入力した文字列が表示されるようにしたいです。 回答を宜しくお願します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
セルに入力した値をマクロで書き換えることで可能ですが、イレギュラーな形です。 手入力と状態表示の部分のセルを分けることを強くお勧めします。 一応、手抜き版ですがマクロの例もつけておきます。必要とするSheetモジュールに書いてください。 なお、状態A/Bをどこでどう区別するのかの説明がありませんでしたのでその判断部分はご自分で組み込んでください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sState As String If IsNumeric(Target.Value) = False Then Exit Sub sState = "20" If 状態 = B Then 'ここは書き換えて sState = "41" End If If sState = Target.Text Then sState = "Max" Application.EnableEvents = False Target.Value = "'" & Target.Text & "/" & sState '手入力値が1~12で、/の後ろが20のとき、日付扱いされるのを防ぐために先頭に「’」 Application.EnableEvents = True End Sub あと、お願いですが前回の質問の続きなら、せめてその質問へのリンクを貼ってください。
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
> 教えて頂いた通りに入力したのですが、貼り付けた直後は動作するのですが、 > マクロを有効にして保存すると、動作しなくなります。 > どのセルに入れても通常通りの入力しかできません。 マクロを途中で止めたりしませんでしたか? Application.EnableEvents = False が効いているような気がします。 Excelを再起動すると直りませんか。
お礼
改めて貼り直すと正常に動作しました。 度々有難うございました。
- mt2008
- ベストアンサー率52% (885/1701)
> 特定スレ(例:F3~F78)だけ有効にする方法はありますか? 先のコードの Dim sState As String の、下に↓を入れてみて下さい If Application.Intersect(Target, Range("F3:F73")) Is Nothing Then Exit Sub > >>リンク > 失礼しました。考えたのですが、方法がわからずそのままにしてしまいました。 質問本文中にURLを書くだけで十分ですよ。
補足
回答有難うございます。 教えて頂いた通りに入力したのですが、貼り付けた直後は動作するのですが、 マクロを有効にして保存すると、動作しなくなります。 どのセルに入れても通常通りの入力しかできません。
補足
回答有難うございます。 コードを取り入れたところ意中の表示方法で数字がでました。 ですが、今度は全てのセルに数字を入れると、この表示方法になってしまいました。 特定スレ(例:F3~F78)だけ有効にする方法はありますか? >>リンク 失礼しました。考えたのですが、方法がわからずそのままにしてしまいました。