| 
    
     |  | ▼situmon さん: 
 まず、Call パス取得(fpath) ですけど、もちろんSubプロシジャで引数に値を返すことはできます。
 ただし、その場合は Public Sub パス取得(ByRefl fpath As String) にする必要があります。
 (通常のCallを書けばデフォルトByRefですけどね)
 ByVal は値渡しで、サブプロシジャ側でテンポラリーに生成されるfpathという名前の(プロシジャレベルの)変数に
 呼び出し側の引数の値がいれられるだけで、サブプロシジャ側でfpathに値をセットしても
 呼び出し側の元々のfpathは更新されません。
 
 普通は、Functionプロシジャ仕立てにしますね。
 
 また、標準モジュールのプロシジャには、とくにPublicと記述する必要はありません。
 それと cの値を扱うわけですが、c.Value とプロパティを明示したほうがわかりやすいですね。
 
 ということで、以下のようにして試してみてください。
 選択領域の値が空白であるとか、フォルダ名には使用できない文字だとか、あるいはすでに同名のフォルダがあるとか、
 本来は、そのようなチェックもいれるほうぎいと思いますが、割愛しています。
 
 Sub フォルダ保存()
 Dim fpath As String
 Dim fso As String
 Dim c As Variant
 
 For Each c In Selection
 fpath = パス取得
 fso = fpath & "\" & c.Value
 MkDir fso
 Next c
 
 End Sub
 
 Function パス取得() As String
 パス取得 = ThisWorkbook.Path
 End Function
 
 
 |  |