A1セルに「2021年9月5日(日)です」と表示したいのですが、下記のマクロを実行すると「9月04日(木)です」と表示され、日付も曜日も違う結果が表示されてしまいます。
初心者で良く分からないため、マクロに詳しい方、教えていただけないでしょうか。
Sub test()
Dim niti As Date
niti = "2021/ 9 /5"
Range("A1").Value = Month(niti) & "月" & Format(Day(niti), "dd") & "日" & Format(Day(niti), "(aaa)") & "です"
End Sub
ネットから下記のコードを見つけたのですが、1つのシートに複数のオートシェイプの色塗りを変更する方法を教えてください。
例えばセル"A1"には数値の1と"A2"には数値2を入力したら、
オートシェイプAにはセル"A1"に対応した色塗り『赤色』を
オートシェイプBにはセル"A2"に対応した色塗り『黄色』といった感じです。
下記のコードをいくつも繋げれば、複数のオートシェイプの色塗りが出来ると思ったのですが、コードを繋げる方法がわかりません。その他に何か良い方法がありましたら教えてください。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) <> "A1" Then Exit Sub
With ActiveSheet.Shapes("ABC").Fill.ForeColor
Select Case Target.Value
Case Is = "赤"
.SchemeColor = 2
Case Is = "黄"
.SchemeColor = 5
Case Is = "緑"
.SchemeColor = 3
Case Is = "青"
.SchemeColor = 4
Case Else
.SchemeColor = 1
End Select
End With
End Sub
ネットから下記のコードを見つけたのですが、1つのシートに複数のオートシェイプの色塗りを変更する方法を教えてください。
例えばセル"A1"には数値の1と"A2"には数値2を入力したら、
オートシェイプAにはセル"A1"に対応した色塗り『赤色』を
オートシェイプBにはセル"A2"に対応した色塗り『黄色』といった感じです。
下記のコードをいくつも繋げれば、複数のオートシェイプの色塗りが出来ると思ったのですが、コードを繋げる方法がわかりません。その他に何か良い方法がありましたら教えてください。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) <> "A1" Then Exit Sub
With ActiveSheet.Shapes("ABC").Fill.ForeColor
Select Case Target.Value
Case Is = "赤"
.SchemeColor = 2
Case Is = "黄"
.SchemeColor = 5
Case Is = "緑"
.SchemeColor = 3
Case Is = "青"
.SchemeColor = 4
Case Else
.SchemeColor = 1
End Select
End With
End Sub
Excel の1つのファイル内の偶数番シートのA列が空白であるセルを行ごと削除したいのですが、下のコードではうまく動かないです。
シート番号はSheet(2)から(90)までです。
Sub 空白行削除()
Dim i
For i = 2 To 90 Step 2
Worksheets(i).Activate
Columns("A:A").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Next i
End Sub
エクセルのワークシートでVBAでセル選択するコードで理解に苦しむことがあります。
通常、Cells(2, 1)はセル番地で言えばA2セル
Cells(4, 1)はセル番地で言えばA4セルです。
しかし、
With .Range("B5:B15")でくくれば
.Cells(2, 1)はセル番地で言えばB6セルだと思います。
.Cells(4, 1) はセル番地で言えばB8セルだと思います。
ところが下記のコードを動かすと、なぜかC10:C12が選択されてしまいます。
この理屈がわかりません。
Sub test02()
With Sheets("Sheet1")
With .Range("B5:B15")
.Range(.Cells(2, 1), .Cells(4, 1)).Select
End With
End With
End Sub
なお、
.Range(.Cells(2, 1), .Cells(4, 1)).Selectを
.Range(“A2:A4”).Selectに書きかえると、希望のB6:B8が選択されます。
30枚ほどのシートの表を一挙に変更したいです。ところが、各シートに次のコードが入っているため、右クリックしてコピーとか一切使えません。各シートの変更ができるまで、右クリック使いたいです。何か方法ありませんでしょうか?
' 画面の一番上表示
Dim hr As Range
Set hr = Range("A1") '左上隅セルを設定
ActiveWindow.ScrollRow = hr.Row '行の一番上にスクロール
ActiveWindow.ScrollColumn = hr.Column '列の一番左にスクロール
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示
If Target.Row > 14 And Target.Row < 45 And Target.Column > 13 And Target.Column < 15 Then
明細入力フォーム.Show
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 1 And Target.Column < 3 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 3 And Target.Column < 5 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 5 And Target.Column < 7 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 8 And Target.Column < 10 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 2 And Target.Column < 4 Then
UserForm3.Show
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 4 And Target.Column < 6 Then
UserForm3.Show
End If
If Target.Row > 36 And Target.Row < 45 And Target.Column > 6 And Target.Column < 8 Then
UserForm3.Show
End If
If Target.Row > 36 And Target.Row < 44 And Target.Column > 9 And Target.Column < 11 Then
UserForm3.Show
End If
End Sub
お手数ですが、回答お願いします。
VBAでループ文を勉強しております。
最初のfor 文で1000行、1000列に文字を入力、
次のdo 文でその文字を全部消したいのですが、うまくいきません。
またfor 文で1000行、1000列で文字を入力しているのですが、
時間がかかるのは仕方がないことなのでしょうか?
お手数ですが、ご教授お願いします。
Sub 文字入力()
Dim i As long
Dim t As long
For i = 1 To 1000
For t = 1 To 1000
Cells(i, t) = "wooo"
Next t
Next i
End Sub
=================================================================
Sub 文字入力消し()
Dim i As long
Dim t As long
i = 1
Do
t = 1
Do
Cells(i, t) = ""
t = t + 1
Loop Until Cells(i, t) = ""
i = i + 1
Loop Until Cells(i, t) = ""
End Sub
お手数ですが、回答お願いします。
VBAでループ文を勉強しております。
最初のfor 文で1000行、1000列に文字を入力、
次のdo 文でその文字を全部消したいのですが、うまくいきません。
またfor 文で1000行、1000列で文字を入力しているのですが、
時間がかかるのは仕方がないことなのでしょうか?
お手数ですが、ご教授お願いします。
Sub 文字入力()
Dim i As long
Dim t As long
For i = 1 To 1000
For t = 1 To 1000
Cells(i, t) = "wooo"
Next t
Next i
End Sub
=================================================================
Sub 文字入力消し()
Dim i As long
Dim t As long
i = 1
Do
t = 1
Do
Cells(i, t) = ""
t = t + 1
Loop Until Cells(i, t) = ""
i = i + 1
Loop Until Cells(i, t) = ""
End Sub