よろしくお願いします。いつもgooの皆さんには大変お世話になっています
以下の問題がなかなか解決できずにいます
せっかくの休日ですが、どなたかわかる方おりましたら教えてください
データの範囲はA列の1行から10行とします
(実際は100行近くになります)
ここにサーバーから読み込んだデータが随時更新されます
その値は0か1です
今回は、データ範囲にキーボードから0か1を入力してテストします
式はできるだけセルに書きたいです
式で処理できないことはマクロでやるとして
以下を実現するには、マクロと式はどう書いたら良いでしょうか?
(式だけでできれば一番良いのですが・・・)
どなたか教えてください
1、A列のどこかの行に1が入力されたら隣のB列のセルに on と表示させます
2、A列のどこかの行に0が入力されたら隣のB列のセルに OFF と表示させます
3、A列の空白の行の隣のB列のセルは何も表示しません ""(空白)です
4、A列に1が入力された行が4行あれば、その隣のB列に表示されている on の文字も4行です
このとき、一番最後にA列に1が入力された行だけ、C列に LASTと表示させるには
マクロと式はどう書いたら良いでしょうか?
今回A列にはキー入力しますが、実際はA列はサーバーから常時読み込んで表示するので
マクロはPrivate Sub Worksheet_Calculate()に書くことになるかと思います
エクセルはA列の値によっていろいろな計算をしますので
以上です。よろしくお願いします
No.5ベストアンサー
- 回答日時:
>指示通りにしましたが何も変化がありません
あれま~、どうしてでしょうかね。
一応、コードを説明しておきますね。
1、シート名のタブを右クリック、コードの表示をクリック
それぞれのシートにシートモジュールがあるので、そこに記述します。
標準モジュールではありません。
Private Sub Worksheet_Change(ByVal Target As Range)
↑このシートでセルの値に変更があったら実行するイベント
If Target.Column = 1 Then
↑もし、変更があったセルの列が A列だったら
If Target.Value = 1 Then
↑もし、変更があったせるの値が 1 だったら
Range("C1:C100").Value = ""
Target.Offset(0, 2).Value = "LAST"
↑C列を空白にして、変更があったセルに二つ右を LAST
と云う意味のコードです。
度々ありがとうございます
マクロは私がなにか間違ってるのかと思いますので
まだまだチェックしてみますが
理屈はやっとわかりました
最初に、その都度、全部に””を書き込んで
次に変更があったセルにLASTを書き込むんですね
これはいい方法です
これで私が狙った方法が可能ですね
ここまでずいぶんかかったのですが
以外に簡単な方法でできました
やはり、この辺は発想の問題ですね
マクロが狙った通りにならないのは私のチェックが足りません
結果を後ほど報告します
トータルで今までに1か月はこれをやっていますので解決は近いですね
頑張ります
No.4
- 回答日時:
>「最後に1が入力された」とは
>「時間的に最後に1が入力された行」のことです
ご希望の動作になるか不明ですが
1、シート名のタブを右クリック、コードの表示をクリック
2.VBエディターが起動したら
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Value = 1 Then
Range("C1:C100").Value = ""
Target.Offset(0, 2).Value = "LAST"
End If
End If
End Sub
を張り付けて閉じるで
A列に 1を入力してみてください。
休日の貴重な時間に教えていただきましてありがとうございます
説明がヘタで皆さんに迷惑をかけています
指示通りにしましたが何も変化がありません
No.3
- 回答日時:
NO2です。
失礼しました訂正です。>一番最後にA列に1が入力された行だけ
C1セルは =IF(A1=1,IF(COUNTIF(A$1:A1,1)=COUNTIF(A:A,1),"LAST",""),"")
私の説明がヘタで何度もお手数おかけします
上から順に1を入れてくるとLAST表示されますが
上にもどって、空白の5行目に1を入れてもLAST表示されません
説明がヘタですみません
No.2
- 回答日時:
念のため、質問を勘違いしていないかの確認ですが
>1、A列のどこかの行に1が入力されたら隣のB列のセルに on と表示させます
は、以下の様な事でしょうか
A B
1 ON
0 OFF
1 ON
0 OFF
・・・
B1セルに =IF(A1="","",IF(A1=1,"ON","OFF")) 下へコピーです。
C1セルに =IF(COUNTA(A:A)=ROW(),"LAST","") 下へコピーでは如何でしょうか。
休日の貴重な時間に教えていただきましてありがとうございます
>以下の様な事でしょうか
はい、そうです
私の説明がヘタで狙った動きを説明できていません
仮に今、C列10行目がLASTと表示されているとき
A列5行目を0にして、再度1にしたら
または、何も入力されていないA列5行目に1を入力したら
LAST表示は5行目だけであってほしいのですが・・・
説明不足で2度手間をおかけします
No.1
- 回答日時:
行数が固定なのでしたら該当行のB列のセルには、、、
=IF(A1=1:"ON":IF(A1=0:"OFF":""))
同じくC列のセルには、、、
=IF(A1=1:"LAST":""))
といった感じの式を書けばよいのではないでしょうか?
上記の式はシートの1行目のB列とC列の物ですが、実物の最初の行にこれと同様の式を書き、あとはこれを下方向にコピーすれば書かれておられる1.~4.の機能は実装終了です。
あれ? そういゆうことではなくて???
休日に親切におしえていただいてありがとうございます
最初エラーになったので:を,にしたら答えがでましたが
私の説明が下手で希望する結果になりません
A列が1のセルは、同じ行のC列はLASTと表示されますが
最後にLASTになった行だけ残して、それ以前にLASTと表示されていた行は
空白にしたいのですが・・・
つまりC列でLASTと表示されるのは1行だけになります
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Excel(エクセル) excelにおける転記マクロの書き方 2 2023/05/12 03:16
- Excel(エクセル) 【VBA】A列の指定した値と同じ行にあるD列の値を順番にコピペするマクロについて 4 2023/02/01 18:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
Microsoft1Officeの互換ソフト...
-
Excel ピボットテーブルで日付...
-
エクセル関数を教えてください
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 白黒印刷で白線を印刷...
-
【関数】先頭だけにある、半角...
-
【関数】適切な文字数の数字を...
-
Excelのチェックボックスの使い...
-
エクセルでの作業計算方法について
-
Excelのpivotについて質問です
-
WPS OFFICEでの縦書きについて
-
時間によってファイル名が変わ...
-
エクセルのセルに同じ大きさの...
-
Aというブックの1というシート...
-
エクセルの順位別一覧表の自動...
-
西暦や和暦の表示をyyyymmdd表...
-
【マクロ】エクセルにかいてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報
私の説明がヘタでお手数かけています
「最後に1が入力された」とは
「時間的に最後に1が入力された行」のことです
最初からこのように書けば良かったのですが
知恵が足りなくて迷惑をかけています
お許し下さい
思いつきました
時間的に最後ということは、入力された同じ行のどこかのセルに、その時間を記録して
時間的に最後かどうかをfor next などで1行から10行まで回って
調べればよいのでしょうか?
補足させていただきます
A列には同じ行でも何度もデータを入れます
仮にキー入力手順1→2→3であれば
1、A列1行目に1→B列1行目が on表示→C列1行目がLAST表示
2、A列5行目に1→B列5行目が on表示→C列5行目がLAST表示→C列1行目のLAST表示は消える
3、A列1行目に1→B列1行目が on表示→C列1行目がLAST表示→C列5行目のLAST表示は消える
何度もありがとうございます。私のミスでした。マクロが止まっていたようです
保存終了後開いてA列に1を入力すると見てびっくり、なんとばっちりです
時間的に最後のLASTだけ残ります。時間的とは言っても、時間なんか関係ないんですね
このトリックお見事です。やられました。うれしいような、がっかりしたような
でもやっぱりうれしいです
ああ、今までどれだけ苦労したことか。
今まではフラグを使うことしか頭になくて、
でも、条件が一致するとそのフラグも変わってしまって
フラグのフラグが必要かとも思ったりして
あっぱれ、お見事です
ああ、こんな簡単な理屈だったんですねえ
もう9割がた完成しているのであともう少しです
ありがとうございました。深くお礼申し上げます。きょう質問してよかったです
助かりました
ありがとうございました