ExcelVBA와 투시표로 자신의 상식적인 작은 사전을 만드는 데 능숙하다
I. 디자인 구상
어느 분야에서든 신인이든 베테랑이든 업무 중에 명사를 자주 사용해서 정리를 해야 할 수도 있다.이런 상대적인 저주파도, 분류 귀납 정렬 등에 대해 일정한 요구가 있는 작업에 엑셀은 적합한 실현 방식이다.
Excel이 "분류 요약"과 같은 지능적인 원클릭 생성 도구를 제공하는 것은 사실이지만, 그 효과는 보기와 인쇄에 약간 불편하고, 일부 불필요한 이름과 숫자도 생겼다.
그림 1: 영역별 데이터 요약
이때 Excel에서 또 다른 자주 사용하는 기능인'데이터 투시표'가 생각나고 양식과 미관의 분류가 명확하다.문제는 생성된 투시표에 대해 원시 문자가 아닌 통계 숫자만 표시할 수 있고 표두도 원래 이름으로 바꿀 수 없다는 것이다.
그림 2: 자동으로 생성된 데이터 투시표
만약에 데이터 투시표처럼 분류하여 표시하고 문자와 헤더를 정상적으로 표시할 수 있다면 그것은 매우 좋은 것이다. 좋은 것은 간단한 VBA를 결합하면 이런 목적에 도달할 수 있다.
II. 실현 방식
다음 절차에 따라 우리의 생각을 실현한다.
그림 4: 이니셜로 요약
그림 5: 영역별 요약
III. 테이블 초기화
먼저 만들어진 것은
scopes_sheet
작업표로 단어가 귀납된 영역을 일일이 열거하고 원본 테이블에서 밑에 있는 선택 동작을 실현한다.그런 다음 원본 테이블
source_sheet
을 작성하여'이름, 전칭, 별칭, 해석'몇 열의 데이터를 채우고'영역'일열의 데이터 검증을 scopes_sheet
에서 열거한 서열로 설정합니다.두 개의 버튼 컨트롤을 삽입하여 적절한 매크로를 지정합니다.
그리고 개발 도구의 VBA 개발 환경에 들어가 코드를 작성하기 시작합니다 (formac에 버그가 있을 수 있습니다. 이 예는 Excel 2016 for Windows 개발을 기반으로 합니다)
IV. VBA 지식 포인트
이상 포착
다른 언어
try...catch
와 비슷하게 VBA 의 잘못된 캡처는 다음과 같습니다.On Error GoTo errfailback
' try
errfailback:
' catch
If Err.Number <> 0 Then
Debug.Print (Err.Description)
End If
Resume errresume
errresume:
' finally
테이블에서 행렬의 최대 범위를 얻을 수 있는 몇 가지 방법:
Dim lastCol As Long, lastRow As Long
lastCol = Sheet1.Cells(1, Sheet1.Columns.Count).End(xlToLeft).Column
lastRow = Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).row
Dim name As String, row As Integer
For row = 2 To Sheet1.UsedRange.Rows.Count
name = Sheet1.Cells(row, 1).Value
Next row
데이터 원근 테이블 만들기
Dim pvtTable As PivotTable
Set pvtTable = Sheet1.PivotTableWizard
'specify row & col
pvtTable.AddFields _
RowFields:=Array(COL_FIRST, COL_NAME), _
ColumnFields:="Data"
'sepcify data fields
Dim dfName As String, pvtField As PivotField
For i = 2 To lastCol
dfName = Sheet1.Cells(1, i).Value
Set pvtField = pvtTable.PivotFields(dfName)
pvtField.Orientation = xlDataField
pvtField.Function = xlCount
Next i
복제 테이블
sheet.Range(Cells(1, 1), Cells(lastRow, lastCol)).Select
Selection.Copy
Dim ShtName As String
ShtName = Replace(PvtName, "pvt_", "sheet_")
Sheets.Add.Select
ActiveSheet.name = ShtName
Cells(1, 1).Select
Selection.PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False
Sheets(ShtName).Select
ActiveSheet.Move after:=Sheets(Sheets.Count)
한자의 이니셜을 추출하다
Function toPinyin(p As String) As String
Dim i As Long
i = Asc(p)
Select Case i
Case -20319 To -20284: toPinyin = "A"
Case -20283 To -19776: toPinyin = "B"
Case -19775 To -19219: toPinyin = "C"
Case -19218 To -18711: toPinyin = "D"
Case -18710 To -18527: toPinyin = "E"
Case -18526 To -18240: toPinyin = "F"
Case -18239 To -17923: toPinyin = "G"
Case -17922 To -17418: toPinyin = "H"
Case -17417 To -16475: toPinyin = "J"
Case -16474 To -16213: toPinyin = "K"
Case -16212 To -15641: toPinyin = "L"
Case -15640 To -15166: toPinyin = "M"
Case -15165 To -14923: toPinyin = "N"
Case -14922 To -14915: toPinyin = "O"
Case -14914 To -14631: toPinyin = "P"
Case -14630 To -14150: toPinyin = "Q"
Case -14149 To -14091: toPinyin = "R"
Case -14090 To -13319: toPinyin = "S"
Case -13318 To -12839: toPinyin = "T"
Case -12838 To -12557: toPinyin = "W"
Case -12556 To -11848: toPinyin = "X"
Case -11847 To -11056: toPinyin = "Y"
Case -11055 To -2050: toPinyin = "Z"
Case Else: toPinyin = p
End Select
End Function
행 높이 자동 변환 및 조정
Columns(3).ColumnWidth = 20
Columns(lastCol).ColumnWidth = 40
Range(Cells(1, 1), Cells(lastRow, lastCol)).Rows.WrapText = True
인쇄 영역 및 배율 설정
With ActiveSheet.PageSetup
.FitToPagesWide = 1
.FitToPagesTall = False
End With
SQL로 워크시트 질의
이것은 Excel VBA에서 가장 실용적인 기능이라고 할 수 있다. 외부 데이터 원본을 사용하지 않고 작업표를 직접 조회한다.
Dim cn As ADODB.Connection
Dim rs As ADODB.recordSet
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Dim sql As String
sql = "SELECT * FROM [source_sheet$] WHERE [" & COL_NAME & "] = '" & theName & "';"
rs.Open sql, cn
...
Cells(r, c).Value = rs.Fields(theField).Value
...
cn.Close
Set cn = Nothing
Set rs = Nothing
V. 전체 코드
https://bitbucket.org/tonylua/useful_words_for_web
주의사항 등은 상기 링크의 설명을 참고할 수 있다
VI. 참고 자료
(end)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.