
どなたか教えてください。
伝票明細に度々同じような編集を加えるので、自動的に編集した日付を履歴として残すようにしたいのです。
↓
明細行の一番左側(A5)に、プルダウンリスト(入力規則)から「入庫」または「出庫」を選ぶと、自動的にとなりのセルにその日の日付が入力されるようにする。
私が考えたのは、次のとおり。
(B5)にひとまずToday関数を入れる。→(C5)に次の関数を入れる。
C5=IF(OR(A5="入庫",A5="出庫"),B5,"")
けど、これじゃ値ではなく数式をもってきちゃうので、別な日に開くと日付が更新されてしまうのです。
どうすればよいですか?よろしくお願いします。
No.4ベストアンサー
- 回答日時:
>入力セルをA5,A6だけではなく、列Aすべてに有効にするには
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If(.Column = 1 ) then 'A列ならば
If (.Value = "入庫" Or .Value = "出庫") Then '入力値チェック
Range("B" & CStr(.Row)) = Date '日付を表示
Else
Range("B" & CStr(.Row)) = "" 'セルのクリア
End If
End If
End With
End Sub
に変更してください。
>Range("B" & CStr(.Row)) = Date '日付を表示」の部分の
>「& CStr(.Row)) 」はどういう意味になっているのですか?
セルを指定する場合、VBAでは、
Range("A1")
Cells(1,1) 'Cells(行番号,列番号)
のように指定します。
Cstr(.Row)は実際には With Targetを受けて
Cstr(Target.Row)の事です。(Tagetは入力セル .Rowは行)
Target.Rowは入力セルの行番号を数値で返しますのでCstr()で文字に変換しています。
(str()だと数値の前にスペースが入る(今はよく知りませんが)為、Cstr()にしています)
昔の知識をそのまま現在も使用しているので、もしかしたら、変換しなくても
うまくいくのかもしれませんが・・・
Range("B" & CStr(.Row))の代わりに
Cells(.Row,2)でも同様になります。
今回はB列という事がわかり易いようRangeを使用しました。
できました!
わざわざ書き換えてくださりありがとうございました。
しかも、分かり易い説明まで加えていただいて、ホントにホントに感謝しております。
ありがとうございました。
No.3
- 回答日時:
関数を関数で値に変換することはできないと思います。
手動でしたらimogasiさんの(2)の方法で、関数の入ったセルを選択し、
[F2]→[F9]で関数を値にするのが、簡単かと思います。
VBA(マクロ)でよければ、
1、[Alt]+[F11]を押す。VisialBasicEditerに変更されます。
2、左上にプロジェクトと書いてある中に、
VBAProject(現在のブック名)
└Microsoft Excel Objects
├Sheet1
・・・
└ThisWorkbook
とあると思うので、Sheet1(伝票明細のシート)をダブルクリック
3.以下のコードを貼り付ける
***************************この下から*****************************
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
Select Case .Address(False, False) '入力セルのアドレス
Case "A5", "A6"
If (.Value = "入庫" Or .Value = "出庫") Then '入力値チェック
Range("B" & CStr(.Row)) = Date '日付を表示
Else
Range("B" & CStr(.Row)) = "" 'セルのクリア
End If
End Select
End With
End Sub
***************************この上まで***************************
4.[Alt]+[F11]を押す。Excelに戻ります。
5.Sheet1のA5,A6で[入庫],[出庫]のどちらかを入力すると隣のセルに日付が表示されます。 (プルダウンリスト)の選択でもできると思います。
詳細が分かりませんでしたので、1シートにしか対応させていません。
おかしい所や分からない事があれば補足してください。
この回答への補足
こんにちは。
やってみたらできました!すばらしいっ。マクロでやってみようと思っていたのですがサッパリわかりませんでした。ありがとうございます。
一つお願いがあるのですが、入力セルをA5,A6だけではなく、列Aすべてに有効にするにはどうしたらいいのでしょうか?
また、「Range("B" & CStr(.Row)) = Date '日付を表示」の部分の 「& CStr(.Row)) 」はどういう意味になっているのですか?
作っていただいた上に、わがまま言ってすみませんが、よろしくお願いいたします。
No.2
- 回答日時:
(1)関数は、値を反映してくれるところがメリットで す。
例えば=B1と言う式を、C1に入れると、B1の値 が変ると、C1も即座に変ってくれます。(設定を自 動計算として)
一般的には再計算される都度そこを参照しているセル の値も変ります。既回答もB5の値が変る時はVAL UEにしても=Value(b5)の式が残る以上、B5が変る とC5も変ると思います。
日付けの時にこれが困る訳です。そこで対策は
(2)計算値へ置換する方法
対象セル数が1つの時に使うのが適当です。
a.計算値に変換したいセルをアクチブにする。
b.数式バーをクリックする。データを編集できる
状態にする。
c.ここでF9キーを押す。数式バー全体がハイライ トされる。
d.エンタキーを押す。数式は消え、値になることが
判る。
(3)セル範囲に対してするときは、コピーして、同じ範 囲に対し「形式を選択して貼り付け」「貼り付けオ プション」で「値」オプションをONにして、貼り 付ける。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一番多く表示のある値(文字列...
-
検便についてです。 便は取れた...
-
首吊りどこ締めるの
-
風俗店へ行く前のご飯
-
病院側から早く来てくださいと...
-
Excel 数値の前の「 ' 」を一括...
-
彼女のことが好きすぎて彼女の...
-
VLOOKUP関数を使用時、検索する...
-
勃起する時って痛いんですか? ...
-
レインボーシックスシージをし...
-
リンク先のファイルを開かなく...
-
MIN関数で空白セルを無視したい...
-
検便を取ったのですが、棒から...
-
値が入っているときだけ計算結...
-
イタリアから帰国する際、肉製...
-
増減表のプラスマイナスの符号...
-
2つの数値のうち、数値が小さい...
-
精液の落とし方を教えてください
-
腕を見たら黄色くなってる部分...
-
小数点以下を繰り上げたものを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
値が入っているときだけ計算結...
-
彼女のことが好きすぎて彼女の...
-
尿検査前日に自慰行為した時の...
-
VLOOKUP関数を使用時、検索する...
-
Excel 数値の前の「 ' 」を一括...
-
精液の落とし方を教えてください
-
【Excelで「正弦波」のグラフを...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
精子に血が・・・
-
リンク先のファイルを開かなく...
-
小数点以下を繰り上げたものを...
-
EXCELで条件付き書式で空白セル...
-
イタリアから帰国する際、肉製...
-
excelでsin二乗のやり方を教え...
-
腕を見たら黄色くなってる部分...
-
病院側から早く来てくださいと...
-
ワードのページ番号をもっと下...
おすすめ情報