Sub MoveTask()
Dim w1 As Worksheet
Dim w2 As Worksheet
Set w1 = Worksheets("未完了")
Set w2 = Worksheets("完了")
Dim r1 As Long
Dim r2 As Long
r1 = ActiveCell.Row
r2 = w2.Cells(w2.Rows.Count, "A").End(xlUp).Row + 1
w2.Range(w2.Cells(r2, "A"), w2.Cells(r2, "C")).Value = _
w1.Range(w1.Cells(r1, "A"), w1.Cells(r1, "C")).Value
w1.Rows(r1).Delete
End Sub
では、コードについて解説していきます。
Dim w1 As Worksheet
Dim w2 As Worksheet
Set w1 = Worksheets("未完了")
Set w2 = Worksheets("完了")
Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sub Roulette()
Dim ch As Chart
Set ch = Worksheets("ルーレット").ChartObjects("グラフ 1").Chart
Dim startN As Long, lastN As Long
startN = ch.ChartGroups(1).FirstSliceAngle
lastN = Int((360 + 1) * Rnd) + 360 * 6
Dim n As Long
n = startN
Do While n < lastN
DoEvents
ch.ChartGroups(1).FirstSliceAngle = n Mod 360
Sleep 5
If lastN - n > 360 * 3 Then
n = n + 10
Else
n = n + 10 - Int((n - 360 * 3) / (lastN - 360 * 3) * 10)
End If
Loop
End Sub
では、コードについて解説していきます。 ※複雑なコードのため簡単に解説します。
Option Explicit
変数宣言を強制する際に記述するものです。 変数宣言を省略したい場合は、記述する必要はありません。
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Windows APIにある「Sleep」というプロシージャを使えるようにするための宣言です。
Dim ch As Chart
Set ch = Worksheets("ルーレット").ChartObjects("グラフ 1").Chart
Dim startN As Long, lastN As Long
startN = ch.ChartGroups(1).FirstSliceAngle
lastN = Int((360 + 1) * Rnd) + 360 * 6
DoEvents
ch.ChartGroups(1).FirstSliceAngle = n Mod 360
Sleep 5
If lastN - n > 360 * 3 Then
n = n + 10
Else
n = n + 10 - Int((n - 360 * 3) / (lastN - 360 * 3) * 10)
End If
Sub ToggleSheetView()
Dim ws As Worksheet
Set ws = Worksheets("設定")
Dim m As Long
m = Month(Date)
Dim ckRng As Range
Set ckRng = ws.Range("B3")
ckRng.Value = Not ckRng.Value
Dim i As Long
For i = 1 To 12
On Error Resume Next
With Worksheets(i & "月")
If i = m Or ckRng.Value Then
.Visible = xlSheetVisible
Else
.Visible = xlSheetHidden
End If
End With
On Error GoTo 0
Next i
ws.Activate
End Sub
では、コードについて解説していきます。
Dim ws As Worksheet
Set ws = Worksheets("設定")
Dim m As Long
m = Month(Date)
Dim oldValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge = 1 And _
Target.Row >= 2 And _
Target.Column <= 3 Then
With Worksheets("変更履歴")
.Rows(2).Insert CopyOrigin:=xlFormatFromRightOrBelow
.Range("A2").Value = Now
.Range("B2").Value = Target.Address(False, False)
.Range("C2").Value = oldValue
.Range("D2").Value = Target.Value
End With
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.CountLarge = 1 Then
oldValue = Target.Value
End If
End Sub
では、コードについて解説していきます。
Private Sub Worksheet_Change(ByVal Target As Range)
'省略
End Sub
Dim oldValue As Variant
'省略
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.CountLarge = 1 Then
oldValue = Target.Value
End If
End Sub
With Worksheets("変更履歴")
.Rows(2).Insert CopyOrigin:=xlFormatFromRightOrBelow
.Range("A2").Value = Now
.Range("B2").Value = Target.Address(False, False)
.Range("C2").Value = oldValue
.Range("D2").Value = Target.Value
End With
Sub 表示切替()
Dim no As Long
no = Range("B2").Value
Columns("D:MY").Hidden = True
Range( _
Columns(no * 7 - 3), _
Columns(no * 7 + 3)).Hidden = False
End Sub
Sub GenerateFolders()
Dim i As Long
For i = 3 To 32
'保存先のフォルダのパスを貼り付けて「\」を追加
MkDir "A:\出力\" & _
Cells(i, "B").Value & "_" & _
Cells(i, "C").Value
Next i
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Select Case Target.Address(False, False)
Case "F3"
Range("D14").Value = Target.Value
Case "F4"
Range("D15").Value = Target.Value
Case "B4"
Range("D16").Value = Target.Value
Case "D6"
Range("D17").Value = Target.Value
Case "C7"
Range("D18").Value = Target.Value
Case "D14"
Range("F3").Value = Target.Value
Case "D15"
Range("F4").Value = Target.Value
Case "D16"
Range("B4").Value = Target.Value
Case "D17"
Range("D6").Value = Target.Value
Case "D18"
Range("C7").Value = Target.Value
End Select
Application.EnableEvents = True
End Sub
では、コードについて解説していきます。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'省略
Application.EnableEvents = True
End Sub
Select Case Target.Address(False, False)
Case "F3"
Range("D14").Value = Target.Value
Case "F4"
Range("D15").Value = Target.Value
Case "B4"
Range("D16").Value = Target.Value
Case "D6"
Range("D17").Value = Target.Value
Case "C7"
Range("D18").Value = Target.Value
Case "D14"
Range("F3").Value = Target.Value
Case "D15"
Range("F4").Value = Target.Value
Case "D16"
Range("B4").Value = Target.Value
Case "D17"
Range("D6").Value = Target.Value
Case "D18"
Range("C7").Value = Target.Value
End Select
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Row >= 3 And Target.Row <= 10 Then
If Target.Column >= 2 And Target.Column <= 3 Then
Cells(Target.Row, Target.Column + 3).Value = Target.Value
End If
If Target.Column >= 5 And Target.Column <= 6 Then
Cells(Target.Row, Target.Column - 3).Value = Target.Value
End If
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range: Set r = Target
If r.CountLarge = 1 And _
r.Row >= 4 And r.Row <= 23 And _
r.Column >= 3 And r.Column <= 6 Then
Application.EnableEvents = False
Dim r1 As Range: Set r1 = Cells(r.Row, "C")
Dim r2 As Range: Set r2 = Cells(r.Row, "D")
Dim r3 As Range: Set r3 = Cells(r.Row, "E")
Dim r4 As Range: Set r4 = Cells(r.Row, "F")
If r.Column = 3 Then
If r.Value Then
Range(r2, r4).Value = True
Else
Range(r2, r4).Value = False
End If
Else
If r2 And r3 And r4 Then
r1.Value = True
Else
r1.Value = False
End If
End If
Application.EnableEvents = True
End If
End Sub
では、コードについて解説していきます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range: Set r = Target
If r.CountLarge = 1 And _
r.Row >= 4 And r.Row <= 23 And _
r.Column >= 3 And r.Column <= 6 Then
Application.EnableEvents = False
'省略
Application.EnableEvents = True
End If
End Sub
Dim r1 As Range: Set r1 = Cells(r.Row, "C")
Dim r2 As Range: Set r2 = Cells(r.Row, "D")
Dim r3 As Range: Set r3 = Cells(r.Row, "E")
Dim r4 As Range: Set r4 = Cells(r.Row, "F")
If r.Column = 3 Then
If r.Value Then
Range(r2, r4).Value = True
Else
Range(r2, r4).Value = False
End If
Else
If r2 And r3 And r4 Then
r1.Value = True
Else
r1.Value = False
End If
End If
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.CountLarge = 1 And _
Target.Row >= 3 And _
Target.Row <= 21 And _
Target.Column >= 5 And _
Target.Column <= 6 Then
Cancel = True
Select Case Target.Column
Case 5:
Cells(Target.Row, "D").Value = _
Cells(Target.Row, "D").Value - 1
Case 6:
Cells(Target.Row, "D").Value = _
Cells(Target.Row, "D").Value + 1
End Select
End If
End Sub
では、コードについて解説していきます。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.CountLarge = 1 And _
Target.Row >= 3 And _
Target.Row <= 21 And _
Target.Column >= 5 And _
Target.Column <= 6 Then
'省略
End If
End Sub
Sub ExportToPDF()
Dim fPath As String
fPath = ThisWorkbook.Path
Worksheets("PDF出力").ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=fPath & "\Sample.pdf"
End Sub
Sub ExportToPDF(fName As String)
Dim fPath As String
fPath = ThisWorkbook.Path
Worksheets("PDF出力").ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=fPath & "\" & fName & ".pdf"
End Sub
では、修正点について解説していきます。
Sub ExportToPDF(fName As String)
…
Filename:=fPath & "\" & fName & ".pdf"
Sub ExportAll()
Dim ws As Worksheet
Set ws = Worksheets("PDF出力")
Dim val As String
val = "A"
ws.Range("C2").Value = val
Call ExportToPDF(val)
val = "B"
ws.Range("C2").Value = val
Call ExportToPDF(val)
val = "C"
ws.Range("C2").Value = val
Call ExportToPDF(val)
End Sub
では、コードについて解説していきます。
Dim ws As Worksheet
Set ws = Worksheets("PDF出力")
「ws」という変数(入れ物)を用意し、「PDF出力」シートの情報を「ws」に割り当てています。
Dim val As String
val = "A"
ws.Range("C2").Value = val
Call ExportToPDF(val)
Sub ImportSalesData()
Dim fP As String, fN As String
fP = InputBox("フォルダパス")
fN = Dir(fP & "\*.xlsx")
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Dim r As Long, c As Long
r = 3
Do While fN <> ""
With Workbooks.Open(fP & "\" & fN)
For c = 2 To 5
ws.Cells(r, c).Value = _
.Worksheets(1).Cells(c, "C").Value
Next c
.Close
End With
r = r + 1
fN = Dir()
Loop
End Sub
では、コードについて解説していきます。
Dim fP As String, fN As String
fP = InputBox("フォルダパス")
fN = Dir(fP & "\*.xlsx")