Excel VBAã§è€æ°å察å¿ã®ãã£ã«ã¿å¯èŠã»ã«ååŸé¢æ°ãå®è£ ãããã¯ããã¯
ç§ã¯VBAã®æŽ»çšçµéšãéããŠåŸãç¥èãæŽçããå ±æããç®çã§èšäºãäœæããŠããããã°ã©ãã³ã°æŽ2幎ã«ãªããšã³ãžãã¢ã§ããååã¯ãWindowsã¯ãªããããŒãå±¥æŽã«ã»ã«ã®å€ãã³ããŒããå®è£ ãã¯ããã¯ã«ã€ããŠèª¬æããŸãããä»åã¯ããã£ã«ã¿åŸã®å¯èŠã»ã«ã®åç¯å²ãååŸãã颿°ã®å®è£ ãã¯ããã¯ã«ã€ããŠè§£èª¬ããŸãã
- 第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ã«ãããåçªå·ããã¢ã«ãã¡ããã倿ã®å¹ççå®è£ ãã¯ããã¯
- 第31å: Excel VBAã«ãããéè€ã®ãªãã·ãŒãåçæã®å¹ççå®è£ ãã¯ããã¯
- 第32å: Excel VBAã«ãããã»ã«åç §åœ¢åŒã®åãæ¿ããã¯ããã¯
- 第33å: Excel VBAã«ãããã·ãŒã衚瀺å¶åŸ¡ã®å®è£ ãã¯ããã¯
- 第34å: Excel VBAã«ãããAI掻çšã«ããã³ãŒãçæã®å®è£ ãã¯ããã¯
- 第35å: Excel VBAãã¯ãã®ã¢ãã€ã³åã«ããããã¯å ±æãã¯ããã¯
- 第36å: Excel VBAã«ãããç®æ¬¡èªåçæã®å®è£ ãã¯ããã¯
- 第37å: Excel VBAã«ãããWindowsã¯ãªããããŒãå±¥æŽãžã®ã»ã«å€é£ç¶ã³ããŒå®è£ ãã¯ããã¯
- 第38å: Excel VBAã§è€æ°å察å¿ã®ãã£ã«ã¿å¯èŠã»ã«ååŸé¢æ°ãå®è£ ãããã¯ããã¯(æ¬èšäº)
ç®æ¬¡
- ã¯ããã«
- åºæ¬ãšãªãåäžå察å¿ã³ãŒã
- ãã¿ãŒã³1: åºæ¬ã®è€æ°å察å¿(éå§å+åæ°æå®)
- ãã¿ãŒã³2: éå§åãšçµäºåãæå®ããæ¹æ³
- ãã¿ãŒã³3: éé£ç¶åãéžæããæ¹æ³
- ãšã©ãŒãã³ããªã³ã°ãšãã¹ããã©ã¯ãã£ã¹
- ãŸãšã
ã¯ããã«
Excelæ¥åã§ã¯ãããŒã¿ãçµã蟌ãäœæ¥ã¯æ¥åžžçã«è¡ãããŠããŸãã
ããšãã°ã瀟å¡ãªã¹ãããç¹å®ã®æ¡ä»¶ã§ãã£ã«ã¿ãªã³ã°ããåŸã該åœãã瀟å¡ã³ãŒãã瀟å¡åã ããå¥ã®ã·ãŒããããã¯ã«è²Œãä»ãããå Žåãªã©ããããŸãããã®ããŒãºã«å¯Ÿå¿ãããããåœåã¯ãã£ã«ã¿åŸã®åäžåã®å¯èŠã»ã«ç¯å²ãååŸãã颿°ãäœæããŸããã
ããããåäžåã ãã§ãªãè€æ°åãåæã«ååŸãããã±ãŒã¹ãé »ç¹ã«çºçããŸããããšãã°ãã瀟å¡ã³ãŒããæ°åãéšçœ²åã®3åããŸãšããŠååŸãããããé¢ããåïŒAåãCåãEåïŒã ããæœåºãããããšãã£ãèŠæã§ãã
ä»åã®èšäºã§ã¯ãåœåäœæããåäžåçã®é¢æ°ãæ¡åŒµãã以äžã®ãããªããªãšãŒã·ã§ã³ãå®è£ ããã®ã§ç޹ä»ããŸãã
- é£ç¶ããè€æ°åãåæ°ã§æå®ããŠååŸ
- éå§åãšçµäºåãæå®ããŠååŸ
- éé£ç¶ãªåïŒé£ã³é£ã³ã®åïŒãé åã§æå®ããŠååŸ
ãããã®é¢æ°ãã©ã€ãã©ãªãšããŠæã£ãŠããããšã§ããªãŒããã£ã«ã¿ã䜿ã£ãããŒã¿æœåºäœæ¥ããããæè»ãã€å¹ççã«èªååã§ããããã«ãªããŸãã
åºæ¬ãšãªãåäžå察å¿ã³ãŒã
ãŸããå ãšãªãåäžå察å¿ã®ã³ãŒãã確èªããŸãããã®ã³ãŒãã¯ããã£ã«ã¿åŸã«è¡šç€ºãããŠãã1ã€ã®åã®å¯èŠã»ã«ãååŸãã颿°ã§ãã
' ãã£ã«ã¿åŸã«è¡šç€ºãããŠããæå®åã®å¯èŠã»ã«ãè¿ã颿°(èŠåºãè¡ãã¹ããã)
' åŒæ°: ã·ãŒããååŸãããåçªå·ãããŒã¿éå§è¡(èŠåºãã¯éåžž1è¡ã ããªã®ã§æ¢å®å€)
Function GetVisibleColumnRange( _
ws As Worksheet, Col As Long, Optional skipRow As Long = 1) As Range
With ws.AutoFilter.Range
Set GetVisibleColumnRange = .Offset(skipRow, Col - 1) _
.Resize(.Rows.Count - skipRow, 1) _
.SpecialCells(xlCellTypeVisible)
End With
End Function
ã³ãŒãã®åäœè§£èª¬
ãã®ã³ãŒãã¯3ã€ã®ã¹ãããã§å¯èŠã»ã«ãååŸããŸãã
1. ãªãŒããã£ã«ã¿ç¯å²ã®ååŸ
With ws.AutoFilter.Range
AutoFilter.Rangeããããã£ã¯ããªãŒããã£ã«ã¿ãèšå®ãããŠããç¯å²å
šäœ(èŠåºãè¡ãå«ã)ãè¿ããŸããããšãã°ãA1:D100ã«ãªãŒããã£ã«ã¿ãèšå®ãããŠããå ŽåãA1:D100ã®ç¯å²ãååŸãããŸãã
2. 察象ç¯å²ã®èª¿æŽ
.Offset(skipRow, Col - 1).Resize(.Rows.Count - skipRow, 1)
ããã§2ã€ã®ã¡ãœãããçµã¿åãããŠãååŸãããç¯å²ã調æŽããŸãã
Offset(skipRow, Col - 1)ã¯ããªãŒããã£ã«ã¿ç¯å²ã®å·Šäžã»ã«ãããæå®ããè¡æ°ãšåæ°ã ãããããäœçœ®ãéå§ç¹ã«ããŸãã
-
skipRow: äžæ¹åãžãããè¡æ°(èŠåºãè¡ãã¹ãããããè¡æ°) -
Col - 1: 峿¹åãžãããåæ°(ååŸãããåçªå· - 1)
ããšãã°ããªãŒããã£ã«ã¿ç¯å²ãA1:D100ã§ãskipRow=1ãCol=3ãæå®ããå ŽåãèããŸãã
-
Offset(1, 2)ã«ãããA1ããäžã«1è¡ãå³ã«2åãããäœçœ®ãã€ãŸãC2ãéå§ç¹ã«ãªããŸã
Resize(.Rows.Count - skipRow, 1)ã¯ãéå§ç¹ããæå®ããè¡æ°ãšåæ°ã®ç¯å²ã«ãµã€ãºã倿ŽããŸãã
-
.Rows.Count - skipRow: å ã®ç¯å²ã®è¡æ°ããã¹ãããè¡æ°ãåŒããè¡æ° -
1: åæ°ã1åã«åºå®
å
ã»ã©ã®äŸã§ã¯ããªãŒããã£ã«ã¿ç¯å²ã100è¡ãããskipRow=1ãªã®ã§ã100 - 1 = 99è¡ã®ç¯å²ã«ãªããŸããåæ°ã¯1åãªã®ã§ãæçµçã«C2:C100ã®ç¯å²ãååŸãããŸãã
3. å¯èŠã»ã«ã®ã¿ãæœåº
.SpecialCells(xlCellTypeVisible)
SpecialCells(xlCellTypeVisible)ã¡ãœããã¯ãæå®ããç¯å²ã®äžãã衚瀺ãããŠããã»ã«ã ããååŸããŸãããã£ã«ã¿ã§é衚瀺ã«ãªã£ãŠããè¡ã¯é€å€ãããŸãã
åŒæ°èšèšã®ç¹åŸŽ
ãã®ã³ãŒãã§ã¯ãåŒæ°ã®é åºãšèšèšã«å·¥å€«ããããŸãã
åŒæ°ã®é åº
ws As Worksheet, Col As Long, Optional skipRow As Long = 1
åŒæ°ã®é åºããã·ãŒããåçªå·ãã¹ãããè¡æ°ããšããŠããŸããããã¯ãå®åã§ã¯åçªå·ã®æå®ãæãéèŠã§ãã¹ãããè¡æ°ã¯éåžžå€æŽããªããšããèãã«åºã¥ããŠããŸãã
é »ç¹ã«å€æŽããåŒæ°(åçªå·)ãåã«ãããŸã倿ŽããªãåŒæ°(ã¹ãããè¡æ°)ãåŸãã«é 眮ããããšã§ã颿°åŒã³åºããã·ã³ãã«ã«ãªããŸãã
' éåžžã®äœ¿ãæ¹(ã¹ãããè¡æ°ã¯çç¥)
Set result = GetVisibleColumnRange(ActiveSheet, 3)
' ã¹ãããè¡æ°ã倿Žããå Žåã®ã¿æå®
Set result = GetVisibleColumnRange(ActiveSheet, 3, 2)
skipRowã®ããã©ã«ãå€
Optional skipRow As Long = 1
OptionalããŒã¯ãŒãã¯åŒæ°ãçç¥å¯èœã«ããããã®æå®ã§ãskipRowã®ããã©ã«ãå€ã¯1ã«èšå®ããŠããŸããããã¯ãExcelã®è¡šã§ã¯éåžžã1è¡ç®ãèŠåºãè¡ã§ã2è¡ç®ããããŒã¿ãå§ãŸããšããäžè¬çãªã±ãŒã¹ã«å¯Ÿå¿ããŠããŸãã
ããŒã¿éå§è¡ãšskipRowã®é¢ä¿
ãã®é¢æ°ã§ã¯ãskipRowãšããååã§ãäœè¡ã¹ããããããããæå®ããŸãããå®è³ªçã«ã¯ãããŒã¿ãäœè¡ç®ããå§ãŸããããæå³ããŸãã
-
skipRow = 1: èŠåºãã1è¡ãªã®ã§ã2è¡ç®ããããŒã¿éå§ -
skipRow = 2: èŠåºãã2è¡ãªã®ã§ã3è¡ç®ããããŒã¿éå§
ãã¹ãããããè¡æ°ããšããèãæ¹ã®æ¹ããã³ãŒãã®åäœãçè§£ããããããããã®åœåãæ¡çšããŠããŸãã
å¶éäºé
ãã®ã³ãŒãã¯éåžžã«ã·ã³ãã«ã§å¹ççã§ããã1åããååŸã§ããªããšããå¶éããããŸããè€æ°åã®ããŒã¿ãååŸãããå Žåã¯ã以äžã®ããã«è€æ°å颿°ãåŒã³åºãå¿ èŠããããŸãã
' Aå(瀟å¡ã³ãŒã)ãBå(æ°å)ãDå(éšçœ²)ãå¥ã
ã«ååŸ
Dim visibleCodes As Range
Dim visibleNames As Range
Dim visibleDepts As Range
Set visibleCodes = GetVisibleColumnRange(ActiveSheet, 1) ' Aå
Set visibleNames = GetVisibleColumnRange(ActiveSheet, 2) ' Bå
Set visibleDepts = GetVisibleColumnRange(ActiveSheet, 4) ' Då
ãã®æ¹æ³ã§ãåäœããŸããã以äžã®ãããªäžäŸ¿ãããããŸãã
- åããšã«å€æ°ãçšæããå¿ èŠããã
- è€æ°åãåŠçããéãã³ãŒããåé·ã«ãªã
- åæ°ãå¢ãããšã¡ã³ããã³ã¹ã倧å€
ããã§ããããã玹ä»ããè€æ°å察å¿ã®å®è£ ã圹ç«ã¡ãŸãã
ãã¿ãŒã³1: åºæ¬ã®è€æ°å察å¿(éå§å+åæ°æå®)
æãæšå¥šãããå®è£ æ¹æ³ã§ããæ¢åã®åäžå察å¿ã³ãŒããšã®äºææ§ãä¿ã¡ãªãããè€æ°åã«ã察å¿ã§ããããæ¡åŒµããŸãã
å®è£ ã³ãŒã
' ãã£ã«ã¿åŸã«è¡šç€ºãããŠããæå®åã®å¯èŠã»ã«ãè¿ã颿°(èŠåºãè¡ãã¹ããã)
' åŒæ°: ã·ãŒããéå§åçªå·ãåæ°(çç¥æã¯1å)ãããŒã¿éå§è¡
Function GetVisibleColumnRange(ws As Worksheet, col As Long, _
Optional colCount As Long = 1, Optional skipRow As Long = 1) As Range
With ws.AutoFilter.Range
Set GetVisibleColumnRange = .Offset(skipRow, col - 1) _
.Resize(.Rows.Count - skipRow, colCount) _
.SpecialCells(xlCellTypeVisible)
End With
End Function
ã³ãŒãã®è©³çŽ°è§£èª¬
åºæ¬çãªæ§é ã¯åäžå察å¿ãšåãã§ãããéèŠãªå€æŽç¹ã2ã€ãããŸãã
1. OptionalåŒæ°ã®è¿œå
Optional colCount As Long = 1
colCount(åæ°)ãšããæ°ããåŒæ°ã远å ããããã©ã«ãå€ã1ã«èšå®ããŠããŸãã
ããã«ããã以äžã®2ã€ã®åŒã³åºãæ¹ãå¯èœã«ãªããŸãã
' åŒæ°ã2ã€ã ãæå®(åºæ¬ã®äœ¿ãæ¹)
Set result = GetVisibleColumnRange(ActiveSheet, 1)
' åŒæ°ã3ã€æå®(è€æ°å察å¿ã®äœ¿ãæ¹)
Set result = GetVisibleColumnRange(ActiveSheet, 1, 3)
2ã€ã®åŒæ°ã§åŒã³åºããå ŽåãskipRowãšcolCountã¯èªåçã«1ã«ãªããåäžå察å¿ãšããŠåäœããŸããã€ãŸããæ¢åã®ã³ãŒãã倿Žããã«ãæ°ããæ©èœã远å ã§ããŸãã
åŒæ°ã®é 眮é åºã«ã€ããŠ
ws As Worksheet, col As Long, _
Optional colCount As Long = 1, Optional skipRow As Long = 1
ããã§ãcolCountãskipRowãããåã«é
眮ããŠããç¹ã«æ³šç®ããŠãã ãããããã¯ã䜿çšé »åºŠã®é«ãåŒæ°ãå
ã«é
眮ãããšããèšèšææ³ã«åºã¥ããŠããŸãã
å®åã§ã¯ã以äžã®ãããªäœ¿çšãã¿ãŒã³ãå§åçã«å€ããªããŸãã
| 䜿çšãã¿ãŒã³ | é »åºŠ | äŸ |
|---|---|---|
| è€æ°åãååŸ | é« | Båãã3ååãååŸ |
| èŠåºãè¡ã2è¡ä»¥äž | äœ | èŠåºãã2è¡ããç¹æ®ãªè¡š |
èŠåºãè¡ã2è¡ä»¥äžããã±ãŒã¹ã¯æ¯èŒçãŸãã§ãã»ãšãã©ã®å Žåã¯èŠåºã1è¡(ããŒã¿ã¯2è¡ç®ãã)ãšããæšæºçãªåœ¢åŒã§ããäžæ¹ãè€æ°åãååŸãããã±ãŒã¹ã¯éåžžã«é »ç¹ã«çºçããŸãã
ãã®ãããcolCountãåã«é
眮ããããšã§ã以äžã®ãããªç°¡æœãªåŒã³åºããå¯èœã«ãªããŸãã
' æãäžè¬çãªäœ¿ãæ¹: è€æ°åãååŸ(èŠåºãã¯1è¡)
Set result = GetVisibleColumnRange(ActiveSheet, 2, 3)
' ãŸããªã±ãŒã¹: èŠåºãã2è¡ã®å Žå
Set result = GetVisibleColumnRange(ActiveSheet, 2, 3, 2)
åŒæ°é åºã®ä»£æ¿æ¡ãšã®æ¯èŒ
ããskipRowãå
ã«é
眮ããå Žåã以äžã®ãããªåŒã³åºãã«ãªããŸãã
' skipRowãå
ã«é
眮ããå Žå(ãã¡ãã¯æ¡çšããŠããªã)
Function GetVisibleColumnRange(ws As Worksheet, col As Long, _
Optional skipRow As Long = 1, Optional colCount As Long = 1)
' è€æ°åãååŸããéãskipRowãçç¥ããããã«ã³ããå¿
èŠ
Set result = GetVisibleColumnRange(ActiveSheet, 2, , 3) ' ã«ã³ãã«ããçç¥
' â
' çç¥ã瀺ãã«ã³ããå¿
èŠ
' ååä»ãåŒæ°ã䜿çšããåŒã³åºã
Set result = GetVisibleColumnRange(ActiveSheet, 2, colCount:=3)
' ãšã©ãŒã«ãªãåŒã³åºãæ¹æ³
Set result = GetVisibleColumnRange(ActiveSheet, 2, 3) ' skipRowã3ãšè§£éããã
ãã®ããã«ã䜿çšé »åºŠã®äœãåŒæ°ãå ã«é 眮ãããšãã³ãŒãã®å¯èªæ§ãäœäžããã³ãŒããèªã人ã«ãšã£ãŠæ··ä¹±ãæãåå ãšãªããŸãã
åŒæ°é åºã®èšèšåå
颿°èšèšã«ãããŠãOptionalåŒæ°ãè€æ°æã€å Žåã¯ã䜿çšé »åºŠã®é«ãåŒæ°ãå ã«é 眮ããããšãæšå¥šãããŸãã
èšèšåå
- å¿ é åŒæ°ãæåã«é 眮
- 䜿çšé »åºŠã®é«ãOptionalåŒæ°ã次ã«é 眮
- 䜿çšé »åºŠã®äœãOptionalåŒæ°ãæåŸã«é 眮
ãã®ååã«åŸãããšã§ãæãäžè¬çãªäœ¿çšãã¿ãŒã³ã§ã®åŒã³åºããç°¡æœã«ãªããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžããŸãã
2. Resizeã®åæ°æå®ã倿Ž
.Resize(.Rows.Count - skipRow, colCount)
åäžå察å¿ã§ã¯ãåæ°ã1ã«åºå®ããŠããŸãããè€æ°å察å¿ã§ã¯ããã®éšåãcolCount倿°ã«å€æŽããããšã§ãæå®ããåæ°ã®ç¯å²ãååŸã§ããããã«ãªããŸãã
ããšãã°ãcol=2ãcolCount=3ãæå®ããå ŽåãBåãã3åå(BåãCåãDå)ã®ç¯å²ãååŸãããŸãã
䜿çšäŸ
äŸ1: åäžåã®ååŸ
' Aå(瀟å¡ã³ãŒã)ã®ã¿ãååŸ
Dim visibleCodes As Range
Set visibleCodes = GetVisibleColumnRange(ActiveSheet, 1)
æ¢åã®ã³ãŒããšåãæžãæ¹ã§ãåäžåãšããŠåäœããŸãã
äŸ2: é£ç¶ãã3åã®ååŸ
' Bå~Då(æ°åã幎霢ãéšçœ²)ããŸãšããŠååŸ
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange(ActiveSheet, 2, 3)
' ååŸããç¯å²ã䜿ã£ãåŠç
Dim cell As Range
For Each cell In visibleData
Debug.Print cell.Value
Next cell
ãã®äŸã§ã¯ãBåãã3åå(BåãCåãDå)ã®å¯èŠã»ã«ãäžåºŠã«ååŸããŠããŸãã
äŸ3: èŠåºãã2è¡ããå Žå
' èŠåºãã2è¡ã®å ŽåãskipRowã«2ãæå®
' Cåãã2åå(CåãDå)ãååŸ
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange(ActiveSheet, 3, 2, 2)
èŠåºãè¡ãè€æ°ãã衚ã§ã¯ãskipRowã調æŽããããšã§ãæ£ããããŒã¿éšåã ããååŸã§ããŸãã
äŸ4: Aåããå šåãååŸ
' ãªãŒããã£ã«ã¿ã®å
šåãååŸ
Dim allVisible As Range
Dim totalCols As Long
' ãªãŒããã£ã«ã¿ç¯å²ã®åæ°ãååŸ
totalCols = ActiveSheet.AutoFilter.Range.Columns.Count
Set allVisible = GetVisibleColumnRange(ActiveSheet, 1, totalCols)
ãªãŒããã£ã«ã¿ãèšå®ãããŠããå
šåã®å¯èŠã»ã«ãååŸãããå Žåã¯ãAutoFilter.Range.Columns.Countã§åæ°ãååŸããŠæå®ããŸãã
äŸ5: å®åçãªäœ¿çšãã¿ãŒã³
Sub CopyVisibleDataToNewSheet1()
' ãã£ã«ã¿åŸã®Bå~Dåãæ°ããã·ãŒãã«ã³ããŒ
Dim visibleRange As Range
Set visibleRange = GetVisibleColumnRange(ActiveSheet, 2, 3)
' æ°ããã·ãŒããäœæ
Dim newSheet As Worksheet
Set newSheet = Worksheets.Add
' å¯èŠã»ã«ãã³ããŒ
visibleRange.Copy newSheet.Range("A1")
MsgBox "ãã£ã«ã¿åŸã®ããŒã¿ãã³ããŒããŸããã", vbInformation
End Sub
ãã®äŸã§ã¯ããã£ã«ã¿åŸã®å¯èŠã»ã«ãæ°ããã·ãŒãã«ã³ããŒããå®çšçãªåŠçã瀺ããŠããŸãã
ãã¿ãŒã³2: éå§åãšçµäºåãæå®ããæ¹æ³
ãã¿ãŒã³1ã§ã¯ãéå§å+åæ°ãã§ç¯å²ãæå®ããŸãããããã¿ãŒã³2ã§ã¯ãéå§å+çµäºåãã§æå®ããŸããExcelã®ç¯å²æå®(äŸ: A1:D10)ã«è¿ãæèŠã§äœ¿ãããããããçŽæçã§ãã
å®è£ ã³ãŒã
' ãã£ã«ã¿åŸã«è¡šç€ºãããŠããæå®åç¯å²ã®å¯èŠç¯å²ãè¿ã(èŠåºãè¡ãã¹ããã)
' åŒæ°: ã·ãŒããéå§åçªå·ãçµäºåçªå·(çç¥æã¯éå§åã®ã¿)ãããŒã¿éå§è¡
Function GetVisibleColumnRange2(ws As Worksheet, startCol As Long, _
Optional endCol As Long = 0, Optional skipRow As Long = 1) As Range
' çµäºåãæå®ãããŠããªãå Žåã¯éå§åãšåãã«ãã
If endCol = 0 Then endCol = startCol
' éå§åãçµäºåãã倧ããå Žåã¯å
¥ãæ¿ãã
If startCol > endCol Then
Dim temp As Long
temp = startCol
startCol = endCol
endCol = temp
End If
' åæ°ãèšç®
Dim colCount As Long
colCount = endCol - startCol + 1
With ws.AutoFilter.Range
Set GetVisibleColumnRange2 = .Offset(skipRow, startCol - 1) _
.Resize(.Rows.Count - skipRow, colCount) _
.SpecialCells(xlCellTypeVisible)
End With
End Function
ã³ãŒãã®è©³çŽ°è§£èª¬
ãã¿ãŒã³1ãšã®äž»ãªéãã¯ãåŒæ°ã®åãæ¹ãšãå éšã§åæ°ãèšç®ããç¹ã§ãã
1. åŒæ°ã®åœåãšé åº
startCol As Long, Optional endCol As Long = 0, Optional skipRow As Long = 1
ãã¿ãŒã³1ã®colãstartColã«å€æŽããæ°ãã«endCol(çµäºå)ã远å ããŠããŸããåŒæ°ã®é åºã¯ããã¿ãŒã³1ãšåæ§ã«äœ¿çšé »åºŠã®é«ãåŒæ°ãåã«é
眮ããŠããŸãã
-
startCol: éå§åçªå·(å¿ é ) -
endCol: çµäºåçªå·(çç¥å¯èœãããã©ã«ãå€ã¯0) -
skipRow: ã¹ãããããè¡æ°(çç¥å¯èœãããã©ã«ãå€ã¯1)
endColã®ããã©ã«ãå€ã0ã«ããŠããã®ã¯ãã0ã¯ç¡å¹ãªåçªå·ããšããç¹æ§ãå©çšããŠãåŒæ°ãçç¥ãããããå€å®ããããã§ãã
2. çµäºåã®åæå
If endCol = 0 Then endCol = startCol
endColãçç¥ãããå Žå(ããã©ã«ãå€ã®0ã®å Žå)ãçµäºåãéå§åãšåãå€ã«èšå®ããŸããããã«ãããåäžåã®æå®ãå¯èœã«ãªããŸãã
' çµäºåãçç¥ããå ŽåãåäžåãšããŠåäœ
Set result = GetVisibleColumnRange2(ActiveSheet, 3) ' Cåã®ã¿
3. åã®é åºãã§ãã¯ãšå ¥ãæ¿ã
If startCol > endCol Then
Dim temp As Long
temp = startCol
startCol = endCol
endCol = temp
End If
åã®æå®é åºãéã§ã(äŸ: éå§å=5ãçµäºå=2)ã颿°å ã§èªå調æŽããããããã©ã¡ãã®é åºã§æå®ããŠãåãçµæãåŸãããŸãã
ãã®åŠçã«ããã以äžã®ãããªåŒã³åºãã§ãæ£ããåäœããŸãã
' ã©ã¡ãã®æžãæ¹ã§ãåãçµæã«ãªã
Set result1 = GetVisibleColumnRange2(ActiveSheet, 2, 5) ' Bå~Eå
Set result2 = GetVisibleColumnRange2(ActiveSheet, 5, 2) ' Eå~Bå(èªåçã«Bå~Eåã«ä¿®æ£)
å
¥ãæ¿ãã®åŠçã«ã¯ãäžæå€æ°tempã䜿çšããŠããŸããããã¯ã2ã€ã®å€æ°ã®å€ã亀æããéã®æšæºçãªææ³ã§ãã
' å€ã®äº€æåŠçã®ã€ã¡ãŒãž
' å
ã®ç¶æ
: startCol=5, endCol=2
temp = startCol ' temp=5
startCol = endCol ' startCol=2
endCol = temp ' endCol=5
' çµæ: startCol=2, endCol=5
4. åæ°ã®èšç®
Dim colCount As Long
colCount = endCol - startCol + 1
éå§åãšçµäºåãããå¿ èŠãªåæ°ãèšç®ããŸãã
-
endCol - startCol: çµäºåãšéå§åã®å·® -
+ 1: ç¯å²ã¯äž¡ç«¯ãå«ãããã1ãè¶³ã
ãBå(2)ããEå(5)ãŸã§ã®å Žåã
5 - 2 + 1 = 4(BãCãDãEã®4å)
èšç®ããåæ°ã䜿ã£ãŠããã¿ãŒã³1ãšåãæ¹æ³ã§ç¯å²ãååŸããŸãã
5. ç¯å²ã®ååŸ
With ws.AutoFilter.Range
Set GetVisibleColumnRange2 = .Offset(skipRow, startCol - 1) _
.Resize(.Rows.Count - skipRow, colCount) _
.SpecialCells(xlCellTypeVisible)
End With
èšç®ããcolCountã䜿çšããŠããã¿ãŒã³1ãšåãããžãã¯ã§å¯èŠã»ã«ç¯å²ãååŸããŸãããã®éšåã®åŠçã¯ããã¿ãŒã³1ãšå®å
šã«åãã§ãã
R1C1圢åŒã掻çšããåçªå·ã®ç¢ºèª
ãéå§åããçµäºåãŸã§ããšããæå®æ¹æ³ãæ¡çšããŠããŸãã®ã§ãExcelãR1C1圢åŒã«åãæ¿ããããšã§ãåçªå·ãçŽæ¥è¡šç€ºãããæå®ãéåžžã«ç°¡åã«ãªããŸãã
ããšãã°ãMåããTåãŸã§ãæå®ãããå ŽåãA1圢åŒã§ã¯ã¢ã«ãã¡ãããããåçªå·ãèšç®ããå¿ èŠããããŸãã
R1C1圢åŒã«åãæ¿ãããšã以äžã®ããã«åçªå·ãçŽæ¥è¡šç€ºãããŸãã
| 1å | 2å | 3å | 4å | ... | 13å | ... | 20å |
ãã®ç¶æ ã§ãMåããTåãŸã§ãæå®ãããå Žåã¯ã以äžã®ããã«èšè¿°ããã ãã§ãã
' R1C1圢åŒã§åçªå·ã確èªããŠããæå®
Set result = GetVisibleColumnRange2(ActiveSheet, 13, 20) ' 13åç®~20åç®
åçªå·ãæ°ããæéããªããªãããã¹ãæžããŸãã
R1C1圢åŒãžã®åãæ¿ãæ¹æ³
Excelã®è¡šç€ºåœ¢åŒãåãæ¿ããã«ã¯ã第32åã®èšäºãExcel VBAã«ãããã»ã«åç §åœ¢åŒã®åãæ¿ããã¯ããã¯ãã§ç޹ä»ããã³ãŒãã䜿çšã§ããŸãã
ãã®ãã¯ããã·ã§ãŒãã«ããããŒ(äŸ: Ctrl + Shift + R)ã«å²ãåœãŠãŠãããšãã¯ã³ã¿ããã§è¡šç€ºåœ¢åŒãåãæ¿ããããŸãã
å®åã§ã®æŽ»çšãã¿ãŒã³
- ãã¯ãäœæåã«R1C1圢åŒã«åãæ¿ãã
- 察象ã®åçªå·ãç®èŠã§ç¢ºèª
- 颿°ã®åŒæ°ãšããŠåçªå·ãæå®
- ãã¯ãäœæåŸãå¿ èŠã«å¿ããŠA1圢åŒã«æ»ã
R1C1圢åŒã®æŽ»çšå Žé¢
R1C1圢åŒã¯ã以äžã®ãããªå Žé¢ã§ç¹ã«äŸ¿å©ã§ãã
- åæ°ãå€ã衚(10å以äž)ãæ±ãå Žå
- ã¢ã«ãã¡ããããšæ°åã®å¯Ÿå¿ãåããã«ããå Žå
- ãã¯ããäœæããéãåäœçœ®ã確èªããªããäœæ¥ãããå Žå
æ £ããªããã¡ã¯éåæããããããããŸããããåçªå·ã®æå®äœæ¥ãæ Œæ®µã«æ¥œã«ãªããŸãã
䜿çšäŸ
äŸ1: åäžåã®ååŸ
' Aåã®ã¿ãååŸ(çµäºåãçç¥)
Dim visibleNames As Range
Set visibleNames = GetVisibleColumnRange2(ActiveSheet, 1)
çµäºåãçç¥ãããšãèªåçã«éå§åãšåãå€ã«ãªããåäžåãšããŠåäœããŸãã
äŸ2: BåããDåãŸã§ãååŸ
' Bå~Då(æ°åã幎霢ãéšçœ²)ãååŸ
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange2(ActiveSheet, 2, 4)
ãã¿ãŒã³1ã§ã¯ã2åç®ãã3ååããšæå®ããŸãããããã¿ãŒã³2ã§ã¯ã2åç®ãã4åç®ãŸã§ããšæå®ããŸããExcelã®ã»ã«ç¯å²(B:D)ã«è¿ãæèŠã§æå®ã§ããŸãã
äŸ3: èŠåºãã2è¡ããå Žå
' èŠåºãã2è¡ã®å ŽåãskipRowã«2ãæå®
' Bå~EåãååŸ
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange2(ActiveSheet, 2, 5, 2)
skipRowåŒæ°ã䜿çšããããšã§ãèŠåºãè¡ãè€æ°ãã衚ã«ã察å¿ã§ããŸãã
äŸ4: éé ã§æå®ããŠãæ£åžžã«åäœ
' çµäºåãå
ã«ãéå§åãåŸã«æå®ããŠãèªåçã«ä¿®æ£ããã
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange2(ActiveSheet, 5, 2)
åŒæ°ã®é åºãéã§ããå
éšã§èªåçã«ä¿®æ£ãããŸãã
ïŒEå~Bå â Bå~EåãšããŠåŠçïŒ
äŸ5: å šåãååŸ
' ãªãŒããã£ã«ã¿ã®å
šåãååŸ
Dim allVisible As Range
Dim lastCol As Long
' ãªãŒããã£ã«ã¿ç¯å²ã®æçµåãååŸ
lastCol = ActiveSheet.AutoFilter.Range.Columns.Count
Set allVisible = GetVisibleColumnRange2(ActiveSheet, 1, lastCol)
ãªãŒããã£ã«ã¿ã®å
šåãååŸããå Žåã¯ãAutoFilter.Range.Columns.Countã§æçµåçªå·ãååŸããŠæå®ããŸãã
äŸ6: å®åçãªäœ¿çšãã¿ãŒã³
Sub CopyVisibleDataToNewSheet2()
' ãã£ã«ã¿åŸã®Bå~Dåãå¥ã®ã·ãŒãã«ã³ããŒ
Dim visibleRange As Range
Set visibleRange = GetVisibleColumnRange2(ActiveSheet, 2, 4)
' æ°ããã·ãŒããäœæ
Dim newSheet As Worksheet
Set newSheet = Worksheets.Add
' å¯èŠã»ã«ãã³ããŒ
visibleRange.Copy newSheet.Range("A1")
MsgBox "ãã£ã«ã¿åŸã®ããŒã¿ãã³ããŒããŸããã", vbInformation
End Sub
ãã¿ãŒã³1ãšã®æ¯èŒ
| é ç® | ãã¿ãŒã³1(éå§+åæ°) | ãã¿ãŒã³2(éå§+çµäº) |
|---|---|---|
| æå®æ¹æ³ | (ws, 2, 3) |
(ws, 2, 4) |
| æå³ | 2åç®ãã3åå | 2åç®ãã4åç®ãŸã§ |
| çŽææ§ | åæ°ãæ°ããå¿ èŠãã | Excelã®ç¯å²æå®ã«è¿ã |
| èšç® | äžèŠ | å éšã§åæ°ãèšç® |
| ãšã©ãŒåŠç | ãªã | é åºã®èªåä¿®æ£ãã |
| ã³ãŒãã®è€éã | ã·ã³ãã« | ããè€é |
ã©ã¡ãã®ãã¿ãŒã³ãæçµçãªçµæã¯åãã§ãããæå®æ¹æ³ã®éãã«ããã䜿ãããããç°ãªããŸãã
ãã¿ãŒã³1ãé©ããŠããå Žå
- åæ°ãæç¢ºã«æ±ºãŸã£ãŠããå Žå
- ãâååããšããèãæ¹ã«æ £ããŠããå Žå
- ã·ã³ãã«ãªå®è£ ã奜ãå Žå
- å°ãªãåæ°(3~5åçšåºŠ)ãæ±ãå Žå
ãã¿ãŒã³2ãé©ããŠããå Žå
- Excelã®åçªå·ã§èããæ¹ãèªç¶ãªå Žå(R1C1圢åŒïŒ
- ããåãããåãŸã§ããšããæå®ã«æ £ããŠããå Žå
- åŒæ°ã®é åºãã¹ãèªåä¿®æ£ãããå Žå
- 倿°ã®å(10å以äž)ãæ±ãå Žå
ãã¿ãŒã³1ãšãã¿ãŒã³2ã¯ãã©ã¡ããåãçµæãè¿ããããããŒã ãå人ã®å¥œã¿ã«å¿ããŠéžæããŠãã ããã
ãã¿ãŒã³3: éé£ç¶åãéžæããæ¹æ³
ãã¿ãŒã³1ãšãã¿ãŒã³2ã¯ãé£ç¶ããåç¯å²ãååŸããæ¹æ³ã§ããããã¿ãŒã³3ã§ã¯ãé¢ããè€æ°ã®åãåæã«ååŸããæ¹æ³ã玹ä»ããŸãã
ããšãã°ããAå(瀟å¡ã³ãŒã)ãšDå(éšçœ²)ãšFå(絊äž)ã ããååŸãããããBåãCåãEåã¯äžèŠããšãã£ãå Žåã«äœ¿ããŸãã
å®è£ ã³ãŒã
' ãã£ã«ã¿åŸã«è¡šç€ºãããŠããæå®ããè€æ°åã®å¯èŠç¯å²ãè¿ã(èŠåºãè¡ãã¹ããã)
' åŒæ°: ã·ãŒããããŒã¿éå§è¡ãåçªå·ã®å¯å€é·åŒæ°
Function GetVisibleColumnRange3(ws As Worksheet, _
Optional skipRow As Long = 1, ParamArray cols() As Variant) As Range
Dim result As Range
Dim currentRange As Range
' é
åã®ååçªå·ã«å¯ŸããŠåŠç
Dim i As Long
For i = LBound(cols) To UBound(cols)
' ååã®å¯èŠç¯å²ãååŸ
With ws.AutoFilter.Range
Set currentRange = .Offset(skipRow, cols(i) - 1) _
.Resize(.Rows.Count - skipRow, 1) _
.SpecialCells(xlCellTypeVisible)
End With
' æåã®åã®å Žåã¯ãã®ãŸãŸä»£å
¥
If result Is Nothing Then
Set result = currentRange
Else
' 2åç®ä»¥éã¯Unionã§çµå
Set result = Union(result, currentRange)
End If
Next i
Set GetVisibleColumnRange3 = result
End Function
ã³ãŒãã®è©³çŽ°è§£èª¬
ãã®ãã¿ãŒã³ã§ã¯ãParamArrayãšUnionãšãã2ã€ã®éèŠãªæŠå¿µã䜿ããŸãã
1. åŒæ°ã®èšèš
Optional skipRow As Long = 1, ParamArray cols() As Variant
ãã¿ãŒã³1ã»2ãšç°ãªããskipRowãå
é ã®OptionalåŒæ°ãšããŠé
眮ããŠããŸããããã¯ãParamArrayã®å¶çŽã«ãããã®ã§ãã
ParamArrayã¯ãå¯å€åã®åŒæ°ãåãåãããã®ç¹æ®ãªããŒã¯ãŒãã§ãå¿
ãæåŸã®åŒæ°ãšããŠé
眮ããå¿
èŠããããŸãããã®ãããskipRowãåã«é
眮ããããéžæè¢ããããŸããã
' ParamArrayã¯æåŸã«é
眮ããå¿
èŠããã
Function GetVisibleColumnRange3(ws As Worksheet, _
Optional skipRow As Long = 1, ParamArray cols() As Variant)
' 以äžã®ãããªé
眮ã¯ã§ããªã(ã³ã³ãã€ã«ãšã©ãŒ)
Function GetVisibleColumnRange3(ws As Worksheet, _
ParamArray cols() As Variant, Optional skipRow As Long = 1)
ãã®å¶çŽã«ãããåŒã³åºãæã®åŒæ°ã®é åºãä»ã®ãã¿ãŒã³ãšç°ãªãããšã«æ³šæãå¿ èŠã§ãã
' skipRowãçç¥ããå Žå(æ¢å®å€1ã䜿çšããã)
Set result = GetVisibleColumnRange3(ActiveSheet, , 1, 3, 5)
' skipRowãæå®ããå Žå
Set result = GetVisibleColumnRange3(ActiveSheet, 2, 1, 3, 5)
skipRowãçç¥ããå Žåãã«ã³ãã«ããçç¥èšæ³ãå¿
èŠã«ãªããŸããå®åã§ã¯ãèŠåºãè¡ã1è¡ã®ã±ãŒã¹ãã»ãšãã©ãªã®ã§ãéåžžã¯çç¥ãã圢ã§ã®äœ¿çšãå€ããªããŸãã
ParamArrayã®å¶éäºé
ParamArrayåŒæ°ã«ã¯ä»¥äžã®å¶éããããŸãã
| å¶é | 説æ |
|---|---|
| é çœ®å Žæ | åŒæ°ãªã¹ãã®æåŸã«é 眮ããå¿ èŠããã |
| OptionaläžèŠ |
OptionalããŒã¯ãŒãã¯äœ¿ããªã |
| åæ°å¶é | 1ã€ã®é¢æ°ã«1ã€ã ã䜿çšã§ãã |
| åæå® | å¿
ãVariantåã§å®£èšããå¿
èŠããã |
ãããã®å¶éã«ãããåŒæ°ã®é 眮é åºã«æè»æ§ããªããªããŸãã
2. ParamArrayã«ããå¯å€é·åŒæ°
ParamArray cols() As Variant
ParamArrayã¯ãå¯å€åã®åŒæ°ãåãåãããã®ç¹æ®ãªããŒã¯ãŒãã§ããããã«ããã颿°åŒã³åºãæã«ä»»æã®åæ°ã®åŒæ°ãæž¡ããããã«ãªããŸãã
' 1ã€ã®åçªå·ãæå®
Set result = GetVisibleColumnRange3(ActiveSheet, , 1)
' 3ã€ã®åçªå·ãæå®
Set result = GetVisibleColumnRange3(ActiveSheet, , 1, 3, 5)
' 5ã€ã®åçªå·ãæå®
Set result = GetVisibleColumnRange3(ActiveSheet, , 1, 2, 4, 6, 8)
æž¡ãããåŒæ°ã¯ãé
åãšããŠcols()ã«æ ŒçŽãããŸãã
3. LBoundãšUBound
For i = LBound(cols) To UBound(cols)
é åãã«ãŒãåŠçããéãé åã®éå§ã€ã³ããã¯ã¹ãšçµäºã€ã³ããã¯ã¹ãç¥ãå¿ èŠããããŸãã
-
LBound(é å): é åã®æå°ã€ã³ããã¯ã¹(Lower Bound = äžé)ãè¿ã -
UBound(é å): é åã®æå€§ã€ã³ããã¯ã¹(Upper Bound = äžé)ãè¿ã
ParamArrayã§åãåã£ãé
åã¯ãéåžž0ããå§ãŸããŸã(0ããŒã¹é
å)ã
' GetVisibleColumnRange3(ActiveSheet, , 1, 3, 5) ãåŒã³åºããå Žå
cols(0) = 1
cols(1) = 3
cols(2) = 5
LBound(cols) = 0
UBound(cols) = 2
LBoundãšUBoundã䜿çšããããšã§ãé
åã®èŠçŽ æ°ã«é¢ãããããã¹ãŠã®èŠçŽ ã確å®ã«åŠçã§ããŸãã
4. ååã®å¯èŠç¯å²ãååŸ
With ws.AutoFilter.Range
Set currentRange = .Offset(skipRow, cols(i) - 1) _
.Resize(.Rows.Count - skipRow, 1) _
.SpecialCells(xlCellTypeVisible)
End With
ã«ãŒãå ã§ãæå®ãããååçªå·ã«ã€ããŠãåäžåã®å¯èŠç¯å²ãååŸããŸããããã¯åºæ¬ãšãªãåäžå察å¿ã³ãŒããšåãåŠçã§ãã
é
åããåãåºããåçªå·cols(i)ã䜿çšããŠã1åãã€ç¯å²ãååŸããŸãã
5. Union颿°ã«ããç¯å²ã®çµå
If result Is Nothing Then
Set result = currentRange
Else
Set result = Union(result, currentRange)
End If
ãããæãéèŠãªéšåã§ããUnion颿°ã¯ãè€æ°ã®ç¯å²ã1ã€ã®ç¯å²ãªããžã§ã¯ãã«çµåãã颿°ã§ãã
æåã®å(resultããŸã Nothingã®å Žå)ã¯ããã®ãŸãŸresultã«ä»£å
¥ããŸãã2åç®ä»¥éã¯ãUnion颿°ã䜿ã£ãŠæ¢åã®resultãšæ°ããcurrentRangeãçµåããŸãã
Union颿°ã®åäœã€ã¡ãŒãž
ããšãã°ãAåãCåãEåãååŸããå Žåã以äžã®ããã«ãã«ãŒããåããã³ã«ç¯å²ã远å ãããŠãããŸãã
1åç®ã®ã«ãŒã: result = Aåã®å¯èŠç¯å²
(result Is Nothing ãªã®ã§ãcurrentRangeã代å
¥)
2åç®ã®ã«ãŒã: result = Union(Aå, Cå)
= AåãšCåã®å¯èŠç¯å²
3åç®ã®ã«ãŒã: result = Union(AåãšCå, Eå)
= AåãšCåãšEåã®å¯èŠç¯å²
Union颿°ã®ç¹æ§
Union颿°ã§çµåããç¯å²ã¯ãéé£ç¶ç¯å²ãšããŠç®¡çãããŸããããã¯ãExcelã§CtrlããŒãæŒããªããè€æ°ã®é¢ããç¯å²ãéžæããç¶æ
ãšåãã§ãã
' Union颿°ã®äœ¿çšäŸ
Set range1 = Range("A1:A10")
Set range2 = Range("C1:C10")
Set combined = Union(range1, range2) ' A1:A10ãšC1:C10ãçµå
Debug.Print combined.Address ' "$A$1:$A$10,$C$1:$C$10"
ãã®ã¢ãã¬ã¹è¡šç€ºãããåããããã«ãã«ã³ãã§åºåãããéé£ç¶ç¯å²ãšããŠæ±ãããŸãã
䜿çšäŸ
äŸ1: AåãšDåã ããååŸ
' 瀟å¡ã³ãŒã(Aå)ãšéšçœ²(Då)ã®ã¿ãååŸ
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange3(ActiveSheet, , 1, 4)
' ååŸããç¯å²ã䜿ã£ãåŠç
Dim area As Range
For Each area In visibleData.Areas
Dim cell As Range
For Each cell In area
Debug.Print cell.Value
Next cell
Next area
äŸ2: è€æ°ã®é¢ããåãååŸ
' AåãCåãEåãGåãååŸ
Dim result As Range
Set result = GetVisibleColumnRange3(ActiveSheet, , 1, 3, 5, 7)
åçªå·ãå¿ èŠãªã ã䞊ã¹ãããšã§ãé¢ããè€æ°åãäžåºŠã«ååŸã§ããŸãã
äŸ3: èŠåºãã2è¡ããå Žå
' èŠåºãã2è¡ã®å ŽåãskipRowã«2ãæå®
' BåãEåãHåãååŸ
Dim result As Range
Set result = GetVisibleColumnRange3(ActiveSheet, 2, 2, 5, 8)
skipRowãæç€ºçã«æå®ããããšã§ãèŠåºãè¡ãè€æ°ãã衚ã«ã察å¿ã§ããŸãã
äŸ4: ååŸããç¯å²ã®åŠç
Sub ProcessNonContiguousColumns()
' AåãšDåãšFåã®å¯èŠã»ã«ãååŸ
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange3(ActiveSheet, , 1, 4, 6)
Dim areaCount As Long
areaCount = 0
' Areasããããã£ã§åãšãªã¢ãåŠç
Dim area As Range
For Each area In visibleData.Areas
areaCount = areaCount + 1
Debug.Print "ãšãªã¢" & areaCount & ": " & area.Address
Debug.Print "ã»ã«æ°: " & area.Cells.Count
' ãšãªã¢å
ã®åã»ã«ãåŠç
Dim cell As Range
For Each cell In area
Debug.Print " " & cell.Value
Next cell
Next area
Debug.Print "åèšãšãªã¢æ°: " & visibleData.Areas.Count
End Sub
ãã®äŸã§ã¯ãéé£ç¶ç¯å²ã®åãšãªã¢ãåå¥ã«åŠçããæ¹æ³ã瀺ããŠããŸãã
äŸ5: å®åçãªäœ¿çšãã¿ãŒã³
Sub ExportSelectedColumns()
' 瀟å¡ã³ãŒã(Aå)ãæ°å(Bå)ãéšçœ²(Eå)ã絊äž(Hå)ã®ã¿ãæœåº
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange3(ActiveSheet, , 1, 2, 5, 8)
' æ°ããã·ãŒããäœæ
Dim newSheet As Worksheet
Set newSheet = Worksheets.Add
' åãšãªã¢ãã³ããŒ
Dim area As Range
Dim destCol As Long
destCol = 1
For Each area In visibleData.Areas
area.Copy newSheet.Cells(2, destCol)
destCol = destCol + 1
Next area
MsgBox "éžæããåã®ããŒã¿ãæœåºããŸããã", vbInformation
End Sub
ãã®äŸã§ã¯ãå¿ èŠãªåã ããæ°ããã·ãŒãã«æœåºããå®çšçãªåŠçã瀺ããŠããŸããéé£ç¶ã®åãå¹ççã«åŠçã§ããŸãã
Areasããããã£ã®çè§£
éé£ç¶ã®ç¯å²ãæ±ãéã«éèŠãªã®ãAreasããããã£ã§ãã
Union颿°ã§çµåããç¯å²ã¯ãå
éšçã«è€æ°ã®ããšãªã¢ããšããŠç®¡çãããŠããŸããããšãã°ãAåãšDåãçµåããå ŽåãAreasããããã£ã¯ããããã®åå¥ãšãªã¢ã®ã³ã¬ã¯ã·ã§ã³ãè¿ããŸãã
-
Area(1): Aåã®å¯èŠã»ã«ç¯å² -
Area(2): Dåã®å¯èŠã»ã«ç¯å²
' åãšãªã¢ã®æ
å ±ã衚瀺
Dim visibleData As Range
Set visibleData = GetVisibleColumnRange3(ActiveSheet, , 1, 4)
For Each area In visibleData.Areas
Debug.Print area.Address ' äŸ: "$A$2:$A$10", "$D$2:$D$10"
Debug.Print "è¡æ°: " & area.Rows.Count
Debug.Print "åæ°: " & area.Columns.Count
Next area
Debug.Print "ç·ãšãªã¢æ°: " & visibleData.Areas.Count ' 2
éé£ç¶ç¯å²ãåŠçããéã¯ãAreasããããã£ã䜿ã£ãŠåãšãªã¢ãåå¥ã«åŠçããããšãæšå¥šãããŸãã
éé£ç¶ç¯å²åŠçæã®æ³šæç¹
éé£ç¶ç¯å²ã«å¯ŸããŠäžéšã®ã¡ãœãããããããã£ã䜿çšãããšãäºæããªãåäœããšã©ãŒãçºçããããšããããŸãã
泚æãå¿ èŠãªæäœ
| æäœ | åäœ | å¯ŸåŠæ³ |
|---|---|---|
Valueãããã㣠|
æåã®ãšãªã¢ã®å€ã®ã¿ãè¿ã |
Areasã§åãšãªã¢ãåå¥ã«åŠç |
Copyã¡ãœãã |
ãšã©ãŒãçºçããå Žåããã | åãšãªã¢ãåå¥ã«ã³ã㌠|
Sortã¡ãœãã |
é£ç¶ç¯å²ã«ã®ã¿é©çšå¯èœ | åãšãªã¢ãåå¥ã«ãœãŒã |
Countãããã㣠|
å šã»ã«æ°ãè¿ã | æ£åžžã«åäœ |
Addressãããã㣠|
ã«ã³ãåºåãã®æåå | æ£åžžã«åäœ |
éé£ç¶ç¯å²ãæ±ãå Žåã¯ãå¿
ãAreasããããã£ã䜿ã£ãŠåãšãªã¢ãåå¥ã«åŠçããããšããå§ãããŸãã
' éæšå¥š: çŽæ¥ValueãååŸ(æåã®ãšãªã¢ã®ã¿)
Debug.Print visibleData.Value
' æšå¥š: Areasã§åãšãªã¢ãåŠç
For Each area In visibleData.Areas
For Each cell In area
Debug.Print cell.Value
Next cell
Next area
R1C1圢åŒãšã®çžæ§
ãã¿ãŒã³3ã¯ãR1C1圢åŒãšã®çžæ§ãç¹ã«è¯å¥œã§ããéé£ç¶ã®åãæå®ããéãã¢ã«ãã¡ãããã§ã¯ãªãæ°åã§æå®ã§ãããããåçªå·ã®ææ¡ãéåžžã«ç°¡åã«ãªããŸãã
AåãEåãJåãMåãRåãæå®ãããå ŽåãR1C1圢åŒã«åãæ¿ãããšãåããããŒã«çŽæ¥æ°åã衚瀺ãããã®ã§ãç»é¢ã§ã1åã5åã10åã13åã18åããšç¢ºèªã§ããŸãã
Set result = GetVisibleColumnRange3(ActiveSheet, , 1, 5, 10, 13, 18)
å¿ èŠãªåãé¢ããŠããã±ãŒã¹ã¯æå€ãšå€ãçºçããŸããç¹ã«ã倧éã®åãæã€ãã¹ã¿ããŒã¿ãããå¿ èŠãªé ç®ã ããæœåºãããå Žåã«ããã¿ãŒã³3ã¯éåžžã«æå¹ã§ããR1C1圢åŒãšçµã¿åãããããšã§ãåæå®ã®æéãå€§å¹ ã«åæžã§ããŸãã
ãšã©ãŒãã³ããªã³ã°ãšãã¹ããã©ã¯ãã£ã¹
ãããããšã©ãŒãšãã®å¯ŸåŠæ³
1. ãªãŒããã£ã«ã¿ãèšå®ãããŠããªã
æãå€ããšã©ãŒã¯ããªãŒããã£ã«ã¿ãèšå®ãããŠããªãã·ãŒãã§é¢æ°ãåŒã³åºããå Žåã§ãã
' ãªãŒããã£ã«ã¿ãèšå®ãããŠããªãå Žåã¯èªåèšå®
If ws.AutoFilterMode = False Or ws.AutoFilter Is Nothing Then
ws.UsedRange.AutoFilter
End If
UsedRangeã¯ãã·ãŒãå
ã§ããŒã¿ãå
¥åãããŠããç¯å²å
šäœãè¿ãããããã£ã§ãããã®ç¯å²ã«å¯ŸããŠAutoFilterã¡ãœãããå®è¡ããããšã§ãã·ãŒãå
šäœã«ãªãŒããã£ã«ã¿ãèšå®ãããŸãã
UsedRangeã®ç¹æ§
UsedRangeããããã£ã¯ãã·ãŒãå
ã§äžåºŠã§ãããŒã¿ãå
¥åãããããšãããç¯å²ãè¿ããŸãã
泚æç¹
- ããŒã¿ãåé€ããŠãã
UsedRangeã«å«ãŸããå Žåããã - 空çœè¡ãå€ã衚ã§ã¯ãäžèŠãªè¡ãŸã§å«ãŸããå¯èœæ§ããã
- ããå³å¯ã«ç¯å²ãæå®ãããå Žåã¯ãæç€ºçã«ç¯å²ãæå®ããŠ
AutoFilterãèšå®
ãã ããå®åã§ã¯UsedRangeã§ååãªã±ãŒã¹ãã»ãšãã©ã§ãã
AutoFilterModeãšAutoFilterã®éã
| ãããã㣠| å | 説æ |
|---|---|---|
AutoFilterMode |
Boolean | ãªãŒããã£ã«ã¿ã®ç¢å°ïŒâŒïŒã衚瀺ãããŠããã |
AutoFilter |
AutoFilter | ãªãŒããã£ã«ã¿ãªããžã§ã¯ã(ç¯å²ãæ¡ä»¶ãå«ã) |
Excelã§ã¯ããªãŒããã£ã«ã¿ã®ç¢å°ã ãã衚瀺ãããå®éã®ãã£ã«ã¿ç¯å²ãèšå®ãããŠããªãç¶æ ãçºçããããšããããŸãã
-
AutoFilterMode = False: ç¢å°ãã衚瀺ãããŠããªãïŒå®å šã«OFFã®ç¶æ ïŒ -
AutoFilter Is Nothing: ç¢å°ã¯è¡šç€ºãããŠããããç¯å²ãèšå®ãããŠããªãïŒèŠãç®ã ãONã®ç¶æ ïŒ
ãã®ãããäž¡æ¹ããã§ãã¯ããããšã§ã確å®ã«ãšã©ãŒãé²ããŸãã
ä»£æ¿æ¡: ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããæ¹æ³
ããããªãŒããã£ã«ã¿ãèªåèšå®ããããšã©ãŒã¡ãã»ãŒãžã ãã衚瀺ãããå Žåã¯ã以äžã®ããã«ããŸãã
' ãªãŒããã£ã«ã¿ãèšå®ãããŠããªãå Žåã¯ãšã©ãŒ
If ws.AutoFilterMode = False Or ws.AutoFilter Is Nothing Then
MsgBox "ãªãŒããã£ã«ã¿ãèšå®ãããŠããŸããã" & vbCrLf & _
"颿°ãå®è¡ããåã«ããªãŒããã£ã«ã¿ãèšå®ããŠãã ããã", _
vbExclamation, "ãšã©ãŒ"
Exit Function
End If
ãã®æ¹æ³ã¯ããŠãŒã¶ãŒã«æåã§ãªãŒããã£ã«ã¿ãèšå®ããããå Žåã«äœ¿çšããŸãããã ããå©äŸ¿æ§ã®èгç¹ããã¯ãèªåèšå®ããæ¹æ³ãæšå¥šãããŸãã
ã©ã¡ãã®æ¹æ³ãéžã¶ã¹ãã
| æ¹æ³ | ã¡ãªãã | ãã¡ãªãã | æšå¥šåºŠ |
|---|---|---|---|
| èªåèšå® | ã» ãŠãŒã¶ãŒãäºåæºåäžèŠ ã» å©äŸ¿æ§ãé«ã ã» ãšã©ãŒãçºçãã«ãã |
ãŠãŒã¶ãŒã®æå³ããªãç¯å²ã«èšå®ãããå¯èœæ§ | â â â |
| ãšã©ãŒè¡šç€º | ã» ãŠãŒã¶ãŒãæç€ºçã«ç¯å²ãèšå®ã§ãã ã» æå³ããªãåäœãé²ãã |
æ¯åæåèšå®ãå¿ èŠ | â ââ |
å®åã§ã¯ãèªåèšå®ããæ¹æ³ãæšå¥šããŸããã»ãšãã©ã®å ŽåãUsedRangeã§é©åãªç¯å²ãèšå®ããããŠãŒã¶ãŒã®æéã倧å¹
ã«åæžã§ããŸããç¹æ®ãªç¯å²æå®ãå¿
èŠãªå Žåã®ã¿ãäºåã«æåã§èšå®ããéçšã«ããã°ããã§ãããã
2. å¯èŠã»ã«ãååšããªã
ãã£ã«ã¿æ¡ä»¶ã«ãã£ãŠã¯ããã¹ãŠã®è¡ãé衚瀺ã«ãªãããšããããŸãããã®å ŽåãSpecialCells(xlCellTypeVisible)ã¯ãšã©ãŒãçºçãããŸãã
On Error Resume Next
' åŠçïŒçç¥ïŒ
' ãšã©ãŒãçºçããå Žå(å¯èŠã»ã«ãååšããªã)
If Err.Number <> 0 Then
MsgBox "衚瀺ãããŠããããŒã¿ããããŸããã", vbInformation, "æ
å ±"
Set GetVisibleColumnRange = Nothing
Err.Clear
End If
On Error GoTo 0
On Error Resume Nextã䜿çšããŠããšã©ãŒãçºçããŠãåŠçãç¶ç¶ããŸãããšã©ãŒãçºçããå Žåã¯ãNothingãè¿ããŠã¡ãã»ãŒãžã衚瀺ããŸãã
3. åçªå·ã®ç¯å²ãã§ãã¯
æå®ãããåçªå·ãããªãŒããã£ã«ã¿ç¯å²ã®åæ°ãè¶ ããŠããå Žåã®ãã§ãã¯ã远å ã§ããŸãã
' åç¯å²ã®ãã§ãã¯
Dim maxCol As Long
maxCol = ws.AutoFilter.Range.Columns.Count
If Col < 1 Or Col > maxCol Then
MsgBox "åçªå·ãç¯å²å€ã§ãã(1~" & maxCol & ")", vbExclamation, "ãšã©ãŒ"
Exit Function
End If
If Col + ColCount - 1 > maxCol Then
MsgBox "æå®ãããåæ°ããªãŒããã£ã«ã¿ç¯å²ãè¶
ããŠããŸãã", vbExclamation, "ãšã©ãŒ"
Exit Function
End If
颿°ã®æ»ãå€ãã§ãã¯
颿°ãåŒã³åºãåŽã§ããæ»ãå€ãNothingã§ãªããããã§ãã¯ããããšãéèŠã§ãã
Dim visibleRange As Range
Set visibleRange = GetVisibleColumnRange(ActiveSheet, 2, 1, 3)
' æ»ãå€ã®ãã§ãã¯
If visibleRange Is Nothing Then
MsgBox "å¯èŠã»ã«ãååŸã§ããŸããã§ããã", vbExclamation
Exit Sub
End If
' åŠçãç¶è¡
Is Nothingã§æ»ãå€ããã§ãã¯ããããšã§ããšã©ãŒãçºçããå Žåã§ãå®å
šã«åŠçãçµäºã§ããŸãã
ãã¹ããã©ã¯ãã£ã¹
| é ç® | æšå¥šå 容 |
|---|---|
| ãšã©ãŒãã§ã㯠| AutoFilterã®æç¡ãå¿ ãç¢ºèª |
| æ»ãå€ã®ç¢ºèª | åŒã³åºãåŽã§Is Nothingãã§ãã¯ã宿œ |
| åç¯å²ã®æ€èšŒ | åçªå·ããªãŒããã£ã«ã¿ç¯å²å ãç¢ºèª |
| ãŠãŒã¶ãŒãžã®éç¥ | ãšã©ãŒæã¯åãããããã¡ãã»ãŒãžã衚瀺 |
| ã³ã¡ã³ãèšè¿° | 颿°ã®äœ¿ãæ¹ãåŒæ°ã®æå³ãæèš |
ããããå®è£ ããããšã§ãäºæããªããšã©ãŒãé²ããã¡ã³ããã³ã¹æ§ã®é«ãã³ãŒãã«ãªããŸãã
ãšã©ãŒåŠçã®ç²åºŠ
ä»å玹ä»ãããšã©ãŒåŠçã¯ããã¹ãŠãå®è£ ããå¿ èŠã¯ãããŸããã䜿çšããç°å¢ãèŠä»¶ã«å¿ããŠãå¿ èŠãªéšåã ããéžæããŠãã ããã
ããšãã°ããªãŒããã£ã«ã¿ãåžžã«èšå®ãããŠããããšãä¿èšŒãããŠããç°å¢ã§ã¯ãAutoFilterã®ãã§ãã¯ã¯äžèŠãããããŸãããäžæ¹ãäžç¹å®å€æ°ã®ãŠãŒã¶ãŒã䜿çšããããŒã«ã§ã¯ããã¹ãŠã®ãã§ãã¯ãå®è£ ããããšããå§ãããŸãã
ãŸãšã
ä»å解説ãããã£ã«ã¿å¯èŠã»ã«ååŸé¢æ°ã®è€æ°å察å¿å®è£ ãã¯ããã¯ã¯ãããã£ã«ã¿åŸã®ããŒã¿ããå¿ èŠãªåã ããå¹ççã«æœåºãããããé£ç¶åã»éé£ç¶åãæè»ã«æå®ããŠåŠçãããããšãã£ãå®åã«ããã課é¡ãäœç³»çãã€ç¢ºå®ã«è§£æ±ºããå®çšçãªææ³ã§ãã
ãã®ææ³ã®æ žå¿ãšãªãã®ã¯ãéå§åãšåæ°ã«ããé£ç¶ç¯å²æå®ãéå§åãšçµäºåã«ããçŽæçãªç¯å²æå®ããããŠParamArrayãšUnion颿°ã掻çšããéé£ç¶åã®åæååŸãšãã3ã€ã®ãã¿ãŒã³ã®äœ¿ãåãã§ããå®è£ æã«ç¹ã«éèŠãªã®ã¯ãOptionalåŒæ°ã®é 眮é åºã«ãã䜿çšé »åºŠãžã®æé©åãšãR1C1圢åŒãšã®çµã¿åããã«ããåçªå·æå®ã®ç°¡çŽ åã§ãã
åäžåããååŸã§ããªãå¶çŽã§ã¯è€æ°åã®é¢æ°åŒã³åºããå¿ èŠã§ã倿°ç®¡çãç ©éã«ãªãåé¡ã«å¯ŸããResizeã¡ãœããã®åæ°æå®ãšSpecialCellsã«ããå¯èŠã»ã«æœåºãçµã¿åãããé£ç¶å察å¿ãããã«Union颿°ã«ããéé£ç¶ç¯å²ã®çµååŠçã«ããã瀟å¡ã³ãŒãã»æ°åã»éšçœ²ãšãã£ãé¢ããåãäžåºŠã«ååŸã§ããæè»ãªããŒã¿æœåºã·ã¹ãã ãæ§ç¯ã§ããŸãã
ãŸããAutoFilterã®èªåèšå®ã«ããäºåæºåã®ç°¡ç¥åãå¯èŠã»ã«äžåšæã®ãšã©ãŒãã³ããªã³ã°ãåç¯å²ã®åŠ¥åœæ§ãã§ãã¯ãšãã£ãå ç¢ãªå®è£ ãã¿ãŒã³ã«ãããäºæããªããšã©ãŒãé²ããªããå®å®åäœããçºå±çãªããŒã«ãšããŠæé·ãããããšãå¯èœã§ãAreasããããã£ã«ããéé£ç¶ç¯å²ã®é©åãªåŠçãšã®çµã¿åããã«ããã倧éã®ããŒã¿ããå¿ èŠãªæ å ±ã ããæœåºããå®åã§å®å¿ããŠäœ¿ããå®æåºŠã®é«ãæ¥åæ¯æŽé¢æ°ãšããŠæŽ»çšã§ããŸãã
次åã¯ãParamArrayãæŽ»çšããå¯å€åŒæ°ã«ããæååé£çµé¢æ°ã®å®è£ ãã¯ããã¯ã«ã€ããŠè§£èª¬ããŠããäºå®ã§ãïŒãã²ãæåŸ ãã ããïŒ
