C4~C18のセルの範囲で、ダブルクリックをした順番に数字が出るようにしたいです。
例:C4でダブルクリック→C1でダブルクリック→C9でダブルクリック→C18でダブルクリック
表示:C4は1、C1は2、C9は3、C18は4と表示させる動作です。
もしここでC1の2を消すと、C9は2、C18は3と消した物に準じて番号が変わり、番号の空白はなくしたいです。また、C17に数字の3をいれると、手入力した数字を優先して、C9は4、C18は5にする動作も起こしたいです。逆にC17に6とかいう数字を入力した場合は、5がないので上の例の表示はそのまま無視して表示されたままの感じです。
なかなか質問の意図がわかりづらいと思いますので、その点については適宜補足いたします。
非常に難しく私の力では全くマクロが組めませんでした。マクロをご教授いただけると幸いです;
No.2ベストアンサー
- 回答日時:
こんにちは
雰囲気はわかりますが、No1様のおっしゃるようにいろいろなケースが考えられるので、その時の処理をどのようにするのかが不明です。
基本的には、値が常に1から(15まで)の数値で、欠番がなく、重複もないようにしたいということと理解しました。
一方で、入力値(飛び番を入力など)が入力直後に変わってしまうのも気分が悪い(意図的な場合)とか…いろいろありそうなのが、最初に記した「いろいろなケース」の一例です。
全てのケースをお尋ねするのも面倒なので、勝手な解釈でサンプルとして作成してみました。
(なので、多分いろいろと違っていると想像します)
※ 範囲内にエラー値がある場合は動作しません。(VBAのエラーになります)
※ 考え方の一例ですので、入力値のチェック等は一切省いています。
(実際には、上記両方への対処もしておいた方が良いと思います。)
※ 若干効率の悪い方法ですが、全体でたかだか15程度なので・・・
基本的に、以下のような考え方で処理しています。
・入力値は基本的に変更しない
・入力値以外の数値は小さい順に1~の整数に置き換える
・入力値と同じ値は発生させない
・ダブルクリックしたセルが数値以外なら、最も大きな整数に変える
以下、ご参考まで。(シートモジュールに記載のこと)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call toOrder(Target, 0)
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Call toOrder(Target, 1)
End Sub
Sub toOrder(t As Range, f As Integer)
Dim r As Range, rg As Range
Dim ary, val, tval, n, i
Set r = Range("C4:C18")
Set rg = Application.Intersect(t, r)
If rg Is Nothing Then Exit Sub
' 条件設定に合わせて前処理
' (入力値を保存)
Set rg = rg.Cells(1, 1)
tval = -1
If f = 1 Or WorksheetFunction.IsNumber(rg) Then
f = 1
tval = rg.Value
End If
' 既入力の値を1からの順に変更
Application.EnableEvents = False
rg.Value = Empty
ary = r.Value
n = 1
val = WorksheetFunction.Min(r)
Do While val > 0
i = WorksheetFunction.Match(val, r, 0)
r.Cells(i, 1) = Empty
ary(i, 1) = n
n = n + 1
If n = tval Then n = n + 1
val = WorksheetFunction.Min(r)
Loop
r.Value = ary
' 入力値を戻す(または次の値を入れる)
If f = 1 Then n = tval
rg.Value = n
Application.EnableEvents = True
End Sub
※ 条件が少し違うような場合は「前処理」のところで調整してみてください。
基本的に内容が違っている場合は、スルーしてください。(笑)
fujillin 様、
ご回答ありがとうございます!お礼が遅くなってしまい大変失礼いたしました。
fujillin 様が想定していただいた、
・入力値は基本的に変更しない
・入力値以外の数値は小さい順に1~の整数に置き換える
・入力値と同じ値は発生させない
・ダブルクリックしたセルが数値以外なら、最も大きな整数に変える
は、まさに私が思い描いていた通りの仕様です。そして無事マクロも動作をし、
非常に感謝の気持ちでいっぱいです。
この度は、このような稚拙な質問にも係わらず、こちらの意図を組んで頂き
すばらしいマクロをご教授頂きありがとうございました。
今後ずっと大切に使用していきたいと思います。
No.1
- 回答日時:
仕様に不明確な点があります。
> 例:C4でダブルクリック→C1でダブルクリック→C9でダブルクリック→C18でダブルクリック
> 表示:C4は1、C1は2、C9は3、C18は4と表示させる動作です。
範囲外のC1に数字が表示されるのは何故ですか?
範囲外のセルをダブルクリックした場合は、数字を表示させなくても良いですか?
(表示:C4は1、C9は2、C18は3)
--------------
例:C4でダブルクリック→C9でダブルクリック→C18でダブルクリック
表示:C4は1、C9は2、C18は3と表示。
・上記の例の場合、例えばC4の値を削除したらどうなりますか?
・上記の例の場合、例えばC9の値を10に変更したらどうなりますか?
・上記の例の場合、例えばC9の値を1(C4の値)に変更したらどうなりますか?
---------------
表示、入力する数値の最大値はありますか?
回答が遅くなってしまい申し訳ありません、、、
ご質問ありがとうございます。
例示のC1は完全な間違いです。C1は範囲外ですのでダブルクリックをしても何も起こらないようにしたいです。
混乱させてしまい大変失礼いたしました。
また、当初想定していない入力のパターンをご質問にで気づかせていただき
改めて感謝いたしますm(_ _)m
ナンバー2の方のマクロにて無事解決いたしましたのでご質問に対する回答は控えさせていただきます。
質問の仕方について非常に勉強させていただきました。
siffon9 様に感謝いたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
チェックボックスをクリックした順にカウントアップするには
Excel(エクセル)
-
エクセル ダブルクリック入力の範囲が複数の場合
Excel(エクセル)
-
VBAでセルをクリックする回数で表示が変わる
その他(プログラミング・Web制作)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
値を返さないコード パス
-
VB.NETでコンボボックスの1行目...
-
ISDBNULLをスルーしてDBNULLが...
-
シーケンサで最小値を保持する
-
pingを行うプログラム
-
WebRequestでJavascriptの値取得
-
sin(π)が0にならないです
-
VB初心者。小数点以下の表示で...
-
エクセルVBAについて
-
【C++/CLI.NET】コンボボックス...
-
textboxとLabelを動的に変更する
-
テキストボックスの値をコンボ...
-
VB.netでRGB関数を使うには
-
vbaの繰り返しで求める最大値に...
-
変数名の取得
-
オブジェクト型の変数同士の値...
-
VB2008 iniファイルの指定セク...
-
初期化の効能・必要性・目的で
-
代入したのに値が更新されない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
値を返さないコード パス
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
VB初心者。小数点以下の表示で...
-
PL/SQLでのTO_DATEの時間取得に...
-
VB.NETでアクティブなformを知...
-
Excel VBA 複数選択したリスト...
-
Excel vba ユーザーフォームテ...
-
ISDBNULLをスルーしてDBNULLが...
-
変数名の取得
-
setcookieで「path」に複数の値...
-
C#の質問です
-
変数に代入してある数値を表示...
-
マクロで奇数と偶数の値を2か所...
-
Excel VBAのリストボックスの値...
-
windowsアプリケーションで小数...
-
Powershellのparamについて
-
[VB.net] DataGridViewのコンボ...
-
【C++/CLI.NET】コンボボックス...
おすすめ情報