/home/data/MITUO/Excel01/VisualBasic.txt 戻る
OFFice 2003  の場合

表示
ツールバー
Visual Basic

デザインモード  デザインモードの終了

http://www.big.or.jp/~seto/vbaref/contents.htm
--------------------------------------------------
Office365

[開発] タブを有効にするには
[ファイル] タブの [オプション] をクリックして [オプション] ダイアログ ボックスを表示します。
ダイアログ ボックスの左側にある [リボンのユーザー設定] を選択します。
ダイアログ ボックスの左側にある [コマンドの選択] で、[基本的なコマンド] を選択します。
ダイアログ ボックスの右側にある [リボンのユーザー設定] のドロップダウン リストから [メイン タブ] を選択し、[開発] チェック ボックスをオンにします。
[OK] を選択します。

------------------------------------------------------------
https://excel-ubara.com/excelvba1/




Sub カレンダー入力()
'
' カレンダー入力 Macro
' 選択セルの日付から31日分のカレンダーを入力する。
'
    ActiveCell.Range("A1:A31").Select
    Selection.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
        :=xlPinYin, DataOption1:=xlSortNormal
    Selection.DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
        xlDay, Step:=1, Trend:=False
    Selection.NumberFormatLocal = "mm/dd (aaa)"
End Sub
------------------------------------------------------
Sub Sub001()    ' カレンダー入力
Dim dd() As String
Dim i As Integer
' A1 の日付から計算します
If "" = Range("A1").Value Or False = IsDate(Range("A1").Value) Then Range("A1").Value = Format(Date, "yyyy/mm/dd")
' False True
dd = Split(Range("A1").Value, "/")
Range("E1").Value = dd(0)
Range("F1").Value = dd(1)
Range("G1").Value = dd(2)

' 縦方向
Range("B4").Select
For i = 1 To 31
    If IsDate(dd(0) & "/" & dd(1) & "/" & i) Then
        ActiveCell.Offset(0, 0).Value = dd(0) & "/" & dd(1) & "/" & i
        'Selection.NumberFormatLocal = "M/d (aaa)"
        Selection.NumberFormatLocal = "mm/dd(aaa)"
    Else
        ActiveCell.Offset(0, 0).Value = ""
    End If
    ActiveCell.Offset(1, 0).Select
Next i

' 横方向
Range("B35").Select
For i = 1 To 31
    If IsDate(dd(0) & "/" & dd(1) & "/" & i) Then
        ActiveCell.Offset(0, 0).Value = dd(0) & "/" & dd(1) & "/" & i
        Selection.NumberFormatLocal = "M/d (aaa)"
        'Selection.NumberFormatLocal = "mm/dd(aaa)"
    Else
        ActiveCell.Offset(0, 0).Value = ""
    End If
    ActiveCell.Offset(0, 1).Select
Next i

End Sub


Sub Sub002()
    ' セルの値や書式情報を削除します
    Range("B4:B34").Clear
    
End Sub
------------------------------------------------------

Sub test01()
    Range("B2").Value = "漢字"
    Sheet2.Name = Range("B2").Value
    
End Sub

-----------------------------------------------------------------

Sub 新規シート()
'
' 新規シート Macro
' 成績表をコピーして、入力用の成績表のデータをクリアする。
'
'
    Sheets("入力").Copy After:=Sheets(2)
    ActiveSheet.Shapes(1).Delete
    ActiveSheet.Name = Range("B1").Value
    Sheets("入力").Select
    Range("C4:E18").Select
    Selection.ClearContents
    ' Range("B1").Select
    ' Selection.ClearContents
    Range("B1").Value = "第x週"
End Sub

Sub test02()
    Range("B2").Value = "入力2"
    ' Worksheets(1).Name = Range("B2").Value
    Worksheets(1).Copy After:=Worksheets(1)
    Worksheets(2).Name = Range("B2").Value
    Worksheets(1).Select
    Range("B1").Value = "第x週"
End Sub

Sub test03() ' 表全体を参照する例です。
    Dim A As Range
    Dim B As Long
    Dim C As Long
    ' アクティブセル領域の指定の例です。
    Set A = Range("B5").CurrentRegion
    B = A.Rows.Count
    C = A.Columns.Count

    A.Rows(B).Font.Bold = True
    A.Columns(C).Font.Bold = True

    Set A = Nothing
End Sub

Sub test04()
    ' 縦方向にループする例です。
    Range("B4").Select
    Do While ActiveCell.Value <> ""
        ActiveCell.Offset(0, 0).Value = ActiveCell.Value & " 様"
        ActiveCell.Offset(1, 0).Select
    Loop



End Sub

Sub test5()
    ' 横方向にループする例です。
    Range("A3").Select
    Do While ActiveCell.Value <> ""
        ActiveCell.Offset(0, 0).Value = ActiveCell.Value & " 様"
        ActiveCell.Offset(0, 1).Select
    Loop
End Sub

Sub test6()    ' セル範囲のセル数など
    Range("B23") = Range("B4:E18").Count
    Range("B24") = Range("B4:E18").Rows.Count
    Range("B25") = Range("B4:E18").Columns.Count
    Range("A23") = "セル数"
    Range("A24") = "行数"
    Range("A25") = "列数"
  Range("B4:E18").Select
End Sub

Sub test1() ' ワークシートの保存についての例。
    Range("B25").Value = "d:\temp\test001.xls"
    Worksheets(1).SaveAs Filename:=Range("B25").Value
    Workbooks("Book002.xls").SaveAs Filename:=Range("B25").Value
    Application.Quit
    ' Windows(z).Close True
End Sub

Sub test01() ' オートフィルの例です。
    Range("B3").Value = 1
    Range("B4").Value = 2
    Range("B3:B4").AutoFill Destination:=Range("B3:B10")
    Range("C3").Value = "日"
    Range("C3").AutoFill Destination:=Range("C3:C10")
End Sub

Sub t01()   ' Yes / No の入力例です。
    Dim i As Integer
    i = MsgBox("test ?", vbYesNo, "test2")
    i = MsgBox("test ?", vbOKOnly, "test2")
    If i = vbYes Then
        Range("A2").Value = "Yes"
    Else
        Range("A2").Value = "No"
    End If
End Sub




If (Range("E12").Value - Range("G12").Value) >= 0 Then
    Range("I12").Value = Range("E12").Value - Range("G12").Value
Else
    Range("I12").Value = ""
End If

If Range("I19").Value = "" Then
    Range("J19").Value = ""
Else
    Range("J19").Value = Range("I19").Value * 1200
End If

Range("E15").Value = Range("J13").Value



If ActiveCell.Value = "①データのクリア" Then

<使用例 セル「A1」を黄色で塗りつぶす>
Worksheets("Sheet1").Range("A1").Interior.Color = RGB(255, 255, 0)



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ' Range("I1").Value = Sub02()
    
If Range("E10").Value = Range("E11").Value Then
    ddd = Sub01("d:\temp\keisan003.txt", 0)
    chk = MsgBox("データのダウンロードを実行されましたか?", vbYesNo, ddd & " のデータ? (日時確認)")
    
    If chk = vbYes Then
      
    Dim fileNo As Integer
    Dim buf
    Dim buf2


Function F01(z As String) As Integer
    F01 = Len(z)
End Function


' データを抽出する
Sub Sub001()
    Range("A3").AutoFilter field:=4, Criteria1:=88
End Sub

' ブックを開いた時に処理を実行する
Private Sub Workbook_Open()
    Worksheets("入力").Select
End Sub



Sub Sub004()    ' データの並び替えの例
    Worksheets("入力").Activate
    Worksheets("入力").Range("A4:F18").Sort Key1:=Range("E4"), order1:=xlDescending
    'Worksheets("入力").Range("A4:F18").Sort Key1:=Range("A4"), order1:=xlAscending
End Sub


' 1/2 ダブルクリックして下に入力する。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim i As Integer
    Dim j As Integer
    'Range("A25").Value = ActiveCell.Column
    'Range("A26").Value = ActiveCell.Row
    If 2 = ActiveCell.Column Then
        i = MsgBox(ActiveCell.Value, vbOKOnly, "シート2に入力")
        '
        If "" = Sheet2.Range("B4").Offset(j, 0).Value Then
            Sheet2.Range("B4").Offset(j, 0).Value = ActiveCell.Value
            Sheet2.Range("B4").Offset(j, 1).Value = ActiveCell.Offset(0, 1).Value
            Sheet2.Range("B4").Offset(j, 2).Value = ActiveCell.Offset(0, 2).Value
            Sheet2.Range("B4").Offset(j, 3).Value = ActiveCell.Offset(0, 3).Value
            Sheet2.Range("B4").Offset(j, 4).Value = ActiveCell.Offset(0, 4).Value
        End If
        '
        Do Until "" = Sheet2.Range("B7").Offset(j, 0).Value
            j = j + 1
        Loop
        Sheet2.Range("B7").Offset(j, 0).Value = ActiveCell.Value
        Sheet2.Range("B7").Offset(j, 1).Value = ActiveCell.Offset(0, 1).Value
        Sheet2.Range("B7").Offset(j, 2).Value = ActiveCell.Offset(0, 2).Value
        Sheet2.Range("B7").Offset(j, 3).Value = ActiveCell.Offset(0, 3).Value
    Else
        i = MsgBox(ActiveCell.Value, vbOKOnly, "氏名をダブルクリック")
    End If
End Sub

' 2/2 こちらに入力する。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim j As Integer
    If ActiveCell.Value = "S2クリア" Then
            Sheet2.Range("B4").Offset(j, 0).Value = ""
            Sheet2.Range("B4").Offset(j, 1).Value = ""
            Sheet2.Range("B4").Offset(j, 2).Value = ""
            Sheet2.Range("B4").Offset(j, 3).Value = ""
            Sheet2.Range("B4").Offset(j, 4).Value = ""
        For j = 0 To 10
            Sheet2.Range("B7").Offset(j, 0).Value = ""
            Sheet2.Range("B7").Offset(j, 1).Value = ""
            Sheet2.Range("B7").Offset(j, 2).Value = ""
            Sheet2.Range("B7").Offset(j, 3).Value = ""
        Next j
        i = MsgBox("シート2クリア", vbOKOnly, "シート2クリア")
    End If
End Sub


' ワークシートの SelectionChange または Change に入れる(入力すると計算される)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Range("D2") = 60 * Val(Left(Range("D1").Text, 1)) + Val(Right(Range("D1").Text, 2))
End Sub


Sub Sub01()
'Range("A2") = Len(Range("D1").Text)
Range("D2") = 60 * Val(Left(Range("D1").Text, 1)) + Val(Right(Range("D1").Text, 2))
'Range("A4") = Val(Right(Range("D1").Text, 2))
End Sub



' 最初に自動起動させる
Private Sub Workbook_Open()
    Call UserForm1.Show
End Sub

--------------------------------------------
ブックを開いたときにユーザーフォームを表示し、一定時刻が経過したら自動的に閉じる方法をご紹介します。アプリケーション起動時にロゴが表示されるのと同じような動作をさせることができます。

(1)まず、表示したいフォームを用意します。このフォームを「UserForm1」とします。
プックオープン時に発生する「Open」イベントで、ユーザーフォーム「UserForm1」を開きます。

●ThisWorkbookモジュール●
Private Sub Workbook_Open()
    UserForm1.Show
End Sub

(2)ユーザーフォームがアクティブになったときに発生する「Activate」イベントで、指定した時刻にマクロを実行する処理を記述します。
特定の日時、または特定の期間の経過後にマクロを実行するには、ApplicationオブジェクトのOnTimeメソッドを使用します。
ここでは、2秒後に「KillTheForm」というマクロを呼び出します。

●UserFomr1のフォームモジュール●
Private Sub UserForm_Activate()
    Application.OnTime Now + TimeValue("00:00:02"), "KillTheForm"
End Sub

(3)標準モジュールにユーザーフォームをメモリから削除するマクロを作成します。

●標準モジュール●
Sub KillTheForm()
    Unload UserForm1
End Sub

●補足●

UserForm1をアプリケーションモーダルで表示します。ユーザーフォーム表示中はExcelの操作はできません。ただし、[×]ボタンをクリックするとKillTheFormマクロの実行前にユーザーフォームを閉じることができます。


' ファイルの有る無し等
Private Sub UserForm_Click()

    Dim stra() As String
    Dim fileNo As Integer
    Dim buf
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim FSO As Object
    Dim Tgt As String
    Dim z As String
    Tgt = "d:\vl60\data\yasumi9.txt"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FileExists(Tgt) Then
        Label1.Caption = Tgt

    Else
        z = ThisWorkbook.Path
        If "\" <> Right(z, 1) Then z = z & "\"
        Tgt = z & "yasumi.txt"
        If FSO.FileExists(Tgt) Then
            Label1.Caption = Tgt
        Else
        '.Path
        
            Label1.Caption = "nasi"
            
        End If
    End If

End Sub
戻る