質問: Application.GetOpenFilename("Microsoft Excelブック,*.xls?") '列削除の処理 End Sub Sub 行削除() Dim filePath As String Call 列削除(filePath) '行削除の処理 End Sub ```
回答: その例だと行削除の中で列削除してしまいますが大丈夫ですか・・・? 別々に行いたいものと仮定してお答えします。 ダイアログを求める部分と処理を行うプロシージャを分割するのが一般的です。 ``` Sub 列削除(ByVal filePath As String) '列削除の処理 End Sub Sub 列削除_dlg() Dim filePath As String filePath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Call 列削除(filePath) End Sub Sub 行削除(ByVal filePath As String) '行削除の処理 End Sub Sub 行削除_dlg() Dim filePath As String filePath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Call 行削除(filePath) End Sub Sub 行と列削除_dlg() Dim filePath As String filePath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Call 列削除(filePath) Call 行削除(filePath) End Sub ``` プロシージャ分割をしたくない場合はこんな方法も考えられます。 ※ただしエクセルが再起動したり「END」ステートメントが実行されるまで、ダイアログが二度と要求されなくなりますので、都度確認が必要な場合は使えません。 ``` Function ファイル選択() As String Static OpenFilePath As String If OpenFilePath = "" Then OpenFilePath = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") End If ファイル選択 = OpenFilePath End Function Sub 列削除() Dim filePath As String filePath = ファイル選択 '列削除の処理 End Sub Sub 行削除() Dim filePath As String filePath = ファイル選択 '行削除の処理 End Sub Sub 行と列削除() Call 列削除 Call 行削除 End Sub ```