Excel VBAã§ç¯å²å ã®å³åœ¢ãå¹ççã«åé€ãããã¯ããã¯
ç§ã¯VBAã®æŽ»çšçµéšãéããŠåŸãç¥èãæŽçããå ±æããç®çã§èšäºãäœæããŠããããã°ã©ãã³ã°æŽ1幎åã«ãªããšã³ãžãã¢ã§ããååã¯ãæ£èŠè¡šçŸã掻çšããŠãã¡ã€ã«åããç¹å®ã®ãã¿ãŒã³ãæœåºãããã¯ããã¯ã«ã€ããŠè§£èª¬ããŸãããä»åã¯ãéžæããã»ã«ç¯å²ã«éãªãå³åœ¢ã ãããŸãšããŠåé€ããå®è·µçãªãã¯ããã¯ã«ã€ããŠè©³ãã説æããŸãã
- 第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ã«ãããç¬èªã€ãã³ãã®èšèšãšå®è£ ãã¯ããã¯
ç®æ¬¡
- ã¯ããã«
- å³åœ¢åé€ãã¯ãã®åºæ¬æ§é
- Shapeãªããžã§ã¯ããšã¯
- ã³ãŒãã®è©³çŽ°è§£èª¬
- å®è¡æã®åäœãšãŠãŒã¹ã±ãŒã¹
- å¿çšãšæ¡åŒµã®ã¢ã€ãã¢
- å®è£ æã®æ³šæç¹
- ãŸãšã
ã¯ããã«
Excelã·ãŒãäžã§å³åœ¢ãªããžã§ã¯ãïŒããã¹ãããã¯ã¹ãç·ãç¢å°ãªã©ïŒã掻çšããæ©äŒã¯æå€ãšå€ãã§ãããã®ãããå³åœ¢ãæ£åšããã·ãŒããæŽçããå¿ èŠã«è¿«ãããããšããããŸããç¹ã«ä»è ããåãåã£ããã¡ã€ã«ãé·æéæŽæ°ãããŠããããã¯ã§ã¯ãäžèŠãªå³åœ¢ãæ®ã£ãŠããããšãå°ãªããããŸãããä»åã¯ãéžæããç¯å²å ã«ååšããå³åœ¢ãäžæ¬ã§åé€ããã·ã³ãã«ãã€å®çšçãªVBAã³ãŒãã«ã€ããŠè§£èª¬ããŸãã
å³åœ¢åé€ãã¯ãã®åºæ¬æ§é
ã·ã³ãã«ãªã³ãŒãã§ãããè€æ°ã®éèŠãªæŠå¿µãçµã¿åããããŠããŸãã
'ã»ã«ç¯å²ã®å³åœ¢ãåé€
Sub DelShapes()
' Shapeãªããžã§ã¯ã(å³åœ¢)ãšRangeãªããžã§ã¯ã(ç¯å²)ãæäœããããã®å€æ°
Dim obj As Shape, mg As Range
' ãŠãŒã¶ãŒãéžæããŠããç¯å²ãæ ŒçŽ
Set mg = Selection
' ActiveSheet(çŸåšã®ã·ãŒã)ã«ååšããShapeãªããžã§ã¯ã(å³åœ¢)ã1ã€ãã€èª¿ã¹ã
For Each obj In ActiveSheet.Shapes
' ãªããžã§ã¯ãã®å·Šäžãšå³äžã®ã»ã«ããŠãŒã¶ãŒãéžæããç¯å²ãšéãªã£ãŠããã確èª
If Not Intersect(Range(obj.TopLeftCell, _
obj.BottomRightCell), mg) Is Nothing Then
'å³åœ¢ããŠãŒã¶ãŒã®éžæç¯å²å
ã«ããå Žåããã®å³åœ¢ãåé€
obj.Delete
End If
Next obj
End Sub
Shapeãªããžã§ã¯ããšã¯
Shapeãªããžã§ã¯ãã¯ãExceläžã®å³åœ¢èŠçŽ ã衚ããŸããããã«ã¯ä»¥äžã®ãããªãã®ãå«ãŸããŸãã
- åºæ¬å³åœ¢ïŒåè§åœ¢ãåãç¢å°ãªã©ïŒ
- ç»å
- ã°ã©ã
- ããã¹ãããã¯ã¹
- ã³ã¡ã³ãïŒæ³šéïŒ
- SmartArt
- ã¢ã€ã³ã³
Shapesã³ã¬ã¯ã·ã§ã³ã¯Worksheetãªããžã§ã¯ãã®ããããã£ã§ãããã·ãŒãäžã®ãã¹ãŠã®å³åœ¢ãå«ãã³ã¬ã¯ã·ã§ã³ã§ããVBAã§ã¯ããã®ã³ã¬ã¯ã·ã§ã³ã䜿ã£ãŠå³åœ¢ã«ã¢ã¯ã»ã¹ããæäœããããšãã§ããŸãã
å³åœ¢ã®äœçœ®ã衚ãããããã£
-
TopLeftCellããããã£
å³åœ¢ã®å·Šäžè§ãäœçœ®ããã»ã«ãè¿ããŸããå³åœ¢ãè€æ°ã®ã»ã«ã«ãŸããã£ãŠããå Žåãæãå·Šäžã«ããã»ã«ãè¿ãããŸãã
-
BottomRightCellããããã£
å³åœ¢ã®å³äžè§ãäœçœ®ããã»ã«ãè¿ããŸããå³åœ¢ã®å³äžç«¯ãäœçœ®ããã»ã«ãæ£ç¢ºã«ç¹å®ã§ããŸãã
ãããã®ããããã£ã¯ãå³åœ¢ãã©ã®ç¯å²ã®ã»ã«ãå æããŠããããå€å®ããããã«äœ¿çšãããŸããå®éã®æ¥åã§ã¯ãå³åœ¢ã®é çœ®å Žæãç¹å®ããããç¹å®ã®ç¯å²å ã«ããå³åœ¢ãæ€çŽ¢ãããããéã«éèŠãªåœ¹å²ãæãããŸãã
ã³ãŒãã®è©³çŽ°è§£èª¬
éžæç¯å²ã®ååŸ
Set mg = Selection
Selectionããããã£ã¯ãçŸåšãŠãŒã¶ãŒãéžæããŠããç¯å²ãååŸããExcelã®æšæºããããã£ã§ãããã®åŠçã«ããããã¯ãå®è¡æã«ãŠãŒã¶ãŒãéžæããŠããç¯å²ãmg倿°ã«æ ŒçŽãããŸãã
å³åœ¢ã®ã«ãŒãåŠç
For Each obj In ActiveSheet.Shapes
ActiveSheet.Shapes
ã¯ãçŸåšã¢ã¯ãã£ããªã·ãŒãäžã®ãã¹ãŠã®å³åœ¢ãå«ãã³ã¬ã¯ã·ã§ã³ã§ãããã®ã³ã¬ã¯ã·ã§ã³ã«å¯ŸããŠFor Eachæã䜿çšããããšã§ãã·ãŒãäžã®ãã¹ãŠã®å³åœ¢ãé æ¬¡åŠçã§ããŸãã
ã³ã¬ã¯ã·ã§ã³ãªããžã§ã¯ã
åãåã®è€æ°ã®ãªããžã§ã¯ãããŸãšããŠç®¡çããããã®ãªããžã§ã¯ãã®ããšã§ããé åãšäŒŒãŠããŸãããããé«åºŠãªæ©èœãæã¡ããªããžã§ã¯ãã®è¿œå ã»åé€ã»æ€çŽ¢ãªã©ãå¹ççã«è¡ãããšãã§ããŸãã
ç¯å²ãšã®äº€å·®å€å®
If Not Intersect(Range(obj.TopLeftCell, _
obj.BottomRightCell), mg) Is Nothing Then
ãããæãéèŠãªéšåã§ãããã®ã³ãŒãã¯ãå³åœ¢ãéžæç¯å²ãšéãªã£ãŠãããã©ãããå€å®ããŠããŸãã
-
obj.TopLeftCell
- å³åœ¢ã®å·Šäžé ãäœçœ®ããã»ã«ã衚ããŸã -
obj.BottomRightCell
- å³åœ¢ã®å³äžé ãäœçœ®ããã»ã«ã衚ããŸã -
Range(obj.TopLeftCell, obj.BottomRightCell)
- å³åœ¢ãå²ãã»ã«ç¯å²ã衚ããŸã -
Intersect
- 2ã€ã®ç¯å²ã®å ±ééšåãè¿ã颿°ã§ããå ±ééšåããªãå Žåã¯Nothing
ãè¿ããŸã -
Not ... Is Nothing
- å ±ééšåãååšãããã©ããããã§ãã¯ããŸã
ãã®æ¡ä»¶æã¯ãå³åœ¢ãå²ãã»ã«ç¯å²ãšéžæç¯å²ã«å ±ééšåããããïŒå³åœ¢ãéžæç¯å²å ãŸãã¯éžæç¯å²ãšéãªã£ãŠãããïŒããå€å®ããŠããŸãã
éãªãå€å®ã®è©³çްçè§£
- å®å šã«å å : å³åœ¢ãå®å šã«éžæç¯å²å ã«åãŸã£ãŠããå Žå
- éšåçãªéãªã: å³åœ¢ã®äžéšãéžæç¯å²ãšéãªã£ãŠããå Žå
- å®å šã«å€éš: å³åœ¢ãéžæç¯å²ãšå šãéãªã£ãŠããªãå Žå
Intersectã¡ãœããã¯ããå®å šã«å å ããšãéšåçãªéãªããã®äž¡æ¹ãæ€åºãããå®å šã«å€éšãã®å Žåã®ã¿Nothingãè¿ããŸããããã«ãããå°ãã§ãéžæç¯å²ãšéãªã£ãŠããå³åœ¢ã¯ãã¹ãŠåé€å¯Ÿè±¡ãšãªããŸãã
å®è¡æã®åäœãšãŠãŒã¹ã±ãŒã¹
ãã®ãã¯ããå®è¡ãããšã以äžã®é åºã§åŠçãè¡ãããŸãã
- ãŠãŒã¶ãŒãç¯å²ãéžæããŸãïŒäŸïŒA1:E10ïŒ
- ãã¯ããå®è¡ããŸã
- ãã¯ãã¯éžæç¯å²å ã«ããããŸãã¯éžæç¯å²ãšéãªã£ãŠããå³åœ¢ãç¹å®ããŸã
- 該åœããå³åœ¢ããã¹ãŠåé€ããŸã
ãã®ãã¯ãã¯ä»¥äžã®ãããªã·ãŒã³ã§ç¹ã«åœ¹ç«ã¡ãŸãã
- ä»è ããåãåã£ãExcelãã¡ã€ã«ã®äžèŠãªå³åœ¢ãæŽçããå Žå
- è€æ°ã®ã³ã¡ã³ããæ³šéãç¯å²æå®ã§äžæ¬åé€ããå Žå
å¿çšãšæ¡åŒµã®ã¢ã€ãã¢
ãã®ã³ãŒãã¯ãåºæ¬çãªæ©èœãæäŸããŠããŸãããå®éã®ããŒãºã«åãããŠä»¥äžã®ããã«æ¡åŒµããããšãã§ããŸãã
1. ç¹å®ã®å³åœ¢ã¿ã€ãã®ã¿ãåé€ãã
å³åœ¢ã«ã¯æ§ã
ãªã¿ã€ãããããShapeType
ããããã£ã䜿ã£ãŠç¹å®ã®ã¿ã€ãã ããåé€ããããšãã§ããŸãã
' ç»åã®ã¿ãåé€ããäŸ
If obj.Type = msoPicture Then
obj.Delete
End If
2. 確èªãã€ã¢ãã°ã®è¿œå
誀ã£ãŠéèŠãªå³åœ¢ãåé€ããªããããå®è¡åã«ç¢ºèªãã€ã¢ãã°ã衚瀺ããããšãã§ããŸãã
If MsgBox("éžæç¯å²å
ã®å³åœ¢ãåé€ããŸããïŒ", vbYesNo + vbQuestion) = vbYes Then
' åé€åŠç
End If
3. åé€ããå³åœ¢ã®æ°ãå ±åãã
åŠçã®éææ§ãé«ãããããåé€ããå³åœ¢ã®æ°ããŠãŒã¶ãŒã«å ±åããããšãæçšã§ãã
Dim deletedCount As Long
deletedCount = 0
' åé€åŠçäžã«ã«ãŠã³ãã¢ãã
obj.Delete
deletedCount = deletedCount + 1
' åŠççµäºåŸã«å ±å
MsgBox deletedCount & "åã®å³åœ¢ãåé€ããŸããã", vbInformation
4. éžæç¯å²ã«å®å šã«å«ãŸããå³åœ¢ã®ã¿ãåé€
çŸåšã®ã³ãŒãã¯ãéžæç¯å²ãšå°ãã§ãéãªã£ãŠããå³åœ¢ãåé€ããŸãããå®å šã«éžæç¯å²å ã«å«ãŸããå³åœ¢ã®ã¿ãåé€ããããã«å€æŽããããšãã§ããŸãã
' å³åœ¢ãéžæç¯å²ã«å®å
šã«å«ãŸããŠãããããã§ãã¯
If IsShapeCompletelyInRange(obj, mg) Then
obj.Delete
End If
' å€å®çšã®é¢æ°
Function IsShapeCompletelyInRange(shp As Shape, rng As Range) As Boolean
Dim shpRange As Range
Set shpRange = Range(shp.TopLeftCell, shp.BottomRightCell)
' shpRangeãrngã«å®å
šã«å«ãŸããŠããããå€å®
IsShapeCompletelyInRange = (shpRange.Address = Intersect(shpRange, rng).Address)
End Function
5. ãªãœãŒã¹ã®éæŸãã¿ãŒã³ã®å®è£
å®éã®æ¥åã§ã¯ãåŠçäžã«ãšã©ãŒãçºçããããšããããŸãããã®ãããªå Žåã§ããé©åã«ãªãœãŒã¹ãéæŸããã·ã¹ãã ãå®å®ããç¶æ ã«ä¿ã€ããšãéèŠã§ãã
' ãšã©ãŒãçºçããå Žåã®åŠçå
ãæå®
On Error GoTo Cleanup
Cleanup:
' ãšã©ãŒãçºçããŠããå Žåã¯ãšã©ãŒå
容ã衚瀺
If Err.Number <> 0 Then
MsgBox "å³åœ¢åé€äžã«ãšã©ãŒãçºçããŸãã: " & Err.Description, vbCritical
' ãšã©ãŒæ
å ±ãã¯ãªã¢ããŸã
Err.Clear
End If
' ãªããžã§ã¯ã倿°ãè§£æŸããã¡ã¢ãªãéæŸããŸã
Set obj = Nothing
Set mg = Nothing
ãªããªãœãŒã¹éæŸãéèŠãªã®ã
VBAã§ã¯ããªããžã§ã¯ã倿°ã«Nothing
ã代å
¥ããããšã§ããã®ãªããžã§ã¯ããžã®åç
§ãè§£æŸããŸããããã«ãããExcelã䜿çšããŠããã¡ã¢ãªãé©åã«ååããããšãã§ããŸããç¹ã«å€§éã®å³åœ¢ãæ±ãåŠçããç¹°ãè¿ãå®è¡ããããã¯ãã§ã¯ããã®ãªãœãŒã¹éæŸãéèŠã«ãªããŸãã
å®è£ æã®æ³šæç¹
ãã®ã³ãŒããå®è£ ã»äœ¿çšããéã«ã¯ã以äžã®ç¹ã«æ³šæããŠãã ããã
1. åé€ã®äžå¯éæ§
å³åœ¢ã®åé€ã¯å ã«æ»ããŸãããéèŠãªå³åœ¢ãããã·ãŒãã§ã¯ãäºåã«ããã¯ã¢ãããåãããšããå§ãããŸãã
2. éžæç¯å²ã®éèŠæ§
ãã®ãã¯ãã¯éžæç¯å²ã«åºã¥ããŠåäœããããã誀ã£ãç¯å²ãéžæãããšæå³ããªãå³åœ¢ãåé€ãããå¯èœæ§ããããŸããå®è¡åã«éžæç¯å²ã確èªããç¿æ £ãã€ããŸãããã
3. ç¹æ®ãªå³åœ¢ãžã®å¯Ÿå¿
äžéšã®ç¹æ®ãªå³åœ¢ïŒã°ã«ãŒãåãããå³åœ¢ãããã°ã©ã ã«ãã£ãŠä¿è·ãããå³åœ¢ãªã©ïŒã¯ããã®ã³ãŒãã§ã¯é©åã«åŠçã§ããªãå ŽåããããŸããå¿ èŠã«å¿ããŠãšã©ãŒãã³ããªã³ã°ã远å ããããšãæ€èšããŠãã ããã
If Err.Number <> 0 Then
' ãšã©ãŒãçºçããå Žåã®åŠç
Debug.Print "å³åœ¢ã®åé€äžã«ãšã©ãŒãçºçããŸãã: " & Err.Description
Err.Clear
End If
ãŸãšã
ãã®èšäºã§ã¯ãéžæç¯å²å ã®å³åœ¢ãäžæ¬åé€ããã·ã³ãã«ãªãã䟿å©ãªVBAã³ãŒãã«ã€ããŠè§£èª¬ããŸããããã®ã³ãŒãã¯ãæ¥åžžçãªExceläœæ¥ã®å¹çåã«è²¢ç®ããç¹ã«å³åœ¢ãå€ãããã¯ã®æŽçã«åœ¹ç«ã¡ãŸãã
ã³ãŒãã®æ žå¿éšåã¯ãShapeãªããžã§ã¯ãã®ããããã£ãšIntersect
颿°ãçµã¿åãããããšã§ãå³åœ¢ãšéžæç¯å²ã®äœçœ®é¢ä¿ãå€å®ããæ¡ä»¶ã«åèŽããå³åœ¢ãåé€ãããšããã·ã³ãã«ãªããžãã¯ã§ãã
ãã®ã³ãŒããåºç€ãšããŠãå®éã®æ¥åããŒãºã«åãããã«ã¹ã¿ãã€ãºãè¡ãããšã§ããã䟿å©ãªããŒã«ã«ãªãã§ãããããŸãããã®ã³ãŒããçè§£ããããšã§ãExcelã®Shapeãªããžã§ã¯ãã®æ±ãæ¹ãç¯å²ã®å€å®æ¹æ³ãªã©ãVBAããã°ã©ãã³ã°ã®åºæ¬çãªãã¯ããã¯ãåŠã¶ããšãã§ããŸãã
次åã¯ãæå®ããããã©ã«ãå ããææ°ã®Excelãã¡ã€ã«ãèªåçã«æ€çŽ¢ã»ååŸããå®è·µçãªé¢æ°ã«ã€ããŠè§£èª¬ããŸãããã¯ãã§ææ°ã®ãã¡ã€ã«ããæ å ±ãååŸããéã«äŸ¿å©ãªã³ãŒãã§ãããã²ãæåŸ ãã ããïŒ