Excel VBAã«ãããåçªå·ããã¢ã«ãã¡ããã倿ã®å¹ççå®è£ ãã¯ããã¯
ç§ã¯VBAã®æŽ»çšçµéšãéããŠåŸãç¥èãæŽçããå ±æããç®çã§èšäºãäœæããŠããããã°ã©ãã³ã°æŽ1幎åã«ãªããšã³ãžãã¢ã§ããååã¯ãEnumåãæŽ»çšããã¡ã³ããã³ã¹æ§åäžã«ã€ããŠè©³ãã説æããŸãããä»åã¯ãExcel VBAã«ãããåçªå·ããã¢ã«ãã¡ããã倿ã®å¹ççå®è£ ãã¯ããã¯ã«ã€ããŠè§£èª¬ããŸãã
- 第1å: Excel VBAã®åºç€ç¥èãšã»ãã¥ãªãã£èšå®
- 第2å: Excel VBAã®åºæ¬æäœãšãªããžã§ã¯ãã®çè§£
- 第3å: Excel VBAã«ããã倿°ãšå®æ°ã®åºæ¬
- 第4å: Excel VBAã«ãããã·ãŒãæäœã®åºæ¬ãšãšã©ãŒåŠç
- 第5å: Excel VBAã«ãããæ¡ä»¶åå²
- 第6å: Excel VBAã«ãããç¹°ãè¿ãåŠçã®åºæ¬
- 第7å: Excel VBAã«ãããé åãšFor Eachã®æŽ»çš
- 第8å: Excel VBAã«ãããFormulaãšValueã®äœ¿ãåããšãŠãŒã¶ãŒå ¥åã®ååŸ
- 第9å: Excel VBAã«ããããã¡ã€ã«æäœãšãã©ã«ã管çã®åºæ¬
- 第10å: Excel VBAã«ãããFileSystemObjectãæŽ»çšããé«åºŠãªãã¡ã€ã«æäœ
- 第11å: Excel VBAã«ãããFileSystemObjectãæŽ»çšããé«åºŠãªãã¡ã€ã«æäœ å¿çšç·š
- 第12å: Excel VBAã«ãããStrConv颿°ã®æŽ»çšãšå¿çšãã¯ããã¯
- 第13å: Excel VBAã«ãããã¯ãŒã¯ããã¯ã®å®å šãªæäœãšç®¡çãã¯ããã¯
- 第14å: Excel VBAã«ãããFunctionïŒé¢æ°ïŒã®äœæãšæŽ»çšãã¯ããã¯
- 第15å: Excel VBAã«ãããé åãè¿ã颿°ã®äœæãšæŽ»çšãã¯ããã¯
- 第16å: Excel VBAã«ãããã³ã¬ã¯ã·ã§ã³ã®æŽ»çšãšå¿çšãã¯ããã¯
- 第17å: Excel VBAã«ãããèŸæžåïŒDictionaryïŒã®æŽ»çšãšå¿çšãã¯ããã¯
- 第18å: Excel VBAã«ãããEnumåãæŽ»çšãã颿°èšèšãšå®è£ ãã¯ããã¯
- 第19å: Excel VBAã«ããããŠãŒãã£ãªãã£é¢æ°ã®äœæãšæŽ»çšãã¯ããã¯
- 第20å: Excel VBAã«ãããæ£èŠè¡šçŸã掻çšãããã¡ã€ã«åè§£æãã¯ããã¯
- 第21å: Excel VBAã§ç¯å²å ã®å³åœ¢ãå¹ççã«åé€ãããã¯ããã¯
- 第22å: Excel VBAã§ææ°ãã¡ã€ã«ãå¹ççã«æ€çŽ¢ãã颿°èšèšãã¯ããã¯
- 第23å: Excel VBAã§éžæããç¯å²ã«å¯ŸããŠãäžè¡ããã«ç©ºè¡ãæ¿å ¥ãããã¯ããã¯
- 第24å: Excel VBAã§å¯èŠã»ã«ã掻çšãããã£ã«ã¿ãŒæäœãã¯ããã¯
- 第25å: Excel VBAã§å¯èŠã»ã«ã®ã¿ãå¹ççã«ã³ããŒãããã¯ããã¯
- 第26å: Excel VBAã«ããããã¡ã€ã«ã»ãã©ã«ãç§»åã®ååž°åŠçãã¯ããã¯
- 第27å: Excel VBAã«ããã芪ãã©ã«ããã¹ååŸã®å®è£ ãã¯ããã¯
- 第28å: Excel VBAã«ãããç¬èªã€ãã³ãã®èšèšãšå®è£ ãã¯ããã¯
- 第29å: Excel VBAã«ãããEnumåãæŽ»çšããã¡ã³ããã³ã¹æ§åäžãã¯ããã¯
- 第30å: Excel VBAã«ãããåçªå·ããã¢ã«ãã¡ããã倿ã®å¹ççå®è£ ãã¯ããã¯ïŒæ¬èšäºïŒ
ç®æ¬¡
- ã¯ããã«
- åçªå·ãšã¢ã«ãã¡ããã倿ã®åºæ¬æŠå¿µ
- å¹ççãªå€æææ³ã®å®è£
- ãšã©ãŒãã³ããªã³ã°ãšå®å šæ§ã®ç¢ºä¿
- å®è·µçãªæŽ»çšã·ãŒã³ãšå¿çšäŸ
- ãŸãšã
ã¯ããã«
Excel VBAã§ããã°ã©ã ãäœæããŠãããšãã3åç®ããã15åç®ããšãã£ãæ°å€ã§ç®¡çããŠããåãããCåãããOåããšãã£ãã¢ã«ãã¡ããã衚èšã«å€æãããã±ãŒã¹ã«ééããŸããããã¯ç¹ã«ãåçã«ã»ã«ç¯å²ãäœæããå ŽåãããŠãŒã¶ãŒã«åããããã圢ã§åæ å ±ã衚瀺ããéã«å¿ èŠã«ãªãåŠçã§ãã
ä»åã¯ãåçªå·ããã¢ã«ãã¡ããã倿ãå¹ççã«å®è£ ãããã¯ããã¯ã«ã€ããŠè©³ãã解説ããŸããäžèŠåçŽã«èŠãããã®åŠçã§ãããExcelç¬èªã®ç¹æ§ã掻çšããããšã§ãéåžžã«ã·ã³ãã«ãã€ç¢ºå®ãªå®è£ ãå¯èœã«ãªããŸãã
åçªå·ãšã¢ã«ãã¡ããã衚èšã«ã€ããŠ
Excelã§ã¯ãåãæ°å€ïŒ1ã2ã3...ïŒãšã¢ã«ãã¡ãããïŒAãBãC...ïŒã®äž¡æ¹ã§è¡šçŸã§ããŸããVBAã®ããã°ã©ã å ã§ã¯æ°å€ã§ç®¡çããããšãå€ãã§ããããŠãŒã¶ãŒã«ãšã£ãŠã¯ã¢ã«ãã¡ããã衚èšã®æ¹ãçŽæçã§çè§£ããããå ŽåããããŸãããã®å€æåŠçãå¹ççã«è¡ãããšã§ããã䜿ããããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
åçªå·ãšã¢ã«ãã¡ããã倿ã®åºæ¬æŠå¿µ
Excelå衚èšã·ã¹ãã
åçªå· | ã¢ã«ãã¡ããã | ç¹åŸŽ |
---|---|---|
1-26 | A-Z | 1æåè¡šèš |
27-52 | AA-AZ | 2æå衚èšïŒæåã®æ¡ïŒ |
53-78 | BA-BZ | 2æå衚èšïŒ2çªç®ã®çµã¿åããïŒ |
701-726 | ZA-ZZ | 2æå衚èšïŒæåŸã®çµã¿åããïŒ |
727-752 | AAA-AAZ | 3æå衚èšéå§ |
å¹ççãªå€æææ³ã®å®è£
Excelã®çµã¿èŸŒã¿æ©èœã掻çšããã¢ãããŒã
ä»å玹ä»ããææ³ã¯ãExcelãå éšã§æã£ãŠããåçªå·ãšã¢ã«ãã¡ãããã®å¯Ÿå¿é¢ä¿ãçŽæ¥æŽ»çšããæ¹æ³ã§ããè€éãªèšç®åŠçãè¡ã代ããã«ãExcelèªèº«ã«å€æåŠçãå§ããããšã§ãã·ã³ãã«ãã€ç¢ºå®ãªå®è£ ãå®çŸã§ããŸãã
' åçªå·ããã¢ã«ãã¡ããããååŸãã颿°
Function GetColAlphabet(columnNumber As Long) As String
' 念ã®ããåçªå·ã1ããå°ããå Žåã¯ç©ºæååãè¿ã
If columnNumber < 1 Then
GetColAlphabet = ""
Exit Function
End If
' æå®ãããåçªå·ããã»ã«ã®ã¢ãã¬ã¹æååã«å€æãã$èšå·ã§åºåã£ãŠååŸ
GetColAlphabet = Split(Columns(columnNumber).Address, "$")(2)
End Function
ãã®ææ³ã®ã¢ã€ãã¢
Columns(columnNumber).Address
ã䜿çšããããšã§ãExcelèªèº«ãæã€åçªå·âã¢ã«ãã¡ããã倿æ©èœã掻çšããŠããŸããäŸãã° Columns(3).Address
㯠"$C:$C"
ãšããæååãè¿ãããããã®æååãé©åã«åå²ããã°ãç®çã®ã¢ã«ãã¡ãããïŒãã®å Žåã¯ãCãïŒãååŸã§ããŸãã
åŠçãããŒã®è©³çŽ°è§£èª¬
ãã®é¢æ°ãã©ã®ããã«åäœãããããå ·äœäŸã䜿ã£ãŠæ®µéçã«èª¬æããŸãã
äŸ: åçªå·28ãã¢ã«ãã¡ãããã«å€æããå Žå
-
å
¥å倿€èšŒ:
columnNumber = 28
ã1以äžã§ããããšãç¢ºèª -
AddressååŸ:
Columns(28).Address
ã§"$AB:$AB"
ãšããæååãååŸ -
æåååå²:
Split("$AB:$AB", "$")
ã§é å["", "AB:", "AB"]
ãçæ -
çµææœåº: é
åã®2çªç®ã®èŠçŽ ïŒã€ã³ããã¯ã¹2ïŒãã
"AB"
ãååŸ -
æ»ãå€èšå®: 颿°ã®æ»ãå€ãšããŠ
"AB"
ãè¿ã
ã€ã³ããã¯ã¹çªå·ã®æ³šæç¹
é
åã¯0ããå§ãŸãããã3çªç®ã®èŠçŽ ã¯ (3)
ã§ã¯ãªã (2)
ã§ã¢ã¯ã»ã¹ããŸãããã®å®è£
ã§ã¯ãåå²åŸã®é
åã®2çªç®ã®èŠçŽ ïŒã€ã³ããã¯ã¹2ïŒã«ç®çã®ã¢ã«ãã¡ããããæ ŒçŽããããããSplit(...)(2)
ãšããæžãæ¹ã«ãªããŸãã
ã€ã³ããã¯ã¹1ãšã€ã³ããã¯ã¹2ã®äž¡æ¹ã«åãã¢ã«ãã¡ããããæ ŒçŽãããŸãããã€ã³ããã¯ã¹1ã«ã¯ :
ãæ ŒçŽãããŠããããã«ã€ã³ããã¯ã¹2ã䜿çšããŠããŸãã
ãšã©ãŒãã³ããªã³ã°ãšå®å šæ§ã®ç¢ºä¿
å ¥å倿€èšŒã®éèŠæ§
åçªå·ãšããŠç¡å¹ãªå€ãæž¡ãããå Žåã®å¯Ÿå¿ã¯ã颿°ã®ä¿¡é Œæ§ã確ä¿ããäžã§æ¥µããŠéèŠã§ããç¹ã«ã0ãè² ã®æ°ãæž¡ãããå ŽåãExcelã® Columns
ãªããžã§ã¯ãã§ãšã©ãŒãçºçããå¯èœæ§ããããŸãã
' ãšã©ãŒãã³ããªã³ã°ã匷åããå®è£
äŸ
Function GetColAlphabetSafe(columnNumber As Long) As String
' å
¥åå€ãç¡å¹ãªå Žåã®æ©æãªã¿ãŒã³
If columnNumber < 1 Then
GetColAlphabetSafe = ""
Exit Function
End If
' Excelã®æå€§åæ°ïŒ16384åïŒãè¶
ããå Žåã®å¯Ÿå¿
If columnNumber > 16384 Then
GetColAlphabetSafe = ""
Exit Function
End If
' éåžžã®å€æåŠç
GetColAlphabetSafe = Split(Columns(columnNumber).Address, "$")(2)
End Function
æ€èšŒãã¹ãå ¥åå€ã®ãã¿ãŒã³
å ¥åå€ | åŠ¥åœæ§ | å¯ŸåŠæ¹æ³ |
---|---|---|
0ä»¥äž | ç¡å¹ | 空æååãè¿ã |
1-16384 | æå¹ | æ£åžžã«å€æåŠçãå®è¡ |
16385ä»¥äž | ç¡å¹ | 空æååãè¿ãïŒExcel 2007以éã®äžéïŒ |
Excelã®åæ°å¶éã«ã€ããŠ
Excel 2007以éã§ã¯ãæå€§åæ°ã¯16384åïŒXFDåïŒã«å¶éãããŠããŸãããã®å¶éãè¶ ããåçªå·ãæå®ãããå Žåãé©åã«ãšã©ãŒåŠçãè¡ãããšã§ãäºæããªãåäœã鲿¢ã§ããŸããå€ãããŒãžã§ã³ã®ExcelïŒ2003以åïŒã§ã¯æå€§256åïŒIVåïŒã§ããããçŸåšã¯16384åãäžéã§ãã
æ»ãå€ã®äžè²«æ§ç¢ºä¿
ãšã©ãŒæã®æ»ãå€ãçµ±äžããããšã§ãåŒã³åºãåŽã®ã³ãŒãã§ã®åŠçãç°¡æœã«ãªããŸãã
' æ»ãå€ã®çµ±äžäŸ
Sub TestColumnConversion()
Dim result As String
' æ£åžžãªã±ãŒã¹
result = GetColAlphabet(1) ' "A"
result = GetColAlphabet(28) ' "AB"
' ãšã©ãŒã±ãŒã¹ïŒå
šãŠç©ºæååãè¿ãããïŒ
result = GetColAlphabet(0) ' ""
result = GetColAlphabet(-5) ' ""
result = GetColAlphabet(20000) ' ""
' åŒã³åºãåŽã§ã¯çµ±äžçãªå€å®ãå¯èœ
If result = "" Then
MsgBox "ç¡å¹ãªåçªå·ã§ã"
Else
MsgBox "åã¢ã«ãã¡ããã: " & result
End If
End Sub
å®è·µçãªæŽ»çšã·ãŒã³ãšå¿çšäŸ
åçã»ã«ç¯å²äœæã§ã®æŽ»çš
åçªå·ããã¢ã«ãã¡ããããžã®å€æã¯ãç¹ã«åçãªã»ã«ç¯å²ã®äœæã«ãããŠåšåãçºæ®ããŸãã
' åçã«ã»ã«ç¯å²ãäœæããå®çšäŸ
Sub CreateDynamicRange()
' ããŒã¿ã®æçµåãšæçµè¡ãåçã«ååŸ
Dim lastCol As Long
Dim lastRow As Long
lastCol = ActiveSheet.UsedRange.Columns.Count
lastRow = ActiveSheet.UsedRange.Rows.Count
' åçªå·ãã¢ã«ãã¡ãããã«å€æ
Dim colAlphabet As String
colAlphabet = GetColAlphabet(lastCol)
' åçã«ã»ã«ç¯å²æååãäœæ
Dim rangeAddress As String
rangeAddress = "A1:" & colAlphabet & lastRow
' äœæããç¯å²ãéžæ
Range(rangeAddress).Select
MsgBox "éžæããç¯å²: " & rangeAddress
End Sub
ãŠãŒã¶ãŒåãæ å ±è¡šç€ºã§ã®æŽ»çš
æ°å€ã§ç®¡çããŠããåæ å ±ãããŠãŒã¶ãŒã«åãããããã¢ã«ãã¡ããã圢åŒã§è¡šç€ºããå Žåã«ãæå¹ã§ãã
' ãŠãŒã¶ãŒãã¬ã³ããªãŒãªåæ
å ±è¡šç€º
Sub DisplayColumnInfo()
' åŠç察象ã®åçªå·ïŒããã°ã©ã å
ã§ç®¡çïŒ
Dim targetColumns() As Long
targetColumns = Array(3, 7, 15, 28)
Dim i As Long
Dim message As String
message = "åŠç察象å:" & vbCrLf
' ååçªå·ãã¢ã«ãã¡ããã衚èšã§è¡šç€º
For i = 0 To UBound(targetColumns)
message = message & "ã»" & GetColAlphabet(targetColumns(i)) & "å" & vbCrLf
Next i
MsgBox message
End Sub
ããŒã¿æ€èšŒã¬ããŒãã§ã®æŽ»çš
倧éã®ããŒã¿ãåŠçããéãã©ã®åã§åé¡ãçºçããããã¢ã«ãã¡ããã衚èšã§å ±åããããšã§ããŠãŒã¶ãŒã®çè§£ãå©ããããšãã§ããŸãã
' ããŒã¿æ€èšŒçµæããŠãŒã¶ãŒãã¬ã³ããªãŒã«å ±å
Sub ValidateDataWithReport()
Dim errorColumns As Collection
Set errorColumns = New Collection
' ããŒã¿æ€èšŒåŠçïŒäŸïŒç©ºçœã»ã«ã®æ€åºïŒ
Dim col As Long
For col = 1 To 10
If IsEmpty(Cells(2, col)) Then
' ãšã©ãŒãèŠã€ãã£ãåçªå·ãèšé²
errorColumns.Add col
End If
Next col
' çµæãã¢ã«ãã¡ããã圢åŒã§å ±å
If errorColumns.Count > 0 Then
Dim reportMessage As String
reportMessage = "以äžã®åã§ç©ºçœã»ã«ãèŠã€ãããŸãã:" & vbCrLf
Dim errorCol As Variant
For Each errorCol In errorColumns
reportMessage = reportMessage & "ã»" & GetColAlphabet(CInt(errorCol)) & "å" & vbCrLf
Next errorCol
MsgBox reportMessage
End If
End Sub
CSVåºåã§ã®åæå®æŽ»çš
CSVãã¡ã€ã«ãåºåããéãç¹å®ã®åã®ã¿ã察象ãšããå Žåã«åçªå·ãšã¢ã«ãã¡ããã衚èšã䜵çšã§ããŸãã
' CSVåºåæã®åæå®äŸ
Sub ExportSelectedColumns()
' åºå察象ã®åçªå·ãé
åã§ç®¡ç
Dim exportColumns() As Long
exportColumns = Array(1, 3, 5, 8)
' ãŠãŒã¶ãŒã«åºååã確èª
Dim confirmMessage As String
confirmMessage = "以äžã®åãCSVã«åºåããŸã:" & vbCrLf
Dim i As Long
For i = 0 To UBound(exportColumns)
confirmMessage = confirmMessage & GetColAlphabet(exportColumns(i)) & "å, "
Next i
' æåŸã®ã«ã³ããšç©ºçœãé€å»
confirmMessage = Left(confirmMessage, Len(confirmMessage) - 2)
If MsgBox(confirmMessage & vbCrLf & "å®è¡ããŸããïŒ", vbYesNo) = vbYes Then
' å®éã®CSVåºååŠçãå®è¡
' ïŒããã§ã¯çç¥ïŒ
MsgBox "CSVåºåãå®äºããŸãã"
End If
End Sub
ãŸãšã
ä»å解説ããåçªå·ããã¢ã«ãã¡ããã倿ã®å¹ççå®è£ ãã¯ããã¯ã¯ããåçã«ã»ã«ç¯å²ãäœæããããããŠãŒã¶ãŒã«åããããã圢ã§åæ å ±ã衚瀺ãããããšãã£ãæ©èœãç°¡æœãã€ç¢ºå®ã«å®çŸããå®çšçãªææ³ã§ãã
ãã®ææ³ã®æ žå¿ãšãªãã®ã¯ãColumns(columnNumber).Address
ã«ããExcelèªèº«ã®å€ææ©èœæŽ»çšãSplit
颿°ã䜿ã£ãæåååå²åŠçã§ããå®è£
æã«ç¹ã«éèŠãªã®ã¯ãå
¥å倿€èšŒã«ããå®å
šæ§ç¢ºä¿ãšæ»ãå€ã®äžè²«æ§ç¶æã®åŸ¹åºã§ãã0以äžãæå€§åæ°ãè¶
ããç¡å¹ãªå€ã«å¯ŸããŠçµ±äžçãªãšã©ãŒåŠçãè¡ãã空æååã«ããæç¢ºãªå€±æéç¥ãå®è£
ããããšã§ãå
ç¢ã§å®çšçãªã·ã¹ãã ãäœæã§ããŸãããŸããExcel 2007以éã®16384åå¶éãèæ
®ããèšèšã«ããä¿¡é Œæ§ã確ä¿ãããŠãŒã¶ãŒãã¬ã³ããªãŒãªæ
å ±è¡šç€ºãè¡ãããšã§ãä»ã®ãããžã§ã¯ãã§ã容æã«æŽ»çšã§ããæ±çšçãªãŠãŒãã£ãªãã£é¢æ°ãšããŠçºå±ãããããšãå¯èœã§ãã
次åã¯ãExcel VBAã«ãããéè€ã®ãªãã·ãŒãåçæã®å¹ççå®è£ ãã¯ããã¯ã«ã€ããŠè©³ãã解説ããŸãïŒæ¢åã·ãŒãåãšã®éè€ãã§ãã¯æ©èœãé£çªä»äžã«ããèªåçæããäŒãããäºå®ã§ãããã²ãæåŸ ãã ããïŒ