dポイントプレゼントキャンペーン実施中!

こんにちは。教えてください。電話・FAXの一覧表を作成するのですが,しばしば変更になるため,そこに入力されている番号が,いつ入力されたものか(いつの時点での情報なのか)が分かるように,その入力年月日時刻を表示したいです。下記のQ&Aをみて,その回答通りのことはできるのですが,自分が作りたい表に置き換えた場合,どこをどういじればよいのか分かりません。ご教示いただけましたら幸いです。
私が作りたい表は,B列に会社名,C列に部署名,D列に担当者名,E列に電話番号,F列にFAX番号を入力する形式で,2行目に項目欄を設け,3行目から本文になります(行数はどんどん増えていきます)。で,B列を変更した場合には,同じ行のG列にその変更年月日時刻を,C列を変更した場合には同じ行のH列にその変更年月日時刻を,D列を変更した場合には同じ行のI列にその変更年月日時刻を,E列を変更した場合には同じ行のJ列にその変更年月日時刻を,F列を変更した場合には同じ行のK列にその変更年月日時刻を,自動的に表示するようにしたいです。

http://detail.chiebukuro.yahoo.co.jp/qa/question …

A 回答 (3件)

シート名タブを右クリックしてコードの表示を選ぶ


現れたシートに下記をコピー貼り付ける

private sub worksheet_change(byval Target as excel.range)
 dim h as range
 on error resume next
 for each h in application.intersect(target, range("B:F"))
  h.offset(0, 5) = now
 next
end sub

ファイルメニューから終了してエクセルに戻る
B:F列に記入する。
G:K列は事前に適切にセルの表示形式を設定しておく



#簡単のため「3行目以下に」の部分は省略しています


#通常,ご相談の用途では「データを削除した」場合は処理をスキップするような手当をしておく事が多いですが,今回はデータ消去も変更として記録します。

この回答への補足

すみません。
B列の会社名の前のA列に通し番号を入力することになりそうなのですが,現状でそれをしますと,F列にA列への入力年月日時刻が表示され,もともと入力されていたF列のファックス番号が消えてしまいます。セルに入力した年月日時刻を記録する対象を,B列からF列にする(A列の入力年月日時刻は表示しないようにする)には,どのようなコードにしたら宜しいでしょうか。
また,A列の通し番号の前に更にもう一列設ける必要が出てきた場合,A列の左に列を挿入すると,現状のA列がB列に,現状のB列がC列に・・・,現状のF列がG列になりますが,その状態で,セルに入力した年月日時刻を記録する対象を,C列からG列にするには,どのようなコードにしたら宜しいでしょうか。
最後に,B列とC列の間に,入力年月日時刻を記録・表示する必要のない「会社のひらがな読み」を入力する列を設けることになった場合,B列とC列の間に一列挿入して,現状のB列はB列のまま,現状のC列はD列になりますが,その状態で,セルに入力した年月日時刻を記録する対象を,B列と(C列を飛ばして)D列からG列にするには,どのようなコードにしたら宜しいでしょうか。

補足日時:2012/06/25 12:29
    • good
    • 0
この回答へのお礼

早々にありがとうございます。うまくいきました。ありがとうございます。また関連したご質問をさせていただくこともあるかも知れませんが,今後ともよろしくお願いします。

お礼日時:2012/06/25 11:47

はて?



捕捉のご質問を頂きましたが,
>F列にA列への入力年月日時刻が表示され,
>もともと入力されていたF列のファックス番号が消えてしまいます。

回答したマクロではそのようなことは起こりません。



>B列からF列にする(A列の入力年月日時刻は表示しないようにする)には,
>どのようなコードにしたら宜しいでしょうか。

最初からそのように回答していますが,いったいどういう事でしょうか?ご回答をお願いします。


キチンと回答を試してみて,上手くいかない所があれば具体的に状況を添えて追加ご質問ください。







>C列からG列にするには,

コードを見れば一目瞭然ですが。

変更前:
for each h in application.intersect(target, range("B:F"))

変更後:
for each h in application.intersect(target, range("C:G"))

とするだけです。




>B列と(C列を飛ばして)D列からG列にするには

変更後:
for each h in application.intersect(target, range("B:B,D:G"))

とします。
    • good
    • 0
この回答へのお礼

ありがとうございます。一点目の補足質問は,自分で色々いじっているうちに混同してしまったようです。教えていただいたコマンドをあらためて入力したところ,補足質問に記載したような現象はおこりませんでした。失礼しました。ほかの2点の補足質問にもご回答いただきありがとうございました。

お礼日時:2012/06/27 15:29

参考としているマクロのコードを次のようにすればよいでしょう。



Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
If Target.Column = 1 And Target.Column > 6 Then Exit Sub
If Target.Value = "" Then Exit Sub
Application.EnableEvents = False
Target.Offset(, 5) = Now
Application.EnableEvents = True
End Sub

なおG列からJ列には#####のような表示になりますが十分に列幅を広げればよいでしょう。

この回答への補足

すみません。
B列の会社名の前のA列に通し番号を入力することになりそうなのですが,現状でそれをしますと,F列にA列への入力年月日時刻が表示され,もともと入力されていたF列のファックス番号が消えてしまいます。セルに入力した年月日時刻を記録する対象を,B列からF列にする(A列の入力年月日時刻は表示しないようにする)には,どのようなコードにしたら宜しいでしょうか。
また,A列の通し番号の前に更にもう一列設ける必要が出てきた場合,A列の左に列を挿入すると,現状のA列がB列に,現状のB列がC列に・・・,現状のF列がG列になりますが,その状態で,セルに入力した年月日時刻を記録する対象を,C列からG列にするには,どのようなコードにしたら宜しいでしょうか。
最後に,B列とC列の間に,入力年月日時刻を記録・表示する必要のない「会社のひらがな読み」を入力する列を設けることになった場合,B列とC列の間に一列挿入して,現状のB列はB列のまま,現状のC列はD列になりますが,その状態で,セルに入力した年月日時刻を記録する対象を,B列と(C列を飛ばして)D列からG列にするには,どのようなコードにしたら宜しいでしょうか。

補足日時:2012/06/25 12:30
    • good
    • 0
この回答へのお礼

削除の場合はスキップされるところまで対応したものをご教示いただきありがとうございました。うまくいきました。また関連したご質問をさせていただくこともあるかも知れませんが,今後ともよろしくお願いします。

お礼日時:2012/06/25 11:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!