電子書籍の厳選無料作品が豊富!

図の上のような入力表があります。
下の表のようにマクロで行いたいです。

やりたいことは、
・A2、B2セルに月と日を入れるとC2に曜日を自動で入れる。
・D2~F2は手入力します。
・A列を範囲選択をして、Ctrl+dでA列の値をコピーします。
・Ctrl+Dと同時にB~E列は2行目の値を範囲選択した最終行までコピー。
・F列はF2の数字の連番を範囲内まで入れる。

Ctrl+Dでコピーする範囲はその時々で範囲は変わります。
F2の番号もその時々で変わります。

上記のことをCtrl+dキーでコピーした瞬間に行いたいです。

マクロのコードを教えていただけますか?

「エクセルのマクロを教えてください」の質問画像

A 回答 (4件)

こんにちは


>マクロのコードを教えていただけますか?
表組とやりたい事だけでは何を教えれば良いのかわかりません。
すべて?と言う事であれば回答される事は少ないです。(ご理解ください)
少々暇がありますので出来るところまで

マクロの実行(トリガー)は、実行タイミングが重要な要素になります。

>A2、B2セルに月と日を入れるとC2に曜日を自動で入れる。
これは対象のシートのセルに入力した時

>上記のことをCtrl+dキーでコピーした瞬間に行いたいです。
これは、ショートカットキーを押した時となります。

多くのショートカットキーは機能がすでに割り当てられており
マクロのトリガーを設定すると割り当てられている既存の機能は無効になります(対象のブックで)

もう一つ、プログラム内で書かれた範囲、対象などは限定的になるケースが多く、表組などを変更した場合、それに合わせてプログラムし直す必要があります。
十分な理解が必要で、分からない場合は学習する意欲も必要になります。
更にマクロで実行した結果は元に戻す事が出来ません。
仮にエラーなどが発生した場合でも、そのエラーが発生した時点まで処理、出力された内容を戻す事が出来ません。

サンプルを書きますが以上の点を留意してテストやコードを理解するようにしてください。
処理の書き方は色々あります。あくまで一例です。

>上記のことをCtrl+dキーでコピーした瞬間に行いたいです。
既存ショートカットにマクロを割り当てるのは、好まないので
Ctrl+Shift+D で説明します。
割り当て方法はいくつかありますが、自動記録を使う方法です。
マクロの記録を実施します。
初めのダイアログのショートカットキー設定部分で
Shiftキーを押しながらdキーを押下してOKを押下

どこか選択されていないセルを選択し、記録を終了します。

Altキー+F11キーでVBEを表示、標準モジュール内のモジュールに
Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+Shift+D
'
Range("A2").Select
End Sub
が記載されていると思います。(Macro1は対象ブックで初めて記録した時の場合)

上記を下記のように書き換えます
Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+Shift+D
'
Dim rng As Range
Set rng = Selection
With rng
.Resize(, 5).FillDown
.Item(1).Offset(, 5).AutoFill Destination:=rng.Offset(, 5), Type:=xlFillSeries
'.Item(1).Select
End With
End Sub

実行トリガーはCtrl+Shift+Dです

>A2、B2セルに月と日を入れるとC2に曜日を自動で入れる。
VBEの左にある(ない場合は表示)プロジェクトエクスプローラーで
対象シートオブジェクトをダブルクリックし表示されたカーソル位置に

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:B50")) Is Nothing Then
Application.EnableEvents = False
With Target
If IsNumeric(Cells(.Row, 1).Value) And IsNumeric(Cells(.Row, 2).Value) Then
Cells(.Row, 3).Value = _
WeekdayName(Weekday(DateSerial(Year(Date), Cells(.Row, 1).Value, Cells(.Row, 2).Value)), True)
End If
End With
Application.EnableEvents = True
End If
End Sub

ご質問の表組、表示の内容で範囲は50行迄としています
適時変更して参考としてください。
実行条件で縛りを設定していますが、エラー対策はありません。
    • good
    • 1
この回答へのお礼

できました!
ありがとうございました。

お礼日時:2022/02/04 13:37

全部は書けないのでサワリだけですが、


Private Sub Worksheet_Change(ByVal Target As Range)
  Debug.Print Target.Address
End Sub
    • good
    • 0

多分数式で済むという事はお分かりかなと感じます。


問題としてはショートカットキーを用いての練習課題でしょうか?
それはマクロが不明なのかショートカットキーが不明なのかによるかも?
私はショートカットキーをほぼ使いませんので、ちょっと質問文に興味あっての戯言ですね
    • good
    • 0
この回答へのお礼

関数を使えばできますが、その後も含めマクロでの処理を考えています。

お礼日時:2022/02/04 10:49

おはようございます。



すみませんが、マクロでないとダメでしょうか?

セルC2に、最初に下記を入れておけば、曜日は出せます。
(年の部分は考える必要はありますが、そこはマクロでも同じかと。)
=TEXT(DATE(2022,A2,B2),"aaa")

その後、例えば、A2:C9の範囲を選んで、Ctrl + Dで結果が出るかと。
    • good
    • 0
この回答へのお礼

その他の処理もマクロで行うので質問の内容もマクロで行いたいです。
入力完了して別シートにデータを移します。
そして入力したシートの値はクリアされます。

お礼日時:2022/02/04 10:49

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