No.8ベストアンサー
- 回答日時:
この内容では、VBAで処理する方法よりないでしょう。
それで良ければ、次の手順でテストしてみてください。
・使用しているシートのシート名タブを右クリックして「コードの表示」を指定します。
・開いたコードウィンドウに下記コードをコピーして貼り付けます。
・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
・メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
「中」にして[OK]します。
・以上で設定完了です。 「作業完了」に○を入れてみてください。
(※ 既に「請求月」が入力されている行の"○"をフィルドラッグコピーした場合は、
そのコピー元の「請求月」も、現時点での「請求月」に変更されます。
また、一度入れた"○"を消去した場合は、「請求月」も空白になります。)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Set Target = Application.Intersect(Range("B:B"), Target)
If Target Is Nothing Then Exit Sub
For Each Rng In Target
If Rng.Value = "○" Then
Application.EnableEvents = False
If Day(Date) > 20 Then
Rng.Offset(, 1).Value = Month(DateAdd("m", 1, Date)) & "月"
Else
Rng.Offset(, 1).Value = Month(Date) & "月"
End If
ElseIf Rng.Value = vbNullString Then
Application.EnableEvents = False
Rng.Offset(, 1).Value = vbNullString
End If
Application.EnableEvents = True
Next Rng
End Sub
No.7
- 回答日時:
' #3です。
' 先のは忘れてください。<m(__)m>
' 次のをWorkbook の SheetChangeイベントに貼ってください。
' ドラッグコピーに対応していないのは同じですが。。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Trim(Target.Text) = "○" And Target.Column = 2 Then
Sh.Cells(Target.Row, 3) = IIf(Day(Date) <= 20, _
Month(Date), Month(DateAdd("m", 1, Date))) & "月"
End If
End Sub
No.6
- 回答日時:
(1)B列に円を入れるとする。
○を入れるのは、作業完了日に必ず入力するものとして、翌日にずれないものとする。(2)D列のD2に関数式=IF(B2="○",TODAY(),"")を入れる。そしてD3以下に式を複写する。
(3)E列のE2に関数式=IF(D2="","",IF(DAY(D2)<21,EOMONTH(D2,0),EOMONTH(D2,1)))
をいれ、E3以下に式を複写する。
(4)#1でご指摘の「明日、同じファイルを開くと、TODAY()の値が変わっているから」を避けます。
Sheet1のChangeイベントとして
VBE画面に
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Cells(Target.Row, "D").Copy
Cells(Target.Row, "D").Select
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End If
End Sub
を貼りつける。
(5)○をドラッグで持ってくる(ケースとしては稀と思うが)と、エラーになりますが、これをさせないことは出来ないかと思案中ですが判りません。
関数だけで、近いところまで出来るのに残念。
E列をXX月で出したいときは、
=MONTH(E2)&"月のE2に上記の式を挟むようにしてください。
No.5
- 回答日時:
#1です。
作業完了の、○の代わりに、作業完了日を手入力すると、関数でできます。
C1: =IF(B1="","",IF(DAY(B1)>20,IF(MONTH(B1)=12,1,MONTH(B1)+1),MONTH(B1)))
No.4
- 回答日時:
#3 です。
' ちょっと、簡単にしました。
' 貼り付けるシート名は Sheet1 にしてください。
' もしくは Sheets("Sheet1") のところを使用中
' のシート名にかえてください。
Option Explicit
Dim myRow As Long
Dim myCol As Long
Private Sub Worksheet_Change(ByVal Target As Range)
If myCol = 2 And Trim(Cells(myRow, myCol).Value) = "○" Then
Test ActiveCell.Value, myRow, myCol
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
myRow = ActiveCell.Row
myCol = ActiveCell.Column
End Sub
Private Sub Test(myVal As String, myRow As Long, myCol As Long)
If ActiveCell.Column = 2 Then
Sheets("Sheet1").Cells(myRow, 3) = IIf(Day(Date) <= 20, _
Month(Date), Month(DateAdd("m", 1, Date))) & "月"
End If
End Sub
No.3
- 回答日時:
' #2さんご指摘の"○"をドラッグコピーした時はイベントが発生しないので
' コピペ する必要がありますが、次のコードでも可能です。
' ただ、関数を使うとやっぱり再計算後の値が一緒になってしまう気がするん
' ですよね。
' Alt+F11でVBAエディタを起動し、オブジェクトイクスプローラーで、Sheet1
' をダブルクリック後、次のコードを貼ってください。
' とりあえず、ご参考に。
Option Explicit
Dim myRow As Long
Dim myCol As Long
Private Sub Worksheet_Change(ByVal Target As Range)
If myCol = 2 And Trim(Cells(myRow, myCol).Value) = "○" Then
Test ActiveCell.Value, myRow, myCol
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
myRow = ActiveCell.Row
myCol = ActiveCell.Column
End Sub
Private Sub Test(myVal As String, myRow As Long, myCol As Long)
If ActiveCell.Column = 2 Then
If JudgeDate = -1 Then
If Month(Date) = 12 Then
Sheets("sheet1").Cells(myRow, 3) = 1 & "月"
Else
Sheets("sheet1").Cells(myRow, 3) = Month(Date) + 1 & "月"
End If
Else
Sheets("sheet1").Cells(myRow, 3) = Month(Date) & "月"
End If
End If
End Sub
Function JudgeDate() As Boolean
If Day(Date) > 20 Then
JudgeDate = -1
Else
JudgeDate = 0
End If
End Function
No.2
- 回答日時:
# どのアプリケーションの質問なのかぐらいは最低限書きましょう。
# WordやPowerPointの質問には見えないので、一応、Excelだという前提でコメントします。
以下の手順でできます。
(1) ワークブックを起動し、キーボードの[Alt]キー、[F11]キーを同時に押す。
(2) メニューバーから[挿入] - [標準モジュール]を選択する。
(3) 下記のソースコードをコピペする。
Option Explicit
Public Function GetShimeBi(ByVal Target As Range)
With Application.ActiveSheet
If Trim$(Target.Value) = "○" Then
GetShimeBi = Format$(DateAdd("m", 1, DateAdd("d", -20, Date)), "m月")
Else
GetShimeBi = ""
End If
End With
End Function
(4) ワークシート上で[作業完了]がB列なら、[請求月]の各セルに
=GetShimeBi(B1)
という式を記述すればOKです。(「B1」の「1」は、行番号です)
※ 日付が変わった場合でも、[作業完了]列に変更がなければ、[請求月]は更新されないので問題ありません。
※ WorkSheet_Change イベントプロシージャを使う方法では、「○」が入力されたセルをドラッグして値をコピーした場合に正しく動作しません。
No.1
- 回答日時:
これを関数でやるのは難しいです。
といいますのは、TODAY()という関数で、今日の日付けを取得できますが、今日このファイルを保存して、明日、同じファイルを開くと、TODAY()の値が変わっているからです。
マクロでならできますが、やりますか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 財務・会計・経理 インボイス請求書の書き方 4 2023/08/28 14:01
- Excel(エクセル) PDFファイルに日付を名前にして保存したい。 エクセル2019でワークシートに請求書のフォームを作り 2 2023/05/27 11:13
- 雇用保険 [失業給付]最終認定日前に扶養に入る場合 4 2022/09/30 11:31
- 確定申告 e-taxで開業届を出す方法がわかりません 1 2022/06/01 19:00
- Excel(エクセル) Excelシフト表 固定シフトの自動変換化 1 2022/04/14 16:10
- 健康保険 傷病手当金の申請について 3 2022/07/09 09:14
- その他(お金・保険・資産運用) 退職金に対しての質問です。 6月末に退職する事になったのですが、 会社の給料日が20日締めの28日払 1 2023/06/15 23:00
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- YouTube 何日にGoogle用のYouTubepremiumを解約するのがお得 2 2023/08/23 05:40
- 会社・職場 有給休暇取得日に引き継ぎの業務命令を断ったところけん責処分になりましたが妥当でしょうか? 6 2023/02/14 16:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
腕を見たら黄色くなってる部分...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
精子が黄色?
-
勃起する時って痛いんですか? ...
-
尿検査前日に自慰行為した時の...
-
尿検査の前日は自慰控えたほう...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
精子に血が・・・
-
中出しをするとお腹が痛い・・・。
-
納豆食べた後の尿の納豆臭は何故?
-
甲状腺腫れ
-
EXCELで式からグラフを描くには?
-
EXCELで条件付き書式で空白セル...
-
筋トレするとチンコが縮んじゃ...
-
爪が紫色?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報