ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

すごく贅沢な話なのですが・・・
マクロを使わず、通常のエクセルで時間を手入力でなく何かしらしたら(例:「1」と入力)自動で別セルに現在時刻ほ記載してくれる

マクロだと下記のような内容でやってます(一部)
Range("H3:K33").Select
Selection.Copy
Sheets("結果").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

マクロを使わずやれる方法はないでしょうか・・・

A 回答 (9件)

論より 証拠、



作ってみました。


式、
=TEXT(IF(ISBLANK(B1),IF(ISBLANK(A10),B10,TODAY()),"此処が 変わります。"),"rr/mm/dd hh:mm")

ファイル、
https://1drv.ms/x/s!AjviygfJDgV_3GnS4Ko-q3mWU9fP

尚、
ファイルは 1度、
ローカルに 別名保存して、
其の保存ファイルを 扱うように、
してくださいね、

別名保存でないと、
意味が 無いですよ。


さすれば、
閲覧も、編集も、
叶うものと 思いますよ。
    • good
    • 0

「マクロを使わず」の真意がわからないのですが、VBA自体がダメ(.xlsmで保存してはいけない)なのでしょうか?もしそうであれば、読み捨てて下さい。


「時刻を記載する」の本来の目的も分からなかったので、勝手に次のように解釈しました。

A1セルに何かを入力したら、B1セルに入力日時を記録し、さらにA1セルの変更ができないようにする。

①まず、次のユーザー定義関数(MyNow)を定義してください。
Function mynow(r As Range) As Variant
If r.Text = "" Then
mynow = ""
Else
If Application.ThisCell.Text <> "" Then
mynow = Application.ThisCell.Text
Else
mynow = Format(Now(), "yyyy/mm/dd hh:mm:ss")
End If
End If
End Function

②次に、B1セルに下記の数式を設定してください。
【B1セル】=mynow(A1)

③最後に、A1セルに次の入力規則を設定してください。
【A1セルの入力規則】=B1>=TEXT(NOW()-TIMEVALUE("00:00:01"),"yyyy/mm/dd hh:mm:ss")

以上の設定で、A1セルに何かを入力するとB1セルに日時が自動設定されるようになります。
さらにA1セルを書き換えようとするとエラーが表示されます。ただし、空白にすることはできるので、一旦、空白にすることにより、新たな値を入力することができます。
「マクロ無しで時間自動で記入をしていきたい」の回答画像9
    • good
    • 0

何らかのアクション(トリガ)で時間を「表示」させるのでしょうか。


何か入力したらその値を入力した時間に「置き換え」たいのでしょうか。

・・・
時間を「表示」させたいのであれば、自分なら「計算方法」を「手動」にして、時間を表示するセルには
 =NOW()
と入力しておき、セルの表示形式で時刻を表示するようにします。
時間を更新する必要があれば、[F9]キーを押します。

ただし、
A1セルに
 =NOW()
A2セルにも
 =NOW()
と入力した場合、どちらも更新した時の「同じ時間」が表示されます。

・・・
「置き換え」はマクロを使うしかありません。
    • good
    • 0

可能です。




反復計算を 許可し、
特定条件下以外は、
自己参照を させておきます。


特定条件に 至ったかは、

例えば、
I F構文等で 検知させます。

特定条件に 至った時に、
TODAY構文を 読ませ、

其の後、
自己参照に 復帰させると、
値が 保持されるので、

特定条件下に 至った、

例えば、
他の セルに何、
等かを 入力した、
タイミングの、
其の時刻を 保全できたり、
します。


但し、
此のままでは、
リセットに 苦慮しますので、

リセット用の 状況判断分岐も、
設けて おく方が、
いいでしょう。


ソフトウエア畑では、
なかなか 至れない、
認知ですが、

ハード界では、
値保持対策等とは 常識内な、
範疇です。


此が無ければ、
PCが バカ高い、
代物に なりますし、

抑も、
ハードウエアが 成立しません。
    • good
    • 0

話の雰囲気から察するにマクロだからダメって言うよりも、究極的に自動化したい(ボタン押すなんて面倒だ)ってのが感じられるんですけど違いますか?であれば、マクロでワークシートが変更されたことを自動検知して、させたい処理を実行するようにできます。



その方法
https://www.moug.net/tech/exvba/0050131.html
    • good
    • 0
この回答へのお礼

細かくありがとうございます

お礼日時:2019/04/26 21:22

ちなみにマクロが使えない理由は何でしょう?

    • good
    • 0

マクロを使わす「自動で」なんて無理じゃないですか?^^;


自動で動いてくれる仕組みがマクロ。
マクロを使えないなら手動しかないと思います。
    • good
    • 0

「Ctrl+;」「Ctrl+:」


上記のショートカットをご存知でしょうか
それぞれ現在の日付と時刻を自動設定する機能です
恐らくこれは質問者様の意図しているもととは違うと思いますが(笑)

さて、特定のセルの変更時にということで、例えば空白のセルに値が入力された場合という限定状況下なら「=If(A4="","",now())」という関数でもできますが、問題としてはNOW()関数は現在の日時を取得するためシートを開くたび、また、操作をするたびに最新の情報に書き換えられてしまうということですね
マクロなしで・・・出来るんでしょうか?(笑)
    • good
    • 0
この回答へのお礼

now()…更新されなけないで出来たら嬉しいです(笑)

お礼日時:2019/04/26 11:12

時刻をクリップボードに格納して、はりつけるのは手入力??



コマンドラインで、time /t | clip を実行して、エクセルに戻って ctrl+V とかでできるけど、、、
手数多いですね。

現在のマクロでは、どういう問題があるのでしょうか?
(ボタン押下して、実行させるとかじゃダメなんですか?)
    • good
    • 0
この回答へのお礼

私もそれを作ったんですけど…ボタンさえも拒否られましてね(´・ω・`)

お礼日時:2019/04/26 11:11

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QExcelで「令和」と表示されるのは5月1日にならないとだめですか?

「日本の新元号に関する Office の更新プログラム」というページ(下記)で、
「Windows と Office の更新プログラムを適用済みの場合でも、Windows 上で実行されている Office 製品は 2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しませんのでご注意ください。」
と書かれています。
https://support.microsoft.com/ja-jp/help/4478844/office-updates-for-new-japanese-era

今月4月中に、Excelのセルに来月5月以降の年月日を入力した場合に、自動で「令和」という元号を表示させることはできないのでしょうか。

もし、できるということであれば、「2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しません」とはどのような意味なのでしょうか。

Aベストアンサー

>こちらでは、「4月17日以降にOfficeも更新されれば「令和元年」と表示されると思います」と書かれているんですが

その方は、Microsoftの方ではないですし個人の予想ですよね?公式が出ているのにそれを持ち出してどうするんですか?

5/1より前に新しい元号を表示したい場合は数式や表示形式で限定的に表示させる方法を色々な方が考え付いていますよ。
検索すればたくさん出てきます。

Q4142から653347と飛んでます。 これを4143からちゃんと並ぶにはどうすればいいでしょうか?

4142から653347と飛んでます。
これを4143からちゃんと並ぶにはどうすればいいでしょうか?

Aベストアンサー

これ、9から70に飛んでるよね。

①シート全体を選択
②どの行でもいいので右クリック
③再表示を選択

開いたかな?

Q何故このようなプログラムだとエクセルに書き込めないのか教えてください。

何故このようなプログラムだとエクセルに書き込めないのか教えてください。

Aベストアンサー

私もPythonは研究を始めたばかりですが、まさかopenpyxlとかのExcel操作ライブラリがインストールされてないなんてオチはないですよね?

あとsheet1.write(str… ってなってますが、ここはセル番地の指定だからstrでは文字列になっちゃうのでまずいと思います。変数countは数値なんだから、そのまま sheet1.write(count, 0 ,str(inputvale)) でいけるのでは?

Q万年カレンダーについて。

次のexcelのデータで、おかしなところがありましたら、教えていただけると幸いです。
https://fire.st/9Il0GsR

Aベストアンサー

>確かに35行は、緑になりました。どうしてそうなるのでしょうか?教えていただけると幸いです。
添付の画像を参照ください。
2018年6月の例ですが、C35へ
=COUNTIF(祝日,A35)
と入力しています。結果は、1048470が表示されます。
これは、=COUNTIF($Y:$Y,A35)と同じことです。(祝日の範囲がY列全体の為)
A35は空白なので、Y列の空白の部分がカウントされます。その為、1048470になります。
COUNTIF(祝日,A35)の結果が0でなければ、判定は真なので、色がつく条件式が成立します。
そのため、緑になります。

>すみません。COUNTIF 関数のみで、祝日に色をつけるとするとどうすれば良いのでしょうか?教えていただけると幸いです。
祝日の範囲を、空白を除いて、正確に定義しなおします。
一旦、祝日の名前を削除し、実際に祝日の日付が入力されているセル範囲Y3:Y107を、祝日の範囲にします。
(つまり、Y列全体をやめて、$Y$3:$Y$107にします)
そうすると、COUNTIF 関数のみで祝日に色をつけることができます。
祝日の名前を削除する方法は、下記を参照ください。(削除せず、変更することも可能です)
https://www.wanichan.com/pc/excel/2016/8/47.html

COUNTIF 関数のみで、祝日に色をつけるようにした場合は、祝日の追加が発生すると(2023年以降分の祝日の追加など)、Y列の範囲が変わるので毎回、それにあわせて、祝日の範囲もかえる必要があります。

>確かに35行は、緑になりました。どうしてそうなるのでしょうか?教えていただけると幸いです。
添付の画像を参照ください。
2018年6月の例ですが、C35へ
=COUNTIF(祝日,A35)
と入力しています。結果は、1048470が表示されます。
これは、=COUNTIF($Y:$Y,A35)と同じことです。(祝日の範囲がY列全体の為)
A35は空白なので、Y列の空白の部分がカウントされます。その為、1048470になります。
COUNTIF(祝日,A35)の結果が0でなければ、判定は真なので、色がつく条件式が成立します。
そのため、緑になります。...続きを読む

QEXCELでのシフト表作成

職場のシフト表を作るにあたり、下図のF列以降のA~Gの職員に、休日の出勤日はセルを青色にし、その代休日を黄色でで配色しています。また、各職員の出勤希望日を緑、休日希望日を赤で表示して、見た目に分かり易くして、シフトを作成しています。
 問題は、色を入れると同時に、青と緑で表現した休日の出勤シフトをD列に、平日の代休をE列に、A,B等の職員名を表示させたいのですが方法がわかりません。VBA等で上手くできないでしょうか?
よろしくお願いします!

Aベストアンサー

こんばんは!

お示しの画像のF~L列の色付けは手動で行うのですよね。

VBAでの一例です。
↓の画像のように少し配置を変えてみました。
D1~E2にF~L列に塗りつぶす色での各色分けをしておきます。
そしてその列の色と同じ色のセル ↓の画像では3行目 の氏名?を表示するようにしてみました。

Sub Sample1()
 Dim i As Long, j As Long
 Dim c As Range

  For i = 4 To Cells(Rows.Count, "B").End(xlUp).Row
   Cells(i, "D").Resize(, 2).ClearContents
    For j = 6 To Cells(3, Columns.Count).End(xlToLeft).Column '//←F列~3行目最終列まで//
     If Cells(i, j).Interior.ColorIndex <> xlNone Then
      For Each c In Range("D1:E2")
       If Cells(i, j).Interior.Color = c.Interior.Color Then
        With Cells(i, c.Column)
         If .Value = "" Then
          .Value = Cells(3, j)
         Else
          .Value = .Value & "," & Cells(3, j)
         End If
        End With
       End If
      Next c
     End If
    Next j
  Next i
   Range("D:E").Columns.AutoFit
End Sub

※ データ変更があるたびにマクロを実行する必要があります。

※ お示しの画像と↓の画像は1行ずれていますので、注意してください。m(_ _)m

こんばんは!

お示しの画像のF~L列の色付けは手動で行うのですよね。

VBAでの一例です。
↓の画像のように少し配置を変えてみました。
D1~E2にF~L列に塗りつぶす色での各色分けをしておきます。
そしてその列の色と同じ色のセル ↓の画像では3行目 の氏名?を表示するようにしてみました。

Sub Sample1()
 Dim i As Long, j As Long
 Dim c As Range

  For i = 4 To Cells(Rows.Count, "B").End(xlUp).Row
   Cells(i, "D").Resize(, 2).ClearContents
    For j = 6 To Cells(3, Columns.Cou...続きを読む

Q【関数】複数条件に応じてポイントをつけたい

お世話になっております。

条件によってポイント付与する数式を組みたいのですが
条件が複雑で、どのような関数を組めば良いか、関数の知識も乏しく頭を悩ませております。
詳しい方教えて頂けないでしょうか?

K列 担当者ID
L列 計画
M列 実績
N列 達成率
O列 達成額/未達額
P列 ポイント付与欄

上記のようなデータがあります。

下記条件で、O列「達成額/未達額」の降順にポイントを付与したいです。
その際、下記の条件でポイントを付与したいのです。

ポイント集計先
①黄色セル K5~K18:担当者ID
➁赤色セル K4:部門コード
※画像添付いたします。

ポイント付与条件別表
黄色セル E列:担当者ID ※上記①と紐づく
ピンクセル F列:担当者に紐づく主担当部門コード ※上記➁と紐づく
※補足へ画像添付いたします。

★条件★
・基本
O列
①「達成額/未達成額」が0以上なら降順に10Pからポイント付与
➁「達成額/未達成額」が0orマイナスならポイント付与せず
※ただし、マイナスでも実績があればポイント付与

上記、基本条件に加えて、下記条件も組み込みたいです。
①担当者ID+主担当部門コードが紐づけはO列に10PからポイントMAX付与
➁担当者ID+主担当部門コード以外だったら該当ポイントの1/2付与
かつ、「達成額/未達成額」が0orマイナスなら1/2のポイントの半分付与

何卒、よろしくお願いいたします。

お世話になっております。

条件によってポイント付与する数式を組みたいのですが
条件が複雑で、どのような関数を組めば良いか、関数の知識も乏しく頭を悩ませております。
詳しい方教えて頂けないでしょうか?

K列 担当者ID
L列 計画
M列 実績
N列 達成率
O列 達成額/未達額
P列 ポイント付与欄

上記のようなデータがあります。

下記条件で、O列「達成額/未達額」の降順にポイントを付与したいです。
その際、下記の条件でポイントを付与したいのです。

ポイント集計先
①黄色セル...続きを読む

Aベストアンサー

まず基本条件の方からいきます。
1.セルP5に 「 =IF($M5>0,MAX(10+1-RANK.AVG($O5,IF($M$5:$M$1000>0,$O$5:$O$1000,"")),0),"") 」を入力します。
2.必要なだけ下方向にコピーします。(完了)

*RANK.AVG関数で”達成額/未達成額”の順にランキング(1~)をつけ、11から差し引く、という方法をとります
*”実績”がマイナスのものはランキング付けそのものから除外するので、IF関数で検索対象の配列を絞り込みます
(IF関数に配列を入れたら答えも配列で返してくれるので、その絞り込んだ配列に対してRANK.AVR関数を使います。)
*マイナスのポイントは排除したいので、MAX関数でゼロと比較して正の値のみを採択します

追加条件込みの方は、以下です。
1.セルP5に 「 =IF($M5>0,MAX(10+1-RANK.AVG($O5,IF($M$5:$M$1000>0,$O$5:$O$1000,"")),0)*IF(VLOOKUP($K5,$E$3:$F$1000,2,FALSE)=$K$4,1,IF($O5>0,0.5,0.25)),"") 」を入力します。
2.必要なだけ下方向にコピーします。(完了)

*担当IDから担当部門コードの検索にはVLOOK関数を使います。VLOOK関数が正常に動作するには、担当IDに漏れがない事と番号順に並んでいる事が必要ですので、これ前提で考えて下さい。
*追加条件に準じ、ポイントを1倍したり、0.5倍したり、0.25倍したり、しました。

まず基本条件の方からいきます。
1.セルP5に 「 =IF($M5>0,MAX(10+1-RANK.AVG($O5,IF($M$5:$M$1000>0,$O$5:$O$1000,"")),0),"") 」を入力します。
2.必要なだけ下方向にコピーします。(完了)

*RANK.AVG関数で”達成額/未達成額”の順にランキング(1~)をつけ、11から差し引く、という方法をとります
*”実績”がマイナスのものはランキング付けそのものから除外するので、IF関数で検索対象の配列を絞り込みます
(IF関数に配列を入れたら答えも配列で返してくれるので、その絞り込んだ配列に対してRAN...続きを読む

Qユーザーフォームが消えない

今、ユーザーフォームを勉強しています。
手始めに、ラベルを表示して、2秒経ったら消す。
ということをやろうとして下記の通り書きましたが、
消えてくれません。
何処が間違っているのでしょうか。
宜しくお願いします。

Sub test2()
Load UserForm1
UserForm1.Label1.Caption = "ABC"
UserForm1.Show
Sleep 2000
UserForm1.Hide
Unload UserForm1
End Sub

Aベストアンサー

難しい質問ですね。
ご自身で参考にしたコードがあるのでしょうか。
ModalMode に関しては、なんとも言えないのは、UserForm 上で、Lable に命令を出しているからです。
それがなければ、後は補填するだけで済みます。
なお、Sleep を使っていらっしゃるようですが、Sleep 自体は、Win API ですから、もちろん、エラーが出ているはずです。

Load UserForm1
UserForm1.Label1.Caption = "ABC"
UserForm1.Show
Sleep 2000 --ここまでで、UserForm のメモリが安定しないので、Label の操作ができないのではないでしょうか。

ふつう、自己消去型のメッセージは、Win API を利用するのですが、UserForm を活かすなら、

Sub test2()
 Application.OnTime Now + TimeSerial(0, 0, 2), "UserFormColse"
 With UserForm1
  .Label1.Caption = "ABC" 'マクロが一定の終了をしないと出てこない
  .Show 'vbModeless 'この場合は、どちらでもよい。
 End With
End Sub

Sub UserFormColse()
 Unload UserForm1
End Sub

Label.Caption ="ABC" がなければ、問題はSleep の部分と余分な部分を切り落とすだけです。
こんなふうにしか私は思いつかなかったです。

その代用品として、このようなコードがあります。
Private Declare Function MessageBoxTimeoutA Lib "user32" (ByVal hWnd As Long, ByVal _
lpText As String, ByVal lpCaption As String, ByVal uType As Long, ByVal _
wLanguageId As Long, ByVal dwMilliseconds As Long) As Long

Sub TimeOutMessage()
MessageBoxTimeoutA 0&, "ABC", "メッセージ", vbMsgBoxSetForeground, 0, 2000 '2秒
End Sub

参考まで。

難しい質問ですね。
ご自身で参考にしたコードがあるのでしょうか。
ModalMode に関しては、なんとも言えないのは、UserForm 上で、Lable に命令を出しているからです。
それがなければ、後は補填するだけで済みます。
なお、Sleep を使っていらっしゃるようですが、Sleep 自体は、Win API ですから、もちろん、エラーが出ているはずです。

Load UserForm1
UserForm1.Label1.Caption = "ABC"
UserForm1.Show
Sleep 2000 --ここまでで、UserForm のメモリが安定しないので、Label の操作ができないのではないでし...続きを読む

Qエクセルでセルのデータがカタカナかどうか調べたい

セルA1の内容が、全角カタカナか半角カタカナか知りたいです。

エクセル関数又はマクロコマンドがあるはずだと信じて探していますが、見つかりません。TYPE関数では、セルの内容が数値か文字列かを調べられますが、その文字列がカタカナか英数字かなどを調べられません。ご存知の方はお教えください。

Aベストアンサー

元の 文字列が、
セルA6に あるとして、
セル内が 全て、
全角片仮名かは、
=SUMPRODUCT((CODE(MID($A$6,COLUMN(OFFSET($A$1,0,0,1,LEN($A$6))),1))=ROW($A$9506:$A$9590))+0)=LEN($A$6)

半角片仮名かは、
=SUMPRODUCT((CODE(MID($A$6,COLUMN(OFFSET($A$1,0,0,1,LEN($A$6))),1))=ROW($A$177:$A$211))+0)=LEN(A6)

で 判りますよ。

QIF関数とMODで、例えば入れた数値の倍数の時に◯が表示される……という数式を作りましたが、1.1の

IF関数とMODで、例えば入れた数値の倍数の時に◯が表示される……という数式を作りましたが、1.1の時に本当だったら1.1、2.2、3.3、4.4、5.5、6.6、7.7……で◯になるはずなのですが、10以下の数値を入れてみると、3.3、5.5、6.6、7.7、9.9は◯の表示がでてきません。
1.1、2.2、4.4、8.8しか◯が出ません。
どうしてでしょうか?

Aベストアンサー

幼稚な言い方だけど、Excel(に限らないので、PC全般的なことと理解してネ)は“小数点の計算には弱い”と理解しておきませう。
理屈っぽい人はフドーショースーテン(浮動小数点)問題などど言い始めますが・・・
それはさておき、対策を教えます。カンタンなことで、小数点抜きの整数に換算して、Excel に計算させることです。
貴方が提示した式(実はナッチョランでしたが)、を
=IF(MOD($A2*10,B$1*10)=0,"◯","")
に変更するだけで解決します。ゴチャゴチャ考えずに先ずは実行してみること!
どうなりましたか?

Q【エクセル】指定した日付に一番近い日付を抽出する関数について

エクセルの関数について質問です。


A____B_______
佐藤 2011/5/2
佐藤 2011/8/25
佐藤 2012/1/8
山田 2011/6/7
山田 2012/2/13
高橋 2010/7/10
高橋 2010/11/1
高橋 2010/12/5
高橋 2011/2/10

というデータから、




A____B________
佐藤 2011/5/1
佐藤 2011/9/1
山田 2011/6/1
山田 2011/8/1
高橋 2011/1/1
高橋 2011/2/1


のデータの日付に一番近い日付を
①のデータから抽出する関数を教えて頂きたいです。
指定日に一番近い日付を、
未来と過去から抽出する関数です。

分かりづらくて申し訳ございません。
ご教示願います。
よろしくお願いいたします。



iPhoneから送信

Aベストアンサー

もし、
D1に 入力された、
日と 同じ日を、
抜き出したいのなら、
此ですかね?


ファイル、
https://1drv.ms/x/s!AjviygfJDgV_3CyTu_uDNnR5Xlwk


尚、
ファイルは 必ず、
エクセルで 一度、
開き、

ローカルに 別名保存を、
してくださいね、

別名保存でないと、
意味が 無いですよ。


そうすれば、
閲覧も、編集も、
可能に なると、
思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング