VB, VBA

사진처럼 해당날짜의 조건에 맞는통계를 구하는 매크로를 넣고싶은데요

버튼을 누르면 통계부분에
< 일자, 주/야,이름 >이렇게 세조건이 맞는 셀의 개수가 들어갔으면 합니다

김-1
박-1 
이것도 김, 박에 같이 포함됩니다

도와주세요~!

첨부 이미지





일본어판 윈도우라서... 한글로 인식을 못하므로 보기를 조금 바꿔서 했습니다.

첨부 이미지




소스는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub ボタン1_Click()
 
For i = 2 To 10000 Step 1
 
    key1 = ActiveSheet.Cells(i, 1).Value
    Key2 = ActiveSheet.Cells(i, 2).Value
    key3 = ActiveSheet.Cells(i, 3).Value
    
    If key1 = "" Then
        Exit For
    Else
        If key1 = "2018/01/18" Then
            If Key2 = "A" Then
                If InStr(key3, "kim"> 0 Then
                    ActiveSheet.Cells(28).Value = ActiveSheet.Cells(28).Value + 1
                Else
                    ActiveSheet.Cells(38).Value = ActiveSheet.Cells(38).Value + 1
                End If
            Else
                If InStr(key3, "kim"> 0 Then
                    ActiveSheet.Cells(48).Value = ActiveSheet.Cells(48).Value + 1
                Else
                    ActiveSheet.Cells(58).Value = ActiveSheet.Cells(58).Value + 1
                End If
            End If
        End If
    End If
Next i
 
End Sub
 
cs




안녕하세요.

OpenFileDialog 를 이용해서 파일을 선택하고, 복사하는 방법을 간단하게 설명합니다.

Validation 은 따로 설정하기 않기때문에

파일이 선택되어지지 않은 상황에서의 에러 혹은 경고 메세지에 대해서는 양해 부탁드립니다.


먼저 기동하고난 후의 화면입니다.

복사할 대상 폴더로 이미 C: 의 test 폴더를 지정해둔 상황입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Public Class Form1
 
    ''' <summary>
    ''' 파일을 선택합니다.
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub btnFileSelect_Click(sender As Object, e As EventArgs) Handles btnFileSelect.Click
 
        Dim OpenFileDialog1 As New OpenFileDialog()
        OpenFileDialog1.Title = "파일선택 타이틀입니다."
 
        ' 초기 디렉토리를 설정합니다.
        OpenFileDialog1.InitialDirectory = "C:\"
        ' 초기 선택파일명을 선택합니다.
        OpenFileDialog1.FileName = "초기파일명"
        ' 파일의 필터를 설정합니다.
        OpenFileDialog1.Filter = "텍스트파일|*.txt;*.log|전체파일|*.*"
        ' 필터의 초기설정입니다. 
        OpenFileDialog1.FilterIndex = 1
        ' 다이얼로그를 닫을때 마지막 설정을 유효로 하겠다는 설정입니다.
        OpenFileDialog1.RestoreDirectory = True
        ' 복수파일을 선택가능하게 합니다.
        OpenFileDialog1.Multiselect = False
        ' HELP 버튼을 표시합니다.
        OpenFileDialog1.ShowHelp = True
        ' 읽기전용으로 표시합니다.
        OpenFileDialog1.ShowReadOnly = True
        ' 체크박스를 표시합니다.
        OpenFileDialog1.ReadOnlyChecked = True
        ' 존재하지않는 파일을 선택했을때 경고를 표시합니다.
        'OpenFileDialog1.CheckFileExists = True
        ' 존재하지않는 경로를 지정했을때 경고를 표시합니다.
        'OpenFileDialog1.CheckPathExists = True
        ' 확장자가 존재하지 않는경우에는 확장자를 자동으로 붙여줍니다.
        'OpenFileDialog1.AddExtension = True
        ' 유효한 Win32 파일명만을 입력받게합니다.
        'OpenFileDialog1.ValidateNames = True
        ' 다이얼로그를 표시하고 OK 선택시에만 선택한 파일을 표시합니다.
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            TextBox1.Text = OpenFileDialog1.FileName
            ' 파일이 복수선택 되었을때는 아래의 로직이 돌아가며 뿌려줍니다.
            'For Each nFileName As String In OpenFileDialog1.FileNames
            '    MessageBox.Show(nFileName)
            'Next nFileName
        End If
        ' 처리가 끝났으므로 파기합니다.
        OpenFileDialog1.Dispose()
    End Sub
    ''' <summary>
    ''' 파일을 지정된곳으로 복사합니다.
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub btnFileCopy_Click(sender As Object, e As EventArgs) Handles btnFileCopy.Click
        ' 파일명을 취득합니다.
        Dim fileName As String = System.IO.Path.GetFileName(TextBox1.Text)
        ' 파일을 복사합니다.
        System.IO.File.Copy(TextBox1.Text, TextBox2.Text & fileName, True)
        ' 파일을 이동합니다.
        'System.IO.File.Move("C:\test\1.txt", "C:\test\3.txt")
    End Sub
End Class
cs



btnFileSelect_Click 이벤트에서는

파일 선택창을 열어서 파일을 지정하도록 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
        Dim OpenFileDialog1 As New OpenFileDialog()
        OpenFileDialog1.Title = "파일선택 타이틀입니다."
 
        ' 초기 디렉토리를 설정합니다.
        OpenFileDialog1.InitialDirectory = "C:\"
        ' 초기 선택파일명을 선택합니다.
        OpenFileDialog1.FileName = "초기파일명"
        ' 파일의 필터를 설정합니다.
        OpenFileDialog1.Filter = "텍스트파일|*.txt;*.log|전체파일|*.*"
        ' 필터의 초기설정입니다. 
        OpenFileDialog1.FilterIndex = 1
        ' 다이얼로그를 닫을때 마지막 설정을 유효로 하겠다는 설정입니다.
        OpenFileDialog1.RestoreDirectory = True
        ' 복수파일을 선택가능하게 합니다.
        OpenFileDialog1.Multiselect = False
        ' HELP 버튼을 표시합니다.
        OpenFileDialog1.ShowHelp = True
        ' 읽기전용으로 표시합니다.
        OpenFileDialog1.ShowReadOnly = True
        ' 체크박스를 표시합니다.
        OpenFileDialog1.ReadOnlyChecked = True
        ' 존재하지않는 파일을 선택했을때 경고를 표시합니다.
        'OpenFileDialog1.CheckFileExists = True
        ' 존재하지않는 경로를 지정했을때 경고를 표시합니다.
        'OpenFileDialog1.CheckPathExists = True
        ' 확장자가 존재하지 않는경우에는 확장자를 자동으로 붙여줍니다.
        'OpenFileDialog1.AddExtension = True
        ' 유효한 Win32 파일명만을 입력받게합니다.
        'OpenFileDialog1.ValidateNames = True
        ' 다이얼로그를 표시하고 OK 선택시에만 선택한 파일을 표시합니다.
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            TextBox1.Text = OpenFileDialog1.FileName
            ' 파일이 복수선택 되었을때는 아래의 로직이 돌아가며 뿌려줍니다.
            'For Each nFileName As String In OpenFileDialog1.FileNames
            '    MessageBox.Show(nFileName)
            'Next nFileName
        End If
        ' 처리가 끝났으므로 파기합니다.
        OpenFileDialog1.Dispose()
cs


btnFileCopy_Click 이벤트에서는 지정된 파일을 지정해둔 폴더로 복사 혹은 이동하는 역활을 합니다.

1
2
3
4
5
6
7
        ' 파일명을 취득합니다.
        Dim fileName As String = System.IO.Path.GetFileName(TextBox1.Text)
 
        ' 파일을 복사합니다.
        System.IO.File.Copy(TextBox1.Text, TextBox2.Text & fileName, True)
 
        ' 파일을 이동합니다.
cs


전체 소스는 아래 첨부파일을 참고하세요.

FileDialog.zip


질문

비주얼 베이직 파일 복사 +붙여넣기 내공100

프로필이미지비공개
질문13건
질문마감률87.5%
질문채택률25%
2018.01.05. 17:25
조회수14

프로그램이 있는 폴더에 오징어.jpg 를 D드라이브 에 있는 밥 이라는 폴더로 붙여넣기 하게 하는 코드좀 알려주세요




아래와같이 하시면 됩니다.


1
2
3
        Dim fileName As String = "\오징어.jpg"
        Dim fi As New System.IO.FileInfo(Application.StartupPath + fileName)
        Dim copyFile As System.IO.FileInfo = fi.CopyTo("d:\밥" + fileName)
cs


기동폴더에 있는 오징어.jpg 파일정보를 읽어와서

D: 의 밥이라는 지정된폴더에 파일을 복사해주는 기능을 수행합니다.

파일을 move 하시고 싶은경우에는

1
fi.MoveTo("C:\test\오징어.jpg")
cs

와 같은 방법으로 move 하실수가 있습니다.


질문

visual basic 질문 내공50

limh****
질문4건
질문마감률0%
질문채택률0%
2018.01.07. 22:27
조회수22
질문 1 : 매년 수능 날짜에서 오늘 날짜를 빼서 몇일남았는지 레이블에 띄우는 방법
(d-day 형식)

매년 수능 날짜에서 빼는 것이 어렵다면 올해 수능 날짜에서 오늘 날짜 빼는걸로라도 부탁드려요

질문 2 : 폼n 이 실행 되었을때 그 폼n 이 실행된지 얼마나 지났는지 시간 뜨위는 방법 
(00:00:00 로 시간 분 초 단위까지)





안녕하세요.
이번에는 Timer 를 이용한 시간차계산 방법과 특정일에 대해서 오늘까지 몇일이 남아있는지 D-Day 계산하는 방법에 대해서 간단하게 남겨보자합니다.

일단 구동화면은 아래와 같습니다.


오늘날짜는 2018/01/10 입니다.
수능이 2018/11/20 에 있다는 가정하에 남은일수가 313일 이네요.

우선 소스의 전체는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Public Class Form1
 
    Dim finalDay As String = "2018/11/20 09:00:00"
    Dim startTime As String = Date.Now.ToString()
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Timer1.Interval = 1000
        Timer1.Start()
 
    End Sub
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim nowTime As String = Date.Now.ToString()
 
        Dim total, duration1, duration2 As TimeSpan
        duration1 = DateTime.Parse(nowTime).Subtract(DateTime.Parse(startTime))
        total = duration1.Add(duration2)
 
        lblTimer.Text = total.ToString()
 
        If lblDay.Text = String.Empty Then
            lblDay.Text = DateDiff(DateInterval.Day, DateTime.Now(), DateTime.Parse(finalDay)).ToString()
        End If
 
    End Sub
 
End Class
 
cs


프로젝트가 실행될때에 가장먼저 선언되는 부분이 맨위에 있는 선언문

1
2
    Dim finalDay As String = "2018/11/20 09:00:00"
    Dim startTime As String = Date.Now.ToString()
cs

입니다.

startTime 변수에 프로그램이 시작된 시간을 저장해두고 있습니다.


그리고, 이벤트 Form1_Load 는 다들 아시다시피 폼로드 이벤트 입니다.

폼이 로드될때에 가장먼저 실행이 되지요.


1
2
3
4
5
6
7
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Timer1.Interval = 1000
        Timer1.Start()
 
    End Sub
cs


폼이 로드될때에 타이머의 Interval 을 1000 으로 1초 단위로 Tick 이 이루어지도록 선언해두고 타이머를 동작시킵니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim nowTime As String = Date.Now.ToString()
 
        Dim total, duration1, duration2 As TimeSpan
        duration1 = DateTime.Parse(nowTime).Subtract(DateTime.Parse(startTime))
        total = duration1.Add(duration2)
 
        lblTimer.Text = total.ToString()
 
        If lblDay.Text = String.Empty Then
            lblDay.Text = DateDiff(DateInterval.Day, DateTime.Now(), DateTime.Parse(finalDay)).ToString()
        End If
 
    End Sub
 
cs


그리고 1초가 흐를때마다 위의 Tick 메소드가 실행되어집니다.


1초당 동작시간을 기록해두고, 프로그램 실행시간과의 시간차를 계산하여

폼의 맨 아랫쪽에 보여줍니다. (1초당 한번 갱신)


그리고, 날짜가 기록되어있지 않은경우 (초기 기동시에만) 는

현재날짜와 수능일로 지정해둔 날짜의 차이를 계산해서 화면에 보여줍니다.


전체 소스는 아래에 첨부해두겠습니다.

즐프하세요~~


timerControl.zip


+ Recent posts